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

  • Initiateur de la discussion Initiateur de la discussion Pelote
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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.
 
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

Dernière édition:
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour