Calcul d'un nombre de caractère identique (DIADE)

Fermé
Alcyde - 17 févr. 2016 à 16:35
 Alcyde - 17 févr. 2016 à 17:51
Bonjour,

Je veux dans une série de lettre exemple : MMMOOMMOM

trouver une formule qui va identifier le nombre de fois que deux m se touche.
ici la réponse serait 3, mais la formule que j'utilise identifie 2. si par exemple la suite est : MMMMMMOOOMMMOO, il en identifie 4 alors que la réponse est 7. Pour le reste de mon tableaux, cette formule fonctionne pour chaque fois qu'un M et un O ce touche par exemple. Le problème c'est que lorsque j'ai une longue suite de M, la formule calcul uniquement le nombre de fois qu'il voit MM dans la cellule, et non le nombre de fois que deux M se touche.

=SOMME(NBCAR(A14)-NBCAR(SUBSTITUE(A14;"MM";"")))/NBCAR("MM")

Avez-vous une solution ?

A voir également:

2 réponses

Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
17 févr. 2016 à 16:57
Par VBA, le simple code suivant calcule ce que vous cherchez :
Sub test()
m = 0

For i = 1 To Len(Cells(1, 1).Value) 'en A1 la cellule à analyser

If Mid(Cells(1, 1).Value, i, 1) = "M" And Mid(Cells(1, 1).Value, i + 1, 1) = "M" Then
m = m + 1
End If
Next i

Cells(1, 2).Value = m 'on met le résultat final en B1

End Sub
0
Je ne suis pas certain de comprendre ! Est-ce que tu peut formuler ta réponse par une formule excel ?
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
17 févr. 2016 à 17:47
C'est une macro, donc pour l'utiliser il faut activer les macros sur votre excel et coller ce code dans le code de la feuille en question.

En clair :
1) activez les macros (recherche google si vous ne savez pas faire)
2) dans votre document, accédez au code VBA (Alt + F11) puis au code de la feuille qui vous concerne (mini fenêtre en haut à gauche, double clic sur la feuille)
3) collez ce code
4) Retournez sous excel (Alt F11 une nouvelle ou bien Alt + Q)
5) Exécutez la macro (Alt + F8 et choisir nom de la macro qui est "test" en l'occurrence ou bien créez un bouton en y affectant la macro)

C'est bien plus efficace que par formule mais bon ça demande de savoir utiliser les macros :s
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
17 févr. 2016 à 17:16
Par formule, je n'ai rien trouvé de mieux qu'une imbrication des SUBSTITUE en listant dans l'ordre décroissant les séries possibles de M à la suite.

Un exemple qui ne marche que si la série la plus longue de M à la suite est de 5 M (comme dans votre exemple) :

=NBCAR(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(A14;"MMMMMM";"XXXXX");"MMMMM";"XXXX");"MMMM";"XXX");"MMM";"XX");"MM";"X");"M";"");"O";""))


-> vous retrouvez bien 7 pour MMMMMMOOOMMMOO en A14
0
oui !!! EUREKA !! mais le problème c'est que je peut avoir jusqu'à une vingtaine de M de suite :S Est-ce que je peut continuer la série de substitue jusqu'à 20 ?
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
17 févr. 2016 à 17:50
Eheh je ne suis pas bien optimiste la-dessus, une solution pourrait être de faire référence à d'autres cellules dans lesquelles sont déjà imbriquées une partie des SUBSTITUE, ça permet de dépasser la limite mais c'est plutôt moche..

Mon conseil :
- Soit vous avez une liste fixe de séries à analyser, auquel cas vous identifiez en amont le maximum de suite de M et fonctionnez par formule tant bien que mal
- Soit votre liste est variable, à ce moment là je vous conseille de passer par VBA, (la macro que j'ai codé dans le commentaire précédant)

Voila je peux pas plus vous aider, si ce n'est sur l'utilisation de la macro (possibilité de la délencher automatiquement avant l'enregistrement par exemple, ou à la modif d'une cellule, etc.)
0
Merci beaucoup :D
0