Formule en fonction de texte (inclure et exclure)
Résoludanielc0 Messages postés 2191 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche une formule qui me permettrait de donner un résultat suivant le texte qu'il contient ET ne contient pas.
Par exemple, en colonne A je peux avoir:
A
A-B
A-B-C
A-B-D
A-B-C-D
A-C
A-B-C-D-E-F
A-B-C-D-D
Je souhaiterais qu'en colonne B il y ait écrit
"pif" si j'ai A seulement
"paf" si j'ai A et B seulement
"boum" si j'ai A et C minimum sans D
"plouf" si j'ai A et D minimum

Merci pour votre aide !
2 réponses
-
Bonjour,
Avec Excel 365 (si tu as une autre version, dis-le, c'est peut-être possible aussi) :
=LET(tbl;FRACTIONNER.TEXTE(A1;"-";);SI(A1="a";"pif";SI(ET(NBVAL(tbl)=2;INDEX(tbl;1)="a";INDEX(tbl;2)="b");"paf";SI(ET(ESTNUM(EQUIVX("a";tbl));ESTNUM(EQUIVX("c";tbl))*ESTNA(EQUIVX("d";tbl)));"boum";SI(ET(NBVAL(tbl)=2;INDEX(tbl;1)="a";INDEX(tbl;2)="b");"paf";SI(ET(ESTNUM(EQUIVX("a";tbl));ESTNUM(EQUIVX("d";tbl)));"plouf";""))))))
-
J'ai effectivement 365, j'ai oublié de préciser. Merci pour ta formule ça fonctionne parfaitement !!! Ce qui est dommage c'est que je n'y comprends rien et que je ne saurai le modifier si besoin de rajouter un critère ...
La formule s'articule autour de la fonction FRACTIONNER.TEXTE qui découpe la chaîne de texte en autant de cellules :
La fonction LET me permet d'affecter la formule :
FRACTIONNER.TEXTE(A1;"-";)A la valeur "tbl". J'emploie ensuite "tbl" pour éviter de répéter la formule.
Après, j'use les fonctions classiques. Pour savoir si "A" est dans cette matrice de cellules, j'utilise EQUIVX. Si la valeur est trouvée, cette fonction renvoie une valeur numérique et #NA! autrement etc.
Daniel
-
-
Sinon, pour Excel 2013 et versions postérieures :
=SI(A1="a";"pif";SI(ET(NBVAL(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R"))=2;INDEX(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R");1)="a";INDEX(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R");2)="b");"paf";SI(ET(ESTNUM(EQUIVX("a";FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R")));ESTNUM(EQUIVX("c";FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R")))*ESTNA(EQUIVX("d";FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R"))));"boum";SI(ET(NBVAL(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R"))=2;INDEX(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R");1)="a";INDEX(FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R");2)="b");"paf";SI(ET(ESTNUM(EQUIVX("a";FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R")));ESTNUM(EQUIVX("d";FILTRE.XML("<M><R>"&SUBSTITUE(A1;"-";"</R><R>")&"</R></M>";"//R"))));"plouf";"")))))Daniel
