RESOLU Addition des nombres contenus dans une chaine de caracteres

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 !

leina_33

XLDnaute Nouveau
Bonjour le forum,

Voila 2 jours que je lis des formules, je lis des formules et je comprends plus rien !!!!

Je vous expose mon besoin :

J'ai un planning qui pour chaque journée me donne le nombre de colis que nous allons receptionner dans la journée.
Dans la colonne C, j'ai le total de colis que nous allons recevoir dans la journée.

Probleme :
Je suis obligée de faire le total en C à la main. (pour l'exemple que j'ai fait, c'est pas genant mais je peux avoir une 100aine d'entrées)

Objectif :
La mise à jour automatique de la cellulle Total en C à chaque changement dans les colonnes D à J.

Contraintes :
Je ne peux pas changer le format de mon planning (rajouter de colonne avec la quantité attendue et le nom du fournisseur à coté par ex)
Dans une meme cellule, je peux avoir un seul nombre, ou plusieurs et dans le cas ou il y en a plusieurs, il n'y a pas forcement un "+" entre les 2 fournisseurs.
Les utilisateurs finaux sont des billes en Excel, il faut donc absolument eviter les matricielles et si possible les macros.

Ma démarche :
J'ai eu dans l'idée de concatener les 7 cellules de mon tableau pour obtenir une seule chaine de caractere et ensuite d'extraire les nombres.
Probleme : je sais pas extraire les nombres (enfin si quelques uns mais vu la taille de la chaine de caracteres... ma formule est, dirons nous, un peu lourde looool (voir en K&L pour ceux qui veulent rire)) et les additioner apres 🙁

Je vous joins mon tableau pour vous permettre de visualiser tout ca

Merci par avance de l'aide que vous pourrez m'apporter.
 

Pièces jointes

Dernière édition:
Re : Addition des nombres contenus dans une chaine de caracteres

Bonjour,

Sans matricielle, ni macro je ne vois pas.

Alors dans fichier joint une fonction personalisée vba (SommeTexte)


A+
 
Dernière modification par un modérateur:
Re : RESOLU Addition des nombres contenus dans une chaine de caracteres

Bonjour

On peut aussi peut être faire avec trois tonnes de SUBSTITUE et avec la fonction XL4 EVALUER. Si quelqu'un a une proposition plus lourde, ne vous gêner pas !!! Cela donnera peut être des idées à d'autres.

@ plus
 

Pièces jointes

Re : RESOLU Addition des nombres contenus dans une chaine de caracteres

Bonjour le fil, bonjour le forum,

Puisqu'on parle de lourds, je m'immisce... Et je propose la macro ci-dessous.
Attention il faut qu'il y ait imperativement un plus (+) pour séparer les noms (ce n'était pas le cas en H3 je crois) sinon le total sera faux...
le code :
Code:
Sub Macro2()
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (Cellule)
Dim li As Byte 'déclare la variable li (LIgne)
Dim pat As Range 'déclare la variable pat (Plage À Traiter)
Dim cat As Range 'déclare la variable cat (Cellules À Traiter)
Dim i As Integer 'déclare la variable i (Incrément)
Dim vt As String 'déclare la variable vt (Valeur en Texte)
Dim vn As Integer 'déclare la variable vn (Valeur en Nombre)

With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
    dl = .Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la dernière ligne de la colonne 3 (C)
    Set pl = .Range("C2:C" & dl) 'définit la plage pl
    For Each cel In pl 'boucle 1 : sur toutes les cellules cel de la plage pl
        vn = 0 'réinitialise la valeur en nombre vn
        'si la cellule cel fait partie d'une plage fusionnée, définit le nombre de ligne li
        If cel.MergeCells = True Then li = cel.MergeArea.Rows.Count Else li = 1
        Set pat = cel.Offset(0, 1).Resize(li, 7) 'définit la plage à traiter
        For Each cat In pat 'boucle 2 : sur chaque cellule à traiter cat de la plage à traiter pat
            vt = "" 'initialise la valeur en texte
            If cat.Value <> "" Then 'condition 1 : si la cellule à traiter cat n'est pas vide
                For i = 1 To Len(cat.Value) 'boucle 3 sur tous les caractères ce cat
                    If IsNumeric(Mid(cat.Value, i, 1)) = True Then 'condition 2 : si le caractère est numérique
                        vt = vt & Mid(cat.Value, i, 1) 'définit ou redéfinit la valeur en texte
                    Else 'sinon (condition 2 donc si le caractère n'est pas un nombre
                        'si le caractère est un plus "+", definit ou redéfinit la valeur en nombre vn, réinitialise vt
                        If Mid(cat.Value, i, 1) = "+" Then vn = vn + CInt(vt): vt = ""
                    End If 'fin de la condition 2
                Next i 'prochain caractère de la boucle 3
                vn = vn + CInt(vt) 'définit ou redéfinit la valeur en nombre vn
            End If 'fin de la condition 1
        Next cat 'prochaine cellule à traiter cat de la boucle 2
        cel.Value = vn 'place le total dans la cellule
    Next cel 'prochaine cellule cel de la boucle 1
End With 'fin de la prise en compte de l'onglet "Feuil2"
End Sub
 
- 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

Réponses
4
Affichages
223
Réponses
5
Affichages
726
Réponses
10
Affichages
443
Retour