Calcul d'un nombre de caractère identique (DIADE) [Fermé]

- - Dernière réponse :  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 ?

Afficher la suite 

2 réponses

Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
12
0
Merci
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
Je ne suis pas certain de comprendre ! Est-ce que tu peut formuler ta réponse par une formule excel ?
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
12 -
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
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
12
0
Merci
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
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 ?
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
12 -
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.)
Merci beaucoup :D