RESOLU Addition des nombres contenus dans une chaine de caracteres

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

  • tt colis jour.xlsx
    11.4 KB · Affichages: 88
Dernière édition:
G

Guest

Guest
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:

CISCO

XLDnaute Barbatruc
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

  • tt colis jour.xlsm
    11.3 KB · Affichages: 67

Robert

XLDnaute Barbatruc
Repose en paix
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
 

Discussions similaires

Réponses
1
Affichages
210

Statistiques des forums

Discussions
312 298
Messages
2 086 977
Membres
103 416
dernier inscrit
SEB28110