Problème avec Evaluate("=index ..... ")

shishi666

XLDnaute Nouveau
Bonjour à toutes et à tous,

dans une macro je souhaite récupérer la valeur d'une cellule en fonction de 2 valeurs (colonnes différentes mais sur la même ligne).
voici la ligne que j'écris mais qui ne fonctionne pas

Set Var = Evaluate("=index(Range(Cells(2, Col_Bloc), Cells(iRowL, Col_Bloc)),match(1,(Range(Cells(2, Col_x), Cells(iRowL, Col_x))=5)*(Range(Cells(2, Col_y), Cells(iRowL, Col_y ))=19),0))")

avec comme variable :
iRowL => nombre de ligne total
Col_Bloc => numéro de la colonne ou je veux récupérer la valeur
Col_x => 1ère colonne servant à la condition
Col_y => 2ème colonne servant pour la condition

lorsque je remplace : Range(Cells(2, Col_Bloc), Cells(iRowL, Col_Bloc)) par $A$2:$A$1400 et idem pour les autre cela fonctionne trés bien.

Auriez vous une idée pour m'aider à trouver la solution?
Merci d'avance à tous

PS: si il manque des informations n'hésitez pas à me les demander
 

david84

XLDnaute Barbatruc
Re : Problème avec Evaluate("=index ..... ")

Bonjour,
difficile de t'aider sur l'écriture d'un Evaluate sans fichier test...
je pense qu'il faudrait spécifier le fait que tu cherches à récupérer l'adresse de tes Range, donc a priori je préciserai la propriété Address à la suite de tes ranges, du genre
Code:
Range(Cells(2, Col_Bloc), Cells(iRowL, Col_Bloc)).Address
à la place de
Code:
Range(Cells(2, Col_Bloc), Cells(iRowL, Col_Bloc))
(idem pour les autres Range).
A+
 

shishi666

XLDnaute Nouveau
Re : Problème avec Evaluate("=index ..... ")

Déjà merci pour votre réponse,
j'ai essayé en écrivant ceci :
Code:
Set Var = Evaluate("=index(Range(Cells(2, Col_Bloc), Cells(iRowL, Col_Bloc)).Adress,match(1,(Range(Cells(2, Col_x), Cells(iRowL, Col_x)).Adress=5)*(Range(Cells(2, Col_y), Cells(iRowL, Col_y )).Adress=19),0))")

et ça ne fonctionne toujours pas.

En fait mon fichier est structuré ainsi :

XX | YY | BL
1 | 1 | 1
1 | 2 | 1
2 | 1 | 2
2 | 2 | 2

où Col_x = 1 (la 1ère colonne)
Col_y = 2 (la 2ème colonne)
Col_Bloc = 3 (la 3ème colonne)

et j'aimerais que en fonction de la valeur de XX et YY ca me renvoi la valeur de BL
ex: en fonction de XX = 2 et YY = 2 ça me renvoi 2

merci d'avance à tous
 

david84

XLDnaute Barbatruc
Re : Problème avec Evaluate("=index ..... ")

Déjà merci pour votre réponse,
j'ai essayé en écrivant ceci :
Code:
Set Var = Evaluate("=index(Range(Cells(2, Col_Bloc), Cells(iRowL, Col_Bloc)).Adress,match(1,(Range(Cells(2, Col_x), Cells(iRowL, Col_x)).Adress=5)*(Range(Cells(2, Col_y), Cells(iRowL, Col_y )).Adress=19),0))")


et ça ne fonctionne toujours pas.

En fait mon fichier est structuré ainsi :

XX | YY | BL
1 | 1 | 1
1 | 2 | 1
2 | 1 | 2
2 | 2 | 2

où Col_x = 1 (la 1ère colonne)
Col_y = 2 (la 2ème colonne)
Col_Bloc = 3 (la 3ème colonne)

et j'aimerais que en fonction de la valeur de XX et YY ca me renvoi la valeur de BL
ex: en fonction de XX = 2 et YY = 2 ça me renvoi 2

merci d'avance à tous

Le plus simple est de placer un petit exemple tel que celui décrit ci-dessus (en plus explicite tout de même) dans un petit fichier parce que sans cela on ne peut tester.
A+
 

Staple1600

XLDnaute Barbatruc
Re : Problème avec Evaluate("=index ..... ")

Bonjour à tous

shishi666
C'est Address et pas Adress ;)
Et sinon comme ceci, cela donne quoi?
Code:
Dim plg as Range
Dim plg2 As Range
set plg=Range(Cells(2, Col_Bloc), Cells(iRowL,  Col_Bloc))
set plg2=Range(Cells(2, Col_y), Cells(iRowL, Col_y  ))
Set Varr = Evaluate("=index(,match(1,(plg=5)*(plg2=19),0))")
'Varr car il me semble que Var est réséervé par VBA non ?
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Problème avec Evaluate("=index ..... ")

Bonsour®

la fonction VBA EVALUATE attend une formulation sous la forme de fonction de feuille de calcul au format US...
(comme si on écrivait la fonction dans la barre de formule)
par ailleurs la partie
(plg=5)*(plg=19) est une matrice booléenne qu'il convient de numériser

1*(plg=5)*(plg=19)

VB:
Sub test()
Dim plg1 As String
Dim plg2 As String
Dim plg3 As String
col_x = 1
col_y = 2
col_bloc = 3
IrowL = 5
plg1 = Range(Cells(2, col_bloc), Cells(IrowL, col_bloc)).Address
plg2 = Range(Cells(2, col_x), Cells(IrowL, col_x)).Address
plg3 = Range(Cells(2, col_y), Cells(IrowL, col_y)).Address
'====================================================
'      la fonction VBA EVALUATE attend une formulation sous la forme de fonction de feuille de calcul au format US...
'      [G1].Formula = "=index(" & plg1 & ",match(1,1*(" & plg2 & "=5)*(" & plg3 & "=19),0))"
'      [G1]=INDEX($C$2:$C$5;EQUIV(1;1*($A$2:$A$5=5)*($B$2:$B$5=19);0))
'      il faut valider cette formule par Ctrl+Maj+Entrée
'====================================================
mavar = Evaluate("=index(" & plg1 & ",match(1,1*(" & plg2 & "=5)*(" & plg3 & "=19),0))")
' la fonction EVALUATE ici en VBA est automatiquement sous forme Array(matricielle)
MsgBox mavar
End Sub
ne pas oublier également que la fonction match(EQUIV) ne restitue que la 1ere occurrence...
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    27.9 KB · Affichages: 66
  • Capture.JPG
    Capture.JPG
    27.9 KB · Affichages: 79
  • Capture.JPG
    Capture.JPG
    27.9 KB · Affichages: 72

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 490
Membres
103 558
dernier inscrit
Lamine ABIDI