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

  • Initiateur de la discussion Initiateur de la discussion zenkee
  • 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 !

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

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...
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
 
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:
- 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
8
Affichages
529
Retour