Microsoft 365 [RESOLU] - Sommer les chiffres d'une chaine de caractère sous condition

Pelote

XLDnaute Nouveau
Bonjour à tous !

Tout d'abord, merci pour ce beau forum sur lequel j'ai déjà pu trouver beaucoup de solutions à mes problèmes Excel.

Mais là, je sèche et je ne trouve pas, enfin... Je ne trouve pas de manière simple.

J'ai une chaine de caractère type : 1O1O2S2F1D
J'ai besoin d'en extraire facilement les données suivantes :
2O
2S
2F
1D
Autrement dit, j'ai besoin de sommer les nombres qui se trouvent devant chaque lettre, sachant que les chaines de caractères varient, et que les lettres ne sont pas forcement dans le même ordre.

Je vous remercie par avance pour l'aide que vous pourrez m'apporter.

Pelote.
 

Victor21

XLDnaute Barbatruc
Bonjour, @Pelote

Avec un seul exemple, il nous sera difficile de vous proposer une solution (formule ou VBA ?) qui répondra à tous les cas que vous rencontrerez.
Joignez un fichier en y mettant tous les cas envisageables, et en face les résultats attendus. Vous aurez plus de chances d'obtenir une solution viable.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Comme vous êtes en Office 365, la formule
est à placer dans la seule cellule B1 puis à tirer vers le bas.

extrac est une fonction personnalisée VBA dont le code est dans le module "module1".

edit : bonjour @pierrejean ;)
 

Pièces jointes

  • Pelote- extraire et compter- v1.xlsm
    39.2 KB · Affichages: 7
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à tous,

J'ai compris la même chose que @mapomme, mais je pédale moins vite !
Ma solution avec un dictionary
VB:
Option Explicit

Function Cpte(Txt As String) As Variant
     Application.Volatile
     Dim Dic As Object, i As Integer, Nbt As String, Clef

     Set Dic = CreateObject("Scripting.Dictionary")
     Dic.RemoveAll
    
     For i = 1 To Len(Txt)
          If Mid(Txt, i, 1) Like "#" Then
               Nbt = Nbt & Mid(Txt, i, 1)
          Else
               Dic(Mid(Txt, i, 1)) = Dic(Mid(Txt, i, 1)) + CInt(Nbt)
               Nbt = ""
          End If
     Next
    
     ReDim TbRes(1 To 1, 1 To Dic.Count)
     i = 0
     For Each Clef In Dic.keys
     i = i + 1
          TbRes(1, i) = Dic(Clef) & Clef
     Next
     Cpte = TbRes

End Function

A bientôt
Alain
 

Pièces jointes

  • Pelote.xlsm
    17.7 KB · Affichages: 1

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth