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 !!!
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
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))"
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
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
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.
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
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
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)
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
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
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 :
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
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
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
'-----------------------------
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