Formule en fonction de texte (inclure et exclure)

Résolu
hadescedric Messages postés 59 Statut Membre -  
danielc0 Messages postés 1948 Statut Membre -

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 !

A voir également:

2 réponses

danielc0 Messages postés 1948 Statut Membre 238
 

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";""))))))

1
hadescedric Messages postés 59 Statut Membre
 

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

0
danielc0 Messages postés 1948 Statut Membre 238 > hadescedric Messages postés 59 Statut Membre
 

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

0
danielc0 Messages postés 1948 Statut Membre 238
 

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


0