Compter nombre de caractères après un autre caractère dans une cellule

Résolu/Fermé
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 - 20 févr. 2019 à 22:13
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 - 21 févr. 2019 à 09:34
Bonjour à tous,

J’aimerais savoir comment compter le nombre de caractère précis après un autre caractère précis dans la même cellule, voici un exemple j’ai dans la cellule a1 une chaîne pouvant être de ce type :
AABACBCABABACBCABCAAAA
-Je voudrais pouvoir compter le nombre C après un A, le résultat escompté serait 2
-Le nombre de B après un A, résultat 4
-Le nombre de A après un autre A (ça se complique a mon avis), résultat 4
Le fait qu’il y ai plusieurs A à la suite m empêche d’utiliser la combinaison Nbcar et substitute a moins de trouver une astuce.

Merci par avance à tout ceux qui essaieront de trouver une solution à mon problème

Cordialement
Rod



Configuration: iPhone / Safari 12.0
A voir également:

1 réponse

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
Modifié le 20 févr. 2019 à 22:36
Bonjour,

Avec ta chaine en A2, ta lettre1 en B1, ta lettre 2 en C1 :
=SOMMEPROD((STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)-1));1)=$B$1)*(STXT(A2;LIGNE(INDIRECT("2:"&NBCAR(A2)));1)=$C$1)) 

que tu peux tirer vers le bas.
eric

2
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
20 févr. 2019 à 23:20
Salut eriiic, merci d’avoir répondu aussi vite, après avoir recopié ta formule à l’identique je suis ravi de constater qu elle fonctionne parfaitement ;)
Par contre, si tu peux m expliquer son fonctionnement s il te plait car je t’avoue que je suis complètement largué notamment avec les fonctions ligne et indirect.

Et encore merci et bravo !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
20 févr. 2019 à 23:59
Pas très simple à expliquer.... J'ai pris A et A en lettre 1 et lettre 2

LIGNE(INDIRECT("1:"&NBCAR(A2)-1))

va te fabriquer une matrice avec les nombre de 1 à (longueur de chaine-1), avant-dernier caractère donc.
INDIRECT("1:"&NBCAR(A2)-1) te fabrique une référence comme si tu sélectionnais les lignes 1:21, Ligne(...) t'extrait les n° des lignes de la référence dans une matrice :
{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21}

C'est juste un artifice pour générer une suite de nombres.
Passée en 2nd paramètre à STXT ça va te servir à extraire les lettres de 1 à 21 de ta chaine :
STXT(A2;{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21};1)

qui donne une fois exécuté :
{"A";"A";"B";"A";"C";"B";"C";"A";"B";"A";"B";"A";"C";"B";"C";"A";"B";"C";"A";"A";"A"}

plus qu'à comparer à ta 1 lettre "A" par exemple :
STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)-1));1)=$B$1 pour avoir une matrice de VRAI/FAUX :
{VRAI;VRAI;FAUX;VRAI;FAUX;FAUX;FAUX;VRAI;FAUX;VRAI;FAUX;VRAI;FAUX;FAUX;FAUX;VRAI;FAUX;FAUX;VRAI;VRAI;VRAI}


2ème partie :
STXT(A2;LIGNE(INDIRECT("2:"&NBCAR(A2)));1)=$C$1

même principe mais pour les caractères de 2 au dernier (décalés d'un cran par rapport à la 1ère donc), égaux à lettre 2. Tu obtiens une 2nde matrice de VRAI/FAUX pour la lettre 2 mais décalée d'un cran :

{"A";"B";"A";"C";"B";"C";"A";"B";"A";"B";"A";"C";"B";"C";"A";"B";"C";"A";"A";"A";"A"}{VRAI;FAUX;VRAI;FAUX;FAUX;FAUX;VRAI;FAUX;VRAI;FAUX;VRAI;FAUX;FAUX;FAUX;VRAI;FAUX;FAUX;VRAI;VRAI;VRAI;VRAI}

Plus qu'à multiplier les 2 matrices ensembles, partout où tu auras VRAI*VRAI à la même position dans les matrices (donc lettre 1 ok ET lettre 2 ok) tu obtiens VRAI qui se traduit en 1 :
{1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1}

un sommeprod() sur tout ça et tu obtiens ton nombre de lettres 1 suivie lettres 2.
4 "A" qui suivent un "A"
Voilà, tu peux terminer ton doliprane
eric
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
Modifié le 21 févr. 2019 à 00:07
PS : astuce pour comprendre une formule.
Tu peux sélectionner dans la barre de formule une partie et faire F9 pour l'évaluer.
Ca te permet, morceau par morceau, de voir le résultat.
Par exemple sélectionne LIGNE(INDIRECT("1:"&NBCAR(A2)-1)) et fait F9 tu lis :
=SOMMEPROD((STXT(A2;{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21};1)=$B$1)*(STXT(A2;LIGNE(INDIRECT("2:"&NBCAR(A2)));1)=$C$1))

Puis sélectionne STXT(A2;{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21};1), F9 et tu lis :
{"A";"A";"B";"A";"C";"B";"C";"A";"B";"A";"B";"A";"C";"B";"C";"A";"B";"C";"A";"A";"A"}
Faire Echap pour quitter sinon tu valides tes évaluations à la place des morceaux de la formule.

Tu as aussi 'Formules / Evaluation formule' qui te permet de faire un pas à pas. A chaque clic sur Evaluer il évalue la partie soulignée (qui ne saute pas aux yeux...)
0
rorocr Messages postés 81 Date d'inscription mardi 8 septembre 2015 Statut Membre Dernière intervention 8 juin 2022 1
21 févr. 2019 à 09:34
????tu avais raison pour le doliprane lol

merci beaucoup et bravo à toi!
0