Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

  • Initiateur de la discussion Initiateur de la discussion shishi666
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

shishi666

Guest
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
 
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+
 
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
 
Re : Problème avec Evaluate("=index ..... ")


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+
 
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:
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
    27.9 KB · Affichages: 71
  • Capture.JPG
    27.9 KB · Affichages: 82
  • Capture.JPG
    27.9 KB · Affichages: 76
Re : Problème avec Evaluate("=index ..... ")

Bonjour,
merci pour votre réactivité

Modeste geedee : ta solution marche à la perfection, et tes explication sont claires merci beaucoup.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
912
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
7
Affichages
483
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…