Total de plusieurs l'interieur d'une seule cellule

A

anas

Guest
salut à tout le monde !

j'aimerai savoir s'il est possible de faire une sommation de nombres contenus dans des cellules contenant des données alpha-numériques.
Exemples
cellule a1 contient l'écriture suivante ASM 20 000; FC: 10 000; FDR: 60 000.
A2 doit contenir le total des chiffres écrits soit : 90 000.

IL est impératif que la cellule A1 contienne l'ensemble l'ensemble des données.

Merci d'avance pour votre aide
 

marco57

XLDnaute Occasionnel
Bonsoir Anas et le Forum,
Il semble que tes valeurs soient séparées par un ';'. Est-ce toujours le cas?
Peut-il y avoir plus ou moins que trois valeurs dans ta ou tes cellules?
Certaines de ces valeurs peuvent-elles être négatives?

As-tu une objection à l'utilisation de macros?

Dans l'attente de ta réponse

Marco
 

Hervé

XLDnaute Barbatruc
Re:Total de plusieurs l'interieur d'une seule cell

bonsoir anas, marco, forum

marco, je me permet de proposer une soluce par formule personnalisé.

ne voit pas dans mon attitude une impolitesse, mais juste l'envie de faire un bidule vba :)

Public Function sommetout(cellule As Range) As Double
Dim tablo As Variant
Dim i As Byte, j As Byte
Dim somme As Double
Dim nombre As Double

tablo = Split(cellule, ';')

For i = 0 To UBound(tablo)
   
For j = 1 To Len(tablo(i))
       
If IsNumeric(Mid(tablo(i), j, 1)) Then
            nombre = nombre & (Mid(tablo(i), j, 1))
       
End If
   
Next j
    somme = somme + CDbl(nombre)
    nombre = 0
Next i

sommetout = somme
End Function

anas, en pièce jointe tu trouveras une approche vba pour ton souci.

il faut utiliser la formule sommetout(). cette formule ne sait pas travaillé sur une plage, mais elle peut apprendre si le résultat te convient.

salut à vous deux
 

Gael

XLDnaute Barbatruc
Bonsoir Anas, Marco, Hervé et Bebere,

Si les chiffres sont toujours au même endroit:

=SOMME(CNUM(STXT(C5;{6.18.31};6)))

Sinon avec données convertir en choisissant 2 séparateurs ';' et ' ', tu peux faire une somme de la plage:

=SOMME(C18:H18)

avec les fonctions de la macro complémentaire Morefun.Xll téléchargeable sur ce site ou sur le site de laurent Longre:

Adresse du téléchargement : Ce lien n'existe plus
nom de la macro: morefun.xll

La formule serait:

{=SOMME(CNUM(REGEX.STXT(C5;'\\d{2}\\s\\d{3}';LIGNE(INDIRECT('1:3')))))}

A saisir sous forme matricielle (Ctrl Maj Entrée)

Cette dernière formule va chercher les chiffres quelle que soit leur position dans la chaîne.

@+

Gael
 

marco57

XLDnaute Occasionnel
Bonsoir à tous,
Je reviens sur ce post, comme d'habitude avec un peu de retard.
Je viens de découvrir la fonction qu'Hervé t'a concoctée et j'ai fait quelque chose de très proche de mon coté.

Comme j'y ai mis des commentaires et la possiblité de définir le séparateur, je la joints quand même

Code:
Function SommeTexte(Données As Range, Séparateur As String)
Dim Tablo As Variant
Dim i, j
Dim ValString As String
Dim Total As Double


'Génère un tableau fictif à partir des données.
'Chaque élément du tableau est séparé par le séparateur
'définit dans le deuxième argument de la fonction
Tablo = Split(Données, Séparateur, -1)
'Pour chaque élément du tableau
For i = 0 To UBound(Tablo)
  'Je compte le nombre de caractère de la chaine
  ValString = ''
    'pour chaque caractère
    For j = 1 To Len(Tablo(i))
     'si c'est une valeur numérique
     If IsNumeric.Mid(Tablo(i), j, 1) Then
        'je mémorise les caractères répondant aux critères
        ValString = ValString & Mid(Tablo(i), j, 1)
     End If
    Next j
    'Puis je convertis la chaine en nombre et totalise ce nombre au
    'précédent total
    Total = Total + CDbl(ValString)
Next i
SommeTexte = Total

End Function

Bonne nuit à toutes et tous

N.B. Ne t'inquiètes pas Hervé, on est là pour s'amuser, se rendre service, partager ses connaissances, ... mais pas pour se faire la guerre.

A+

Marco
 
A

Anas

Guest
Re:Total de plusieurs l'interieur d'une seule cell

je vous remercie pour votre participation trés active. N'étant pas trés fort en VBA, J'ai opté pour la macro complémentaire proposée par Gael; que j'ai téléchargé successivement. Cependant, je n'ai pas eu de résultat La cellule affiche #VALEUR! pourtant j'ai bien saisi la formule sous forme matricielle (Ctrl Maj Entrée).

Merci encore une fois pour vos réponses
 

Gael

XLDnaute Barbatruc
Re:Total de plusieurs l'interieur d'une seule cell

Bonjour Anas, Marco, Hervé et Bebere,

Tu obtiens une erreur car certains caractères ne sont pas envoyés par le post: les anti slash.

la formule:

{=SOMME(CNUM(REGEX.STXT(C5;'\\d{2}\\s\\d{3}';LIGNE(INDIRECT('1:3')))))}

Il faut rajouter 3 caractères 'antislash' devant le 'd' puis devant le 's' et devant le 2ème 'd'.

@+

Gael
 
A

Anas

Guest
Re:Total de plusieurs l'interieur d'une seule cell

Salut Gael

J'ai rectifié et ca marche ! cependant, si j'ajoute un autre nombre ou en soustrait un de la cellule, le message d'erreur réapparait.

Je voulais que la somme soit effectuée tous les nombres existant dans la cellule. Et leur nombre est variable.

@+
 

Gael

XLDnaute Barbatruc
Re:Total de plusieurs l'interieur d'une seule cell

Bonjour Anas, bonjour à tous,

J'ai modifié la formule en paramétrant le nombre d'occurences avec la fonction de comptage Regex.nombre.

{=SOMME(REGEX.STXT(C5;'\\d{2}\\s\\d{3}';LIGNE(INDIRECT('1:'®EX.NOMBRE(C5;'\\d{2}\\s\\d{3}'))))*1)}

de cette façon, la recherche se fait de la première occurence jusqu'au total. J'ai remplacé le Cnum par '*1' qui était plus simple.

antislash à rajouter devant les 'd', 's' soit 6 au total.

Les nombres dans la chaîne de caractères doivent tous avoir la même structure soit: 2 chiffres 1 espace puis 3 chiffres.

Le '®' envoyé par le post est à remplacer par '&' suivi de 'Reg'

@+

Gael

Message édité par: Gael, à: 07/09/2005 13:15
 

Discussions similaires

Statistiques des forums

Discussions
312 971
Messages
2 094 045
Membres
105 926
dernier inscrit
Odyssea