Mise en forme inatendue d'un montant en VBA

jhofman

XLDnaute Occasionnel
Bonjour


J'utilise une procédure pour "nettoyer" des données saisies.
Code:
Sub mise_enforme()

Set range_C = Range("A2:A6")
For Each cel In range_C
        a = cel.Value
        a = Replace(a, " ", "")
        a = Replace(a, ",,", ",")
        Cells(cel.Row, cel.Column + 1).Value = a
Next
End Sub

Mon problème est que la données 1,123456 se transforme en 123456.
SI quelqu'un a une explication il sera le bienvenu:)
 

Pièces jointes

  • MiseEnformeDonnée.xls
    28.5 KB · Affichages: 38
G

Guest

Guest
Re : Mise en forme inatendue d'un montant en VBA

Bonjour JHoffman,

Sans avoir testé, il me semble que ceci devrait le faire:

a=Val(replace(a,",,","."))

En vba il faut remplacer la virgule par le point

A bientôt
 

jhofman

XLDnaute Occasionnel
Re : Mise en forme inatendue d'un montant en VBA

merci

Mais avec le point cela donne le même résultat.
ce n'est pas cette fonction qui gène.
(ps le val ne semble pas nécesseraire)


en fait c'est el simple fait d'écrire
Code:
a = cel.Value
cel.value = a

qui généère une anomalie :
1,2 reste bien 1,2
mais
1,123132 devient 1 123 132
(disparition de la virgule)
 
Dernière édition:
G

Guest

Guest
Re : Mise en forme inatendue d'un montant en VBA

Re jHoffman,

J'ai réussit avec ceci:

Code:
For Each cel In range_C
        a = cel.Value
        a = Replace(a, " ", "")
        a = Replace(a, ",,", ".")
        If IsNumeric(a) Then
          Cells(cel.Row, cel.Column + 1).Value = CDbl(a)
        Else
          Cells(cel.Row, cel.Column + 1).Value = a
        End If
Next

Il faut que tes cellules soit au format nombre avec le nombre de décimales souhaitées.

A bientôt
 

skoobi

XLDnaute Barbatruc
Re : Mise en forme inatendue d'un montant en VBA

Bonjour jhofman, Roland,
Salut Hasco :),

Ou ceci?
Code:
Sub mise_enforme()
  Set range_C = Range("A2:A6")
  For Each cel In range_C
    a = cel.Value
    a = Replace(a, " ", "")
    a = Replace(a, ",,", ",")
    On Error Resume Next
    Cells(cel.Row, cel.Column + 1).Value = CDbl(a)
    If Err.Number <> 0 Then Cells(cel.Row, cel.Column + 1).Value = a
    On Error GoTo 0
  Next
End Sub

Edit: je suis en retard moi!
n'empêche Hasco, on avait la même idée ;) (promis, j'ai pas copié :D)
 

Discussions similaires

Réponses
3
Affichages
347
Réponses
12
Affichages
706
Réponses
5
Affichages
837

Membres actuellement en ligne

Statistiques des forums

Discussions
315 096
Messages
2 116 183
Membres
112 677
dernier inscrit
Justine11