Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Syntaxe INDEX / EQUIV en VBA

344 views
Skip to first unread message

ThierryP

unread,
Mar 2, 2022, 11:19:05 AM3/2/22
to
Bonjour Denis, bonjour le forum !

Mon souci du jour :
Dans un onglet d'un classeur, je souhaite insérer en VBA la formule INDEX/EQUIV pour aller chercher une valeur dans un deuxième fichier qui comporte une plage nommée dynamique où doit se trouver la valeur cherchée (ce deuxième fichier est ouvert).

Malheureusement, l'enregistreur me renvoie les formules en mode RC, pas très pratique !

J'ai tenté ceci :
ActiveCell.Formulalocal = "=MATCH(ActiveCell.Offset(0, -11),Workbooks(""Classeur_Source.xlsm"").sheets(""Feuille_Source"").range(""Plage_Dynamique""),0)"
mais je me fais insulter par VBA :-(

Si une âme charitable pouvait corriger ma syntaxe déplorable, je serais le plus heureux des bidouilleurs d'Excel !!!

Merci d'avance,

ThierryP

MichD

unread,
Mar 2, 2022, 12:26:36 PM3/2/22
to
Le 02/03/22 à 11:19, ThierryP a écrit :
> ActiveCell.Formulalocal = "=MATCH(ActiveCell.Offset(0, -11),Workbooks(""Classeur_Source.xlsm"").sheets(""Feuille_Source"").range(""Plage_Dynamique""),0)"

Bonjour,

Voici comme tu peux faire, une manière de te faciliter la vie

'----------------------------
Sub test()

'Déclaration des variables
Dim C As String, D As String, F As String

'Définir pour chaque variable, la plage de cellules
'qui convient selon la donne du problème
'Évidemment à adapter selon ton environnement

With Worksheets("Feuil1")
C = .Parent.Name & "!" & .Range("A2:A13").Address
D = .Parent.Name & "!" & .Range("D1").Address
E = .Parent.Name & "!" & .Range("B2:B13").Address
End With

'Afin de s'aider, on peut afficher la formule dans une boîte
'de message afin de trouver une ou des erreurs de syntaxes
'Ce n'est pas obligatoire ! ;-)
MsgBox "=INDEX(" & C & " MATCH(""" & D & """," & E & ",0))"

'La formule que l'on veut retourner dans la cellule de son choix.
Range("G5").Formula = "=INDEX(" & C & ",MATCH(" & D & "," & E & ",0))"

End Sub
'----------------------------

MichD

MichD

unread,
Mar 2, 2022, 1:10:04 PM3/2/22
to

Le 02/03/22 à 12:26, MichD a écrit :
> MsgBox "=INDEX(" & C & " MATCH(""" & D & """," & E & ",0))"

La bonne syntaxe... même pas capable de recopier correctement un bout de
code...c'est pathétique!

MsgBox "=INDEX(" & C & " MATCH(" & D & "," & E & ",0))"

La formule omet le dernier argument de la fonction "Index" qui sert à
désigner le numéro de la cellule dans le cas où la matrice du premier
argument contient plusieurs colonnes.

MsgBox "=INDEX(" & C & " MATCH(" & D & "," & E & ",0),1)"
le chiffre 1 représentant le numéro de la colonne.

MichD

MichD

unread,
Mar 2, 2022, 10:30:49 PM3/2/22
to
Le 02/03/22 à 13:10, MichD a écrit :
Comme tu veux travailler à l'aide d'un fichier fermé, je t'ai fait un
petit exemple avec les fonctions Index...(match...))

C'est un fichier zip qui contient 2 fichiers Excel.
https://www.cjoint.com/c/LCddy7Qll0F

Tu ouvres le fichier "Formule_test.xlsm" et dans le module de la
feuille, tu adaptes la formule (chemin où tu as placé les 2 fichiers)

La suite t'appartient!

MichD

ThierryP

unread,
Mar 3, 2022, 5:12:53 AM3/3/22
to
Bonjour Denis,

Toujours aussi présent !
Et toujours aussi efficace :-) :-)

Une fois de plus, un grand merci à toi

Thierry

Le jeudi 3 mars 2022 à 04:30:49 UTC+1, MichD a écrit :
> Le 02/03/22 à 13:10, MichD a écrit :

> MichD

MichD

unread,
Mar 3, 2022, 7:58:22 AM3/3/22
to
Le 03/03/22 à 05:12, ThierryP a écrit :
À titre de complément, tu peux utiliser cette formule pour chacune des
cellules d'une plage donnée (une colonne) de ta feuille.

Dans mon fichier exemple, j'aurais pu faire cela, pour copier cette
formule dans la plage D1:D10... si nécessaire!

'-----------------------------
Sub test()

With Feuil1
Range("D1:D10").FormulaR1C1 = _
"=if(isnumber(match(RC[-2],'F:\Téléchargements\test\[test.xlsm]Feuil1'!C2,0)),index('F:\Téléchargements\test\[test.xlsm]Feuil1'!C3,match(RC[-2],'F:\Téléchargements\test\[test.xlsm]Feuil1'!C2,0)),"""")"
End With
End Sub
'-----------------------------

MichD

ThierryP

unread,
Mar 3, 2022, 9:52:36 AM3/3/22
to
Trop fort !

Tu réponds presque à une question que j'allais poser !

Grâce à toi, j'ai pu récupérer mes plages et placer mes formules :
Range("$N$3:$N" & Derlig).Formula = "=INDEX(" & D & ";EQUIV(" & E & ";" & C & ";0);1)"
Avec E=Activecell.offset(0,11).address

Pour l'instant, je boucle sur la plage de destination, donc pas très rapide mais ça fonctionne !
J'essaie donc de faire quelque chose comme ça :
Range("$N$3:$N" & Derlig).FormulaR1C1 = "=INDEX(" & D & ";EQUIV(" & "C[-11];" & C & ";0);1)"
Evidemment, je me fais jeter... Mais je n'arrive pas à trouver la bonne syntaxe :-( :-(
Je suis sûr que la réponse ne va tarder !

ThierryP
0 new messages