Conversion d'une chaine de caractères en nombre

Bonjour à tous,

Récemment arrivée sur le Forum, je suis débutante en VBA et je souhaiterais un conseil de votre part.

J'ai des données de type String extraites d'une base que je souhaiterais transformer en Nombres pour des calculs.

Voici mes données de base et ce que à quoi je voudrais arriver:

Millions d'€
365.000(z)339 855.499
815.675(z)222 534.567
1 365.321(z)203 938.123
48.560(z)96 842.451
96.580(z)5 924.373
Résultat souhaitéRésultat souhaité
365,000339 855,499
815,675222 534,567
1 365,321202 938,123
48,56096 842,451
96,5805 924,373

Est-ce que l'un d'entre vous pourrait m'aider à résoudre ce problème s'il vous plait?

Merci d'avance.

Cordialement

Fraise

Pour cela je voudrais utiliser les fonctions Len, Right et Left ...

Bonjour,
Une proposition.
Cdlt.

5fraise678.xlsm (18.35 Ko)
Public Sub ConvertData()
Dim lastRow As Long, i As Long
Dim tbl As Variant, v

    With ActiveSheet

        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        tbl = .Cells(2, 1).Resize(lastRow - 1)
        For i = LBound(tbl) To UBound(tbl)
            v = VBA.Split(tbl(i, 1), "(")
            v = Val(v(0))
            tbl(i, 1) = v
        Next i
        With .Cells(2, 1).Resize(lastRow - 1)
            .Value = tbl
            .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 ;"
        End With

        lastRow = .Cells(.Rows.Count, 3).End(xlUp).Row
        tbl = .Cells(2, 3).Resize(lastRow - 1)
        For i = LBound(tbl) To UBound(tbl)
            tbl(i, 1) = Val(tbl(i, 1))
        Next i
        With .Cells(2, 3).Resize(lastRow - 1)
            .Value = tbl
            .NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 ;"
        End With

    End With

End Sub

Bonjour Jean-Eric,

Merci d'avoir pris le temps de me répondre. J'espère avoir ce niveau un jour mais pour le moment ce n'est pas encore le cas! Je suis débutante en VBA et pour être tout à fait honnête, je ne comprends pas ton code (niveau trop élevé pour moi).

En fait, j'ai juste besoin d'avoir une colonne à coté des extractions qui transforment les données selon le résultat souhaité avec un code le plus simple possible.

J'y arrive avec une fonction EXCEL en jonglant avec DROITE, GAUCHE, NBCAR et CNUM mais je dois le faire avec LEN, LEFT, RIGHT ... vu que ce sont des fonctions vues précédemment et là je n'y arrive pas.

Est-ce quelqu'un a une idée s'il vous plait?

Cordialement

Fraise

Bonjour Fraise,

Tu parles des fonctions DROITE, GAUCHE, NBCAR et ensuite des fonctions RIGHT, LEFT, LEN, ce sont les mêmes si ce n'est que les premières sont en français et les secondes en anglais, donc je ne comprends pas ton problème.
Remarque : la fonction CNUM traite une chaîne de caractères qui n'est pas reconnaissable comme une suite numérique, elle renvoie #VALEUR!. Par exemple, si en cellule A1 nous avons 123abc, est ce le cas pour toi quand tu veux traiter la chaîne 12052€ ?

Cordialement
Jacky

Bonjour,
Une mise à jour avec formules.
Cdlt.

10fraise678.xlsm (19.55 Ko)

Bonjour Jacky,

Merci pour ta réponse.

J'avais bien compris qu'en VBA il fallait mettre le nom des fonctions en anglais.

Je trouve la solution avec une formule dans EXCEL mais je n'arrive pas à l'appliquer dans mon programme VBA et je dois écrire le code en VBA.

Il faut que je fasse CNUM( ..... ) de toutes les combinaisons de LEFT, NBCAR & RIGHT pour avoir le résultat voulu dans EXCEL.

Mon problème reste dans VBA.

Cordialement

Fraise

Bonjour Jean-Eric,

Je vais aller regarder cette seconde solution de plus près.

Merci à toi.

En fait j'aurais aimé mettre ce type de formule une cellule du code VBA avec un Cells(2,11) . FormulaLocal puis un AutoFill pour recopier la formule jusqu'en bas.

Cordialement

Fraise

Bonjour Jean-Eric,

Je reviens vers toi pour des explications complémentaires: je ne comprends pas la partie notée en jaune ci-dessous:

image

J'ai cherche la fonction STXT(texte; numéro_de_départ; nombre_de_caractères) qui combinée à TROUVE ne me parle pas du tout.

Comme j'ai quand même cherché avant, est-ce que tu pourrais m'expliquer pourquoi ma formule qui semble fonctionner ne me donne pas un résultat satisfaisant.

En effet, j'arrive au résultat "visuel" souhaité mais ce ne sont toujours pas des nombres car en effectuant un tri ensuite sur une série plus longue ils ne sont pas classés par ordre décroissant.

Les formules en gris sont notées pour la 1ere ligne de calcul.

image image

Si quelqu'un d'autre a une idée sur ma question, toute aide est la bienvenue.

Merci à tous.

Cordialement

Fraise

Bonjour,
J'ai décomposé les formules pour une maeilleure compréhension.
A te relire.
Cdlt.

11fraise678.xlsm (20.16 Ko)

Merci Jean-Eric,

Pour tes explications qui sont claires et pour ta réactivité.

Est-ce que tu sais pourquoi mes formules ne me donnent pas le bon résultat?

Cordialement

Fraise

Bonjour,

Arrivée récemment sur le forum, je suis débutante en VBA et j'aurais besoin de votre aide.

J'arrive à effectuer les formules sous EXCEL mais pas sur VBA.

Que pouvez-vous me proposer alors comme solution?

Je vous en remercie par avance.

Cordialement

Fraise

1ere question : pourquoi ça ne fonctionne pas en remplaçant par les instructions sur les chaines de caractères? 2eme question : pourquoi ca ne fonctionne pas en remplaçant par les instructions sur les chaines de caractères?
9.967(z)9.967=GAUCHE(A1;NBCAR(A1)-3)9,967=CNUM(SUBSTITUE(GAUCHE(A1;NBCAR(A1)-3);".";","))
198.100(z)198.100198,1
22.220(z)22.22022,22
Range("B7").Select
9.967(z) 'ActiveCell.FormulaR1C1 = "=VAL(REPLACE(LEFT(RC[-1],LEN(RC[-1])-3)),""."","","")"
198.100(z)
22.220(z)
17 743.99317743,993=CNUM(SUBSTITUE(A15;".";","))
137 081.347137081,35
9 919.9949919,994
Range("B18").Select
17 743.993 ActiveCell.FormulaR1C1 = "=VAL(REPLACE(RC[-1]),""."","",""))"
137 081.347
9 919.994
Rechercher des sujets similaires à "conversion chaine caracteres nombre"