web-dev-qa-db-fra.com

VBA définissant la formule d'une cellule

J'essaie de définir la formule d'une cellule en utilisant un nom de feuille (créé dynamiquement) et une adresse de cellule fixe. J'utilise la ligne suivante mais ne semble pas pouvoir la faire fonctionner:

"=" & strProjectName & "!" & Cells(2, 7).Address

Tout conseil expliquant pourquoi cela ne fonctionne pas ou produisant dans la bonne direction serait grandement apprécié.

Merci d'avance

6
Ryuu

Vous ne savez pas ce qui ne fonctionne pas dans votre cas, mais le code suivant mettra une formule dans la cellule A1 qui récupérera la valeur dans la cellule G2.

strProjectName = "Sheet1"
Cells(1, 1).Formula = "=" & strProjectName & "!" & Cells(2, 7).Address

Le classeur et la feuille de calcul auxquels strProjectName fait référence doivent exister au moment où cette formule est placée. Excel essaiera immédiatement d'évaluer la formule. Vous pourrez peut-être empêcher cela de se produire en désactivant le recalcul automatique jusqu'à ce que le classeur existe.

16
Stewbob

Essayer:

.Formula = "='" & strProjectName & "'!" & Cells(2, 7).Address

Si le nom de votre feuille de calcul (strProjectName) contient des espaces, vous devez inclure les guillemets simples dans la chaîne de formule.

Si cela ne le résout pas, veuillez fournir plus d'informations sur l'erreur ou l'échec spécifique.

Mise à jour

Dans les commentaires, vous indiquez que vous remplacez les espaces par des traits de soulignement. Vous faites peut-être quelque chose comme:

strProjectName = Replace(strProjectName," ", "_")

Mais si vous n'appuyez pas également sur ce changement dans le Worksheet.Name propriété, vous pouvez vous attendre à ce que cela se produise:

  1. La boîte de dialogue de navigation dans les fichiers apparaît
  2. La formule renvoie #REF Erreur

La raison des deux est que vous passez une référence à une feuille de calcul qui n'existe pas, c'est pourquoi vous obtenez l'erreur #REF. La boîte de dialogue de fichier est une tentative pour vous permettre de corriger cette référence, en pointant sur un fichier dans lequel ce nom de feuille existe existe. Lorsque vous annulez, l'erreur #REF est attendue.

Vous devez donc faire:

Worksheets(strProjectName).Name = Replace(strProjectName," ", "_")
strProjectName = Replace(strProjectName," ", "_")

Ensuite, votre formule devrait fonctionner.

4
David Zemens

Si Cells (1, 1) .Formula donne une erreur 1004, comme dans mon cas, le change en:

Cells(1, 1).FormulaLocal
1
Eneas Gesing

Si vous souhaitez créer directement l'adresse, la feuille de calcul doit exister.

Désactiver le recalcul automatique veut vous aider :)

Mais ... vous pouvez obtenir de la valeur indirectement ...

.FormulaR1C1 = "=INDIRECT(ADDRESS(2,7,1,0,""" & strProjectName & """),FALSE)"

Au moment où la formule est insérée, elle renvoie une erreur #REF, car la feuille strProjectName n'existe pas.

Mais après l'apparition de cette feuille de calcul, Excel calculera à nouveau la formule et la valeur appropriée sera affichée.
Inconvénient: il n'y aura pas de suivi, donc si vous déplacez la cellule ou changez le nom de la feuille de calcul, la formule ne s'adaptera pas aux changements comme dans l'adressage direct.

0
Carnifex