Syntaxe INDEX / EQUIV en VBA

5 réponses
Avatar
ThierryP
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

5 réponses

Avatar
MichD
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
Avatar
MichD
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
Avatar
MichD
Le 02/03/22 Í  13:10, MichD a écrit :
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

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
Avatar
ThierryP
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
Avatar
MichD
Le 03/03/22 Í  05:12, ThierryP a écrit :
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


À 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échargementstest[test.xlsm]Feuil1'!C2,0)),index('F:Téléchargementstest[test.xlsm]Feuil1'!C3,match(RC[-2],'F:Téléchargementstest[test.xlsm]Feuil1'!C2,0)),"""")"
End With
End Sub
'-----------------------------
MichD