Insérer une formule faisant référence à une cellule en "dynamique"

Bonjour !

Je m'explique, j'ai une colonne B contenant des références de feuilles (1,2,3,A1,A2,A3...)

Je souhaite, grâce à une macro, mettre dans la colonne C une formule qui va rechercher la valeur d'une cellule dans la feuille faisant référence à la valeur de la colonne B.

J'ai donc ce code :

Sub test()
Dim i As Long

i = 2
While Range("B" & i).Value <> ""
    Range("C" & i).Formula = "[Feuille de route conducteur_fr-FR.xlsx]B2!$G$8:$G$20"
    i = i + 1
Wend

End Sub

Le problème c'est que je n'arrive pas à automatiser le choix de la feuille dans la formule. (Au lieu d'avoir B2 je voudrais avoir quelque chose faisant référence à la colonne d'à côté)

J'ai pensé à utiliser ma variable i en mettant :

range("B & i)"

mais ca ne fonctionne pas

C'est confu et je m'en excuse

Merci pour votre aide.

19transfert.xlsx (44.13 Ko)

Bonjour,

Tu es sur la bonne voie, mais il faut d'abord comprendre la fonction des guillemets. Pour Excel ou VBA, ils sont utilisés pour délimiter un texte, dans lequel il n'y a donc rien à interpréter. "i" entre guillemets, ça écrit la lettre i, pas la valeur contenue dans la variable du même nom...

Une piste :

Sub test()

Dim i As Long

i = 2
While Range("B" & i).Value <> ""
    Range("C" & i).Formula = "[Feuille de route conducteur_fr-FR.xlsx]B" & i & "!$G$8:$G$20"
    i = i + 1
Wend

End Sub

Merci beaucoup !

Je comprenais le fonctionnement des guillemets mais je n'avais pas trouvé la manière de les couper et de les remettre ! Merci à toi !

Si il est possible de solliciter une dernière fois ton aide :

Je n'avais pas encore mit le = pensant que j'y arriverai facilement mais actuellement quand je le mets et que j'exécute ma macro j'ai une erreur : "erreur d'exécution '1004' erreur définit par l'application ou par l'objet

Saurais tu d'où peut provenir cette erreur ?

Merci infiniment

Il y a encore des choses qui ne vont pas :

  • Le = est à inclure dans les guillemets, en début de formule
  • Ton fichier externe doit être ouvert pour que la formule fonctionne
  • Ta formule n'est pas valide, soit tu utilises une fonction dans laquelle tu insères ta plage, soit tu ne fais référence qu'à une cellule à la fois. En tout cas, tu ne peux laisser une simple égalité à une plage.

Quel est l'objectif de ta macro ? Si c'est une copie d'un fichier externe, il faudrait plutôt :

  • Ouvrir le fichier avec VBA
  • Copier les valeurs (pas mettre de formule)
  • Fermer le fichier

Oui j'ai rajouté le = dans les guillemet.

Oui j'ai oublier d'enlever la sélection de la plage (c'est une cellule fusionnée)

Pour l'instant je sais que mon fichier doit être ouvert, ensuite le remplacerai ma formule par le lien du fichier en question.

    Range("C" & i).Formula = "=[Feuille de route conducteur_fr-FR.xlsx]B" & i & "!$G$8"

en fait j'ai déjà essayé de résoudre mon problème par une autre solution mais je n'ai pas réussit a obtenir les informations nécessaire donc j'ai essayé cette astuce pour contourner mon problème :

https://forum.excel-pratique.com/viewtopic.php?f=2&t=124648&e=1&view=unread#unread

Merci en tout cas d'avoir répondu rapidement à mon problème !

Bonjour !

Avec cette formule cela fonctionne :

    Range("C" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]B" & i & "'!$G$8"

Mais ce n'est pas exactement ce que je souhaiterai. Je ne veux pas que dans ma formule il y ai "B2" ou "B3" mais la valeur de cette cellule (01, 02 ...). Cela est il possible ?

Bonjour,

Alors il suffit de reprendre la syntaxe de tes cellules de destination :

Range("C" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & Range("B" & i) & "'!$G$8"

Merci infiniment pour ton aide !

Merci infiniment pour ton aide !

Pas de quoi, il ne manquait pas grand chose à ce que tu avais déjà produit.

Rechercher des sujets similaires à "inserer formule faisant reference dynamique"