IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA] Problème séparateur décimale [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [VBA] Problème séparateur décimale
    Bonjour,

    Mon ordinateur est configuré en langu Française, avec comme séparateur décimale le POINT ( . ).
    J'ouvre un fichier EXCEL dans lequel le séparateur décimal a été mis en VIRGULE ( , ). Jusque là, aucun soucis, il détecte simplement les valeurs comme du texte, ce qui ne me dérange pas.

    Soit un fichier ou X est la ligne et Y la colonne.
    Dans mon fichier, j'ai des "NaN".
    J'ai donc lancé une macro afin de les remplacer par la valeur "NaN" (présente en coordonnée X;Y )par celle de la cellule X-1;Y.

    Celà donne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        Dim nb As Double
        Dim i, x, y, x1 As Integer
        Dim Terms As String
     
        Terms = "NaN"  '' Terme erreur numérique à remplacer
     
        nb = Application.WorksheetFunction.CountIf(Columns("A:XFD"), Terms)      '' On compte le nombre de cellule contenant la variable Terms
     
        For a = 1 To nb
            Cells.Find(What:=Terms, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
     
            x = ActiveCell.Row
            y = ActiveCell.Column
            x1 = x - 1
     
            Cells(x, y).value = Cells(x1, y).Value
        Next a
    Si je met des chiffres à mes variables :

    A l'initial :
    Cells(x, y).value = NaN
    Cells(x1, y).value = 160,12345

    Post-lancement de la MACRO :
    Cells(x, y).value = 16 012 345
    Cells(x1, y).value = 160,12345

    => Vous voyez donc que la virgule a été supprimé... La virgule semble avoir été prise pour un séparateur des milliers... Ce qui ne m'arrange plus...

    Afin de palier à ce soucis, j'ai donc remplacer la ligne de code "Cells(x, y).value = Cells(x1, y).Value" par les deux suivantes :
    Cells(x1, y).Copy
    Cells(x, y).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    Cependant le temps de traitement est multiplié par 2... Ce qui est gênant au vu du nombre de colonnes que j'ai (A:XFD) et de lignes (800.000).
    Ma question est donc de savoir comment palier à ce soucis dans ma MACRO sans avoir à modifier de paramètres Windows ou EXCEL ?

    Merci par avance,
    Fabrice.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Vous devriez avoir nativement la solution en passant par exemple par les séparateurs, que vous pouvez définir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.DecimalSeparator 
     Application.ThousandsSeparator
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Parfait merci beaucoup.
    Je vais essayer ainsi alors ^^

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour, bonjour !

    Citation Envoyé par U024519 Voir le message
    Mon ordinateur est configuré en langue Française, avec comme séparateur décimale le POINT ( . ).
    J'ouvre un fichier EXCEL dans lequel le séparateur décimal a été mis en VIRGULE ( , ). Jusque là, aucun soucis, il détecte simplement les valeurs comme du texte, ce qui ne me dérange pas.
    Et non ‼   C'est détecté comme du texte car justement enregistré comme tel !
    Si dans ma version d'Excel française avec une virgule comme séparateur décimal j'enregistre des nombres,
    à l'ouverture de ton côté ce seront toujours des nombres même si ton séparateur décimal est un point !

    Voilà, voilà !

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Sauf que si je copie le texte "bonjour, ca va" il doit restituer le tout, incluant la virgule...
    Et j'ai beau dire que la nouvelle coordonnée est un string, il veut rien savoir

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Merci de ne pas citer l'intégralité du message juste précédent, aucun intérêt à part nuire à la lisibilité !

    Sinon je ne comprends pas ta remarque car là il ne s'agit que de texte, la virgule est un caractère comme un autre …

    Joindre un fichier au format général .xlsx (donc sans code) …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai besoin d'une petite synthèse, car le problème de virgule range("A1").value=Range("A1").value mais ["NaN"] là... je vois pas le rapport

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    J'ai bien vu le rapport mais comme cette discussion est déjà clôturée !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    C'est un probleme de conversion americaine similaire au probleme de conversion des dates.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    Sub tt3()
     
    Columns("B:M").Clear
     
    valeur = "12,234567" 'FR_France ' Le separateur decimal en France est la virgule, d'ou conversion americaine qui cause probleme
    'valeur = 4000.12345 ' Numerique
     
    Cells(1, 1).NumberFormat = "@"
    Cells(1, 1).Value = valeur
     
     Dim a As Variant
     a = Cells(1, 1).Value
     
     Cells(2, 1) = TypeName(Cells(1, 1).Value)
     
    Cells(1, 3).Value = "Type de la valeur"
    Cells(1, 5).Value = "Resultat"
    Cells(1, 6).Value = "Type"
     
    For i = 1 To 3
     
    Columns("E:F").Clear
     
     Select Case i
      Case 1
       Columns("E").NumberFormat = "General": col = "H"
       NumberFormatDestination = Columns("E").NumberFormat
     
      Case 2
       Columns("E").NumberFormat = "0.00000": col = "j"
       NumberFormatDestination = Columns("E").NumberFormat
     
      Case 3
       col = "L": Columns("E").NumberFormat = "@"
       NumberFormatDestination = Columns("E").NumberFormat
     
     End Select
     
     Cells(8, "E") = "'" & NumberFormatDestination
     
     'Quand VBA ecrit dans une cellule une valeur avec "=", il fait appel,
     'si requis, a une fonction de conversion archaique
     'qui interprete la valeur comme etant une valeur americaine.
     'La conversion n'est requise que lorsque le type de la valeur
     'et le format de la cellule destination ne sont pas du meme type.
     
     'Avec .Value, cette conversion automatique peut donner un resultat errone.
     Cells(2, 5).Value = Cells(1, 1).Value
     Cells(2, 3) = TypeName(Cells(1, 1).Value)
     
     Cells(5, 5).Value = CDbl(a)
     Cells(5, 3) = TypeName(CDbl(a))
     
     'Avec .FormulaLocal, cette conversion automatique ne cause pas de resultat errone.
     Cells(7, 5).FormulaLocal = CStr(a)
     Cells(7, 3) = TypeName(CStr(a))
     
     Cells(6, 5).FormulaLocal = CDbl(a)
     Cells(6, 3) = TypeName(CDbl(a))
     
     
     Cells(2, 6) = TypeName(Cells(2, 5).Value)
     Cells(5, 6) = TypeName(Cells(5, 5).Value)
     Cells(6, 6) = TypeName(Cells(6, 5).Value)
     Cells(7, 6) = TypeName(Cells(7, 5).Value)
     
     Range("E1:f7").Copy Cells(1, col)
     
     Cells(8, col) = "'" & NumberFormatDestination
     
     Next
     
     Columns("E:F").ClearContents
     
     Cells(2, 4).Value = "Cells(2, 5).Value = Cells(1, 1).Value"
     Cells(4, 4).Value = "a = Cells(1, 1).Value"
     Cells(5, 4).Value = "Cells(5, 5).Value = CDbl(a)"
     Cells(7, 4).Value = "Cells(6, 5).FormulaLocal = cstr(a)"
     Cells(6, 4).Value = "Cells(7, 5).FormulaLocal = CDbl(a)"
     
     Cells(1, "F") = "Conversion americaine erronee"
     Cells(2, "F") = "Oui"
     
     
     If CDbl(Cells(1, 1)) = Cells(2, "H") Then
      Cells(2, "F") = "Non"
      Else
      Cells(2, "F") = "Oui"
     End If
     
     If CDbl(Cells(1, 1)) = Cells(5, "H") Then
      Cells(5, "F") = "Non"
      Else
      Cells(5, "F") = "Oui"
     End If
     
     If CDbl(Cells(1, 1)) = Cells(6, "H") Then
      Cells(6, "F") = "Non"
      Else
      Cells(6, "F") = "Oui"
     End If
     
      If CDbl(Cells(1, 1)) = Cells(7, "H") Then
      Cells(7, "F") = "Non"
      Else
      Cells(7, "F") = "Oui"
     End If
     
     Cells(5, "B") = "Solution 1"
     Cells(6, "B") = "Solution 2"
     Cells(7, "B") = "Solution 3"
     
    Cells(8, "E") = "Format des cellules destination"
     
    End Sub
    Cordialement

    Docmarti.

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Salut Doc !

    Sauf que la présentation initiale parle de nombres enregistrés dans Excel
    et si tel est le cas il n'y aucun souci d'une configuration / version à une autre,
    j'en envoie et j'en reçois pratiquement tous les jours …

    Tiens il y a aussi une discussion à propos de dates où tu es cité dans le forum Excel !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par Marc-L Voir le message


    Sauf que la présentation initiale parle de nombres enregistrés dans Excel
    et si tel est le cas il n'y aucun souci d'une configuration / version à une autre,
    Sauf que ses nombres sont enregistres comme etant de type String. C'est la que le probleme survient.
    Cordialement

    Docmarti.

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Et c'est bien ce que j'ai annoncé dès le post #4 …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème séparateur décimal SQL->VBA Excel
    Par pitipilot dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/03/2014, 15h54
  2. [E-07] Autre problème de séparateur décimal
    Par chriscamp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/03/2009, 20h00
  3. Problème de séparateur décimal
    Par Nap01 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 18/03/2008, 14h21
  4. [VBA-E]Séparateur décimal
    Par Mad X dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/03/2006, 16h17
  5. [VB.NET]Problème de séparateur décimal [débutant]
    Par Cantalou dans le forum Windows Forms
    Réponses: 5
    Dernier message: 03/03/2006, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo