Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 remplacement . ou , par séparateur de décimal en VBA

Anne13

XLDnaute Nouveau
Bonjour,
je m'arrache les cheveux sur une question pourtant simple et abordée de nombreuses fois ...
J'ai besoin dans un ficher excel de remplacer les , ou les . par le séparateur de décimal de l'application.
En effet selon les postes celà peut varier.
J'ai trouvé comment récupérer le séparateur défini sur le poste. ( merci le forum)
J'ai donc écrit une macro, le problème c'est que du coup tous mes chiffres passent en texte, alors que si je le fait manuellement avec la fonction remplacer cela fonctionne.
Je ne comprends pas ce que je fais mal ...
Merci de votre aide,

VB:
Sub SepDec()
'
' Remplacement des points ou virgules par le séparateur de décimal configuré
'

'
Dim dec As String

    dec = Application.DecimalSeparator
 

     Range(Selection, Selection.End(xlDown)).Select
    Selection.Replace What:=".", Replacement:=dec, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:=",", Replacement:=dec, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    
End Sub
 

Pièces jointes

  • test.xlsm
    11.8 KB · Affichages: 23
Solution
Bonsoir Anne Bernard, Phil 69970, le forum

essayes ton code modifié comme cela

Cordialement, @+
VB:
Sub Remplace()
Range(Selection, Selection.End(xlDown)).Select

For Each Cell In Selection
     Cell.Value = CDec(Numerique(Cell.Value))
Next
End Sub

Function Numerique$(Num$)
'remettre le bon séparateur numérique sur une saisie en textbox quelque soit le paramètre régional
'by Ti_ (Thierry Pourtier) le 06-08-2006
Dim DSep$, Sep$
  DSep = Mid$(2.1, 2, 1)
  Sep = IIf(DSep = ".", ",", ".")
  Numerique = Replace(Num, Sep, DSep)
End Function

[édition : salut @Anne13 j'ai modifié la fonction avec celle la, valeur#, qui fonctionne dans tous les cas, plus besoin de cdec avec la Fonction Valeur]

Phil69970

XLDnaute Barbatruc
Bonjour Anne, le forum

Un essai

VB:
Sub Remplace()
For Each cell In Selection
    If InStr(1, cell.Text, ".") > 0 Then
        cell.Value = CDbl(Val(cell.Text))
    End If
Next
End Sub

*Il faut sélectionner les cellules concernées avant de lancer la macro

@Phil69970
 

Anne13

XLDnaute Nouveau
Bonjour Phil69970,
merci de la réponse, cela fonctionne si j'ai des points, par contre si j'ai une virgule et que je suis passée en texte cela ne fonctionne pas.
Je vais effectivement chercher une autre solution que remplacer.
Bonne journée
 

Anne13

XLDnaute Nouveau
2ème essai, on progresse,
les chiffres contenant des virgules perdent leur décimales, à gauche le départ, à droite l'arrivée.
Par contre tout est bien en nombre, on progresse.




point pavé num
7,6​
7​
virgule
7,6​
7​
point7.6
7,6​
 

Phil69970

XLDnaute Barbatruc
Anne

3eme essai récupérer sur internet

VB:
Sub test()
With Worksheets("feuil1")
    With .Range("B2:B6")  '<== à adapter
        .Replace ",", ""
        t = .Value
        .Clear
        .NumberFormat = "# ##0.00"
        .Value = t
    End With
End With
End Sub

@Phil69970
 

Anne13

XLDnaute Nouveau
eureka,
j'ai finalement trouvé quelque chose qui à l'air de fonctionner.
Merci Phil d'avoir pris le temps de m'aider.

VB:
Sub Remplace()
 Range(Selection, Selection.End(xlDown)).Select

If Application.DecimalSeparator = "," Then
    For Each cell In Selection
     cell.Value = Replace(cell, ".", ",")
     Next
    Else
    For Each cell In Selection
     cell.Value = Replace(cell, ",", ".")
    
    Next
End If
End Sub
 

Anne13

XLDnaute Nouveau
nos messages se sont croisés ;-)
j'ai quand même testé, mais là encore il a du mal avec la virgule, mon 7.6 devient 76.
A adapter peut être en ajoutant un if selon le séparateur configuré.
Merci pour tout,
Bonne soirée
 
Bonsoir Anne Bernard, Phil 69970, le forum

essayes ton code modifié comme cela

Cordialement, @+
VB:
Sub Remplace()
Range(Selection, Selection.End(xlDown)).Select

For Each Cell In Selection
     Cell.Value = CDec(Numerique(Cell.Value))
Next
End Sub

Function Numerique$(Num$)
'remettre le bon séparateur numérique sur une saisie en textbox quelque soit le paramètre régional
'by Ti_ (Thierry Pourtier) le 06-08-2006
Dim DSep$, Sep$
  DSep = Mid$(2.1, 2, 1)
  Sep = IIf(DSep = ".", ",", ".")
  Numerique = Replace(Num, Sep, DSep)
End Function

[édition : salut @Anne13 j'ai modifié la fonction avec celle la, valeur#, qui fonctionne dans tous les cas, plus besoin de cdec avec la Fonction Valeur]
 

Anne13

XLDnaute Nouveau
Merci, Yeahou,
c'est exactement ce que je cherchais pour la fonction.
Elle va me servir pour de nombreux fichiers !
Pour le reste j'avais mis un fichier test dans mon premier message, désolée si je n'ai pas été assez claire.
Bonne soirée à tous
 

onyirimba

XLDnaute Occasionnel
Supporter XLD
Bonjour @Yeahou ,

est-ce que tu peux lire ce fil de discussion ci-après car j'ai le même problème et j'ai essayé le codage ci-dessus mais cela ne fonctionne pas ?

Cordialement.
Merci de votre aide

 
Bonjour onyirimba, le forum

normal que cela ne fonctionne pas.
pour ton code il faut enlever les points et non remettre le bon séparateur
essaie avec ce code

VB:
Sub Remplace()
Range(Selection, Selection.End(xlDown)).Select

For Each Cell In Selection
     Cell.Value = Replace(Application.Trim(Cell.Value), ".", "") / 1
Next
End Sub
Bien cordialement, @+
 

onyirimba

XLDnaute Occasionnel
Supporter XLD
Bonjour,

Je te remercie
Je regarde

Cordialement.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…