Formule en fonction de texte (inclure et exclure)
Résolu
hadescedric
Messages postés
59
Statut
Membre
-
danielc0 Messages postés 1948 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:
- Corinne copie un texte sur le web et le colle dans un document avec l'option "texte non formaté" (aussi appelée "texte sans mise en forme"). qu'est-ce qui est conservé ?
- Mise en forme conditionnelle excel texte - Guide
- Passer un texte de majuscule en minuscule ou inversement - Guide
- Transcription audio en texte word gratuit - Guide
- Mise en forme tableau word - Guide
- Texte barré whatsapp - Guide
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";""))))))
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
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 :
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