XL 2010 Recherche d'une liste de mot dans une cellule

  • Initiateur de la discussion Initiateur de la discussion Etn
  • 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 !

Etn

XLDnaute Occasionnel
Bonjour le forum,

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.

Merci de votre aide,

Bonne journée,

Etn
 

Pièces jointes

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
 

Pièces jointes

Re,

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 !
 
Bonsoir

Tu peux faire avec
Code:
SI(SOMME(1*ESTNUM(EQUIV("*"&D$2:D$5&"*";A2;0)))=0;"";INDEX($E$1:$E$5;MIN(SI(ESTNUM(EQUIV("*"&D$2:D$5&"*";A2;0));LIGNE($2:$5)))))

ou avec
Code:
SI(SOMME(1*ESTNUM(CHERCHE(D$2:D$5;A2)))=0;"";INDEX($E$1:$E$5;MIN(SI(ESTNUM(CHERCHE(D$2:D$5;A2));LIGNE($2:$5)))))

en matriciel bien sûr.

@ plus
 
Dernière édition:
Bonjour tout le monde,

Alors j'ai choisi cette formule (qui marche parfaitement, merci beaucoup !) :

Code:
SI(SOMME(1*ESTNUM(CHERCHE(D$2:D$5;A2)))=0;"";INDEX($E$1:$E$5;MIN(SI(ESTNUM(CHERCHE(D$2:D$5;A2));LIGNE($2:$5)))))

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 😕
 
Bonjour


Alors, pour ce qui est du fonctionnement de la première formule matricielle :
Code:
SI(SOMME(1*ESTNUM(EQUIV("*"&D$2:D$5&"*";A2;0)))=0;"";INDEX($E$1:$E$5;MIN(SI(ESTNUM(EQUIV("*"&D$2:D$5&"*";A2;0));LIGNE($2:$5)))))

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
Code:
=SI(A2="";"";INDEX($E$1:$E$5;SI(ESTNUM(EQUIV("*"&D$2:D$5&"*";A2;0));LIGNE($2:$5))))
(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.
NApommerouge.JPG

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.
Code:
SI(SOMME(1*ESTNUM(CHERCHE(D$2:D$5;A2)))=0;"";INDEX($E$1:$E$5;MIN(SI(ESTNUM(CHERCHE(D$2:D$5;A2));LIGNE($2:$5)))))
et on peut là aussi faire encore plus simple avec
Code:
SI(A2="";"";INDEX($E$1:$E$5;MIN(SI(ESTNUM(CHERCHE(D$2:D$5;A2));LIGNE($2:$5)))))
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...
Pompom.JPG


Pompom2.JPG


Pompom3.JPG

et ainsi de suite en cliquant sur Evaluer.

@ plus
 
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 !

Bonne journée,

Etn
 
- 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

Discussions similaires

Retour