Calcul d'un nombre de caractère identique (DIADE)
Alcyde
-
Alcyde -
Alcyde -
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 ?
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:
- Xxxmmmxxmm
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Nombre de jours entre deux dates excel - Guide
- Calcul moyenne excel - Guide
2 réponses
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
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) :
-> vous retrouvez bien 7 pour MMMMMMOOOMMMOO en A14
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
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.)
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.)
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