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

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

  • exemple etn.xlsx
    11 KB · Affichages: 74

Etn

XLDnaute Occasionnel
Salut Vgendron,

Aaah bien sûr j'avais oublié la matricielle.
Par contre la formule ne m'affiche pas les bons résultats quand je rajoute des elements.

J'ai essayé des variantes mais cela ne fonctionne pas non plus.
 

Pièces jointes

  • exemple etn (1).xlsx
    11.5 KB · Affichages: 48

vgendron

XLDnaute Barbatruc
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

  • exemple etn (1).xlsm
    15.7 KB · Affichages: 54

Etn

XLDnaute Occasionnel
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 !
 

CISCO

XLDnaute Barbatruc
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:

Etn

XLDnaute Occasionnel
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 :confused:
 

CISCO

XLDnaute Barbatruc
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
 

Etn

XLDnaute Occasionnel
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
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87