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

  • Initiateur de la discussion Initiateur de la discussion Anne13
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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]
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
 
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​
 
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
 
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
 
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
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]
 
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
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
 
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 https://www.excel-downloads.com/threads/corriger-separateur-numerique.20056428/]
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, @+
 
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, @+
Bonjour,

Je te remercie
Je regarde

Cordialement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
245
Réponses
2
Affichages
422
Réponses
5
Affichages
568
Réponses
3
Affichages
509
Retour