Alors voila, je cherche à obtenir en B2 du fichier ci-joint, le résultat colonne E (soit E4) en cherchant l'ensemble des mots de la colonne D dans la cellule A2.
En fait ce serait grossièrement :
=INDEX(E:E;EQUIV("*"&D&"*";A:A;0);1)
Ne sachant pas vraiment comment l'expliquer avec des mots, le fichier joint sera, je pense, plus parlant.
Re..
bon.. avec formule. je ne m'en sors pas. donc, je passe en mode Fonction Personnalisée
Voir PJ
le fonction est décrite dans un module standard VBA
et tu l'appelles comme une fonction classique d'excel
LAChercher est une zone nommée dynamiquement : voir Gestionnaire de noms
PS: il faut que la syntaxe des contenus soit STRICTEMENT identique entre les colonnes A et D
je parle surtout des majuscules...Excel fait la distinction
Ok merci, je garde ca sous le coude, après pas sûr que macro + gestionnaire de nom ca ne soit pas un peu trop pour mes collègues pour ce genre de formule.
Si jamais c'est le seul et unique moyen, je ferai avec.
Merci encore !
Serait il possible, svp, de savoir :
- Pourquoi ajouter "1*" ? Qu'est ce que cela change ?
- Le combo MIN(SI(ESTNUM(...;LIGNE(2:5)))))) j'avoue avoir également rien compris au mécanisme
ESTNUM(EQUIV("*"&D$2: D$5&"*";A2;0)) renvoie une liste de VRAI et de FAUX et la fonction SOMME ne sait pas additionner des VRAI et des FAUX..., donc un simple SOMME(ESTNUM(EQUIV("*"&D$2: D$5&"*";A2;0))) poserait problème.
En écrivant 1*ESTNUM(EQUIV("*"&D$2: D$5&"*";A2;0)), on transforme les VRAI en 1 et les FAUX en 0. Donc le SOMME(1*ESTNUM(EQUIV("*"&D$2: D$5&"*";A2;0))) fonctionne.
Cette première partie de la formule ne sert qu'à ne rien mettre dans la cellule en cours lorsqu'on a déjà listé tous les noms. On peut faire beaucoup plus simple avec
(Pourquoi faire simple quand on peut faire compliqué, hein !)
Pour ce qui est de la seconde partie de cette formule matricielle, la plus importante
EQUIV("*"&D$2: D$5&"*";A2;0) va rechercher la position des expressions de la plage D$2: D$5 précédées ou suivies de n'importe quoi (grâce à "*"& ....&"*", le & remplaçant la concaténation) dans A2. Autrement dit, EQUIV.... va chercher "*"&D2&"*" (="*"&Poire rouge&"*") dans A2 (="grosse pomme rouge"), ce qui donne #NA ("*"&Poire rouge&"*" ne correspond pas à "grosse pomme rouge"), puis fait de même avec D3, D4 (="*"&"pomme rouge"&"*"), D5 dans A2. On obtient donc #NA;#NA;#NA;1;#NA.
ESTNUM(EQUIV("*"&D$2: D$5&"*";A2;0)) renvoie donc FAUX;FAUX;FAUX;VRAI;FAUX
SI(ESTNUM(EQUIV("*"&D$2: D$5&"*";A2;0));LIGNE($2:$5)) donne FAUX;FAUX;FAUX;4;FAUX
SI(ESTNUM(EQUIV("*"&D$2: D$5&"*";A2;0));LIGNE($2:$5)) donne 4
INDEX($E$1:$E$5;4) = E4 =pomme
Dans ce cas, c'est plus simple de travailler avec CHERCHE plutôt qu'avec EQUIV, donc, c'est plus "simple" de travailler avec la seconde formule.
Elle fonctionne presque comme la première formule. Pour voir tous les calculs intermédiaires, après avoir sélectionné B2, cliques sur l'onglet haut "Formules", puis sur "Evaluation de formule", tu obtiendras les fenêtres suivantes...
Aaah super !
En effet au final je n'ai gardé que la 2e partie.
Et le fait de prendre la ligne minimum lorsque la condition est vraie démontre qu'il est imperatif de ne pas avoir de ligne vide dans le referentiel.
Merci beaucoup d'avoir pris le temps de m'expliquer !