XL 2019 VBA - Problème lors de la conversion de points en virgules

zenkee

XLDnaute Nouveau
Bonjour à tous,

J'ai créé une macro permettant de transformer des points en virgules car des données ont des "." ou des "," pour séparer les décimales.
Lorsqu'un nombre a plusieurs chiffres après la virgule (ex : 1965,11999999998), la macro supprime complètement la virgule (l'exemple donne : 196511999999998).
L'exemple est joint.

Sauriez-vous la raison et comment faire en sorte que cela n'arrive pas ?

Merci d'avance,
 

Pièces jointes

  • Pointenvirgule2.xlsm
    17.5 KB · Affichages: 24
Solution
La raison c'est que la virgule est un caractère de séparation décimale issu des paramètres de langue.
Ce n'est pas un choix de l'utilisateur qui obtient une virgule quand il tape le point au clavier numérique.

En VBA quoi qu'il arrive, le séparateur décimal est le point (séparateur anglo-saxon).

Au départ la cellule contient une chaine de caractères car 123.45 en français n'est pas un nombre.
Pourquoi ? Ça vient de la manière dont ont été valorisées les cellules. Je ne sais pas comment.

Cellule.Value = Cellule.Value ?
En affectant une valeur chaine contenant des chiffres et un point dans la cellule, VBA reconnait une valeur numérique décimale et va la convertir en nombre décimal qui sera ré-affecté à la cellule qui verra alors...

Dudu2

XLDnaute Barbatruc
Bonjour,
Essaie cette fonction.
VB:
Sub MettreAuFormatDécimal()
    Dim Cellule As Range
    Const Colonne = 3
   
    For Each Cellule In ActiveSheet.UsedRange.Columns(Colonne).Cells
        If Not IsNumeric(Cellule.Value) Then
            Cellule.Value = Cellule.Value
        End If
    Next Cellule
End Sub
 

Dudu2

XLDnaute Barbatruc
La raison c'est que la virgule est un caractère de séparation décimale issu des paramètres de langue.
Ce n'est pas un choix de l'utilisateur qui obtient une virgule quand il tape le point au clavier numérique.

En VBA quoi qu'il arrive, le séparateur décimal est le point (séparateur anglo-saxon).

Au départ la cellule contient une chaine de caractères car 123.45 en français n'est pas un nombre.
Pourquoi ? Ça vient de la manière dont ont été valorisées les cellules. Je ne sais pas comment.

Cellule.Value = Cellule.Value ?
En affectant une valeur chaine contenant des chiffres et un point dans la cellule, VBA reconnait une valeur numérique décimale et va la convertir en nombre décimal qui sera ré-affecté à la cellule qui verra alors son séparateur se transformer en virgule car tu as un Excel français.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley