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 :

chiffre décimal toujours des problèmes


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut chiffre décimal toujours des problèmes
    Bonjour,

    j'utilise une macro access qui ouvre un fichier excel et insère des données dans une table notamment des chiffres décimal.

    Pour controler la saisie des utilisateurs, je vérifie que dans une cellule ou on attends du numérique que l'on ne saisisse pas du texte.

    et par hasard je suis tombé sur un truc un peu bizare :

    si je met un chiffre avec une virgule, pas de problème la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsNumeric(xlsFeuille.Cells(iNumLigne, iNumPeriode)) = False
    renvoi bien true.

    Par contre, si je saisi un chiffre décimal avec un point, la la fonction me renvoi "false" alors que c'est bien du numérique. Conséquence je rejette la saisie de l'utilisateur alors qu'elle est correct...

    est-ce que quelqu'un sait ce qu'il se passe et aurait une solution ?

    merci

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour;

    Par contre, si je saisi un chiffre décimal avec un point, la la fonction me renvoi "false" alors que c'est bien du numérique. Conséquence je rejette la saisie de l'utilisateur alors qu'elle est correct...
    Je suis étonné de cela, car en VBA la virgule n'est pas reconnu comme symbole décimal et pose régulièrement des problèmes quand on à ce symbole dans les paramètres régionaux si qu'on ne gère pas le symbole en code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsNumeric("13.2") = True
    er
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsNumeric("13,2") = False

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    en allant plus loin, j'enleve le controle de saisie, il y a un plantage a l'exécution de la requete >> le champs dans la table est du numérique, j'ai l'impression qu'il considère le chiffre comme une chaine de caractère à cause du point ?

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Et si tu remplaces les "." par des ","

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsNumeric(Replace(xlsFeuille.Cells(iNumLigne, iNumPeriode).Value,".",",")) = False

  5. #5
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    vois ceci http://didier-gonard.developpez.com/...texbox/#LV-G-1

    et le reste pour le fond entre les séparateurs feuilles et VBA..

    cordialement,

    Didier

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    jfontaine, merci de ta réponse.

    Je confirme ce que je dis, si je saisi 100.35, la fonction isnumeric renvoi bien false.

    Si je saisi 100,35, la fonction renvoi vrai.

    mon paramétrage est French(France). pour ce paramétrage le symbole décimal est la virgule.

    Bonjour Ormonth, et merci de ta réponse j'ai lu ce que tu as posté, mais je n'y ai pas trouvé de solutions.

    Peux-tu m'expliquer d'avantage ?

    Merci.

    Citation Envoyé par jfontaine Voir le message
    Et si tu remplaces les "." par des ","

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsNumeric(Replace(xlsFeuille.Cells(iNumLigne, iNumPeriode).Value,".",",")) = False
    je sais pas trop en fait, car j'utilise a la construction de ma requete la fonction STR() qui permet de substituer la virgule du chiffre décimal par un point pour pas que la syntaxe SQL soit fausse, tu vois ce que je veux dire ?

  7. #7
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    je pige mal le contexte
    Par contre, si je saisi un chiffre décimal avec un point
    tu saisis où dans quoi ?

    vois ceci aussi sinon :

    Influence des séparateurs décimal et listes FR/US sur l’enregistreur de macro


    cordialement,

    Didier

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsNumeric(Replace(xlsFeuille.Cells(iNumLigne, iNumPeriode).Value,".",",")) = False
    Ici on remplace uniquement dans la condition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlsFeuille.Cells(iNumLigne, iNumPeriode).Value
    Contient toujours la virgule qui sera remplacée ensuite pour la requête SQL

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Ormonth Voir le message
    Bonjour,

    je pige mal le contexte
    tu saisis où dans quoi ?
    je saisi un chiffre décimal avec comme symbole décimal le point dans la cellule excel.

    Citation Envoyé par jfontaine Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsNumeric(Replace(xlsFeuille.Cells(iNumLigne, iNumPeriode).Value,".",",")) = False
    Ici on remplace uniquement dans la condition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlsFeuille.Cells(iNumLigne, iNumPeriode).Value
    Contient toujours la virgule qui sera remplacée ensuite pour la requête SQL
    si j'utilise le replace dans la condition effectivement ca marche.

    mais plus loin a l'exécution de la requete ça plante car dans la table le champs est de type numérique.

    donc je sais pas trop ce que ca va donner si j utilise également le replace dans la requete avec également la fonction STR comme exxpliqué plus haut.

  10. #10
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Citation Envoyé par _developpeur_
    je saisi un chiffre décimal avec comme symbole décimal le point dans la cellule excel.

    Bonjour,

    C'est impossible si tu as un paramétrage français de base, tu saisis alors du texte !


    fais le test dans uns cellule, et observe l'alignement qui se produit, à gauche = texte, à droite = nombres / dates.
    C'est pourquoi le point du pavé numérique est converti en virgule à la saisie dans une cellule, ce qui n'est pas le cas du point du clavier

    cordialement,

    Didier

  11. #11
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Et en testant si le séparateur entrée par l'utilisateur correspond bien au séparateur système ?
    A mettre dans le module de ta Form :
    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
     
    Private Declare Function GetSystemDefaultLCID _
                    Lib "kernel32" () As Long
     
    Private Declare Function GetLocaleInfo _
                    Lib "kernel32" _
                    Alias "GetLocaleInfoA" ( _
                    ByVal Locale As Long, _
                    ByVal LCType As Long, _
                    ByVal lpLCData As String, _
                    ByVal cchData As Long) As Long
     
    Function SeparateurDecimal() As String
     
        Dim Tampon As String
        Dim LongTampon As Long
        Dim LCID As Long
     
        LCID = GetSystemDefaultLCID
     
        LongTampon = 255
     
        Tampon = String$(LongTampon, vbNullChar)
     
        LongTampon = GetLocaleInfo(LCID, &HE, Tampon, LongTampon)
     
        If LongTampon > 0 Then
     
            SeparateurDecimal = Left$(Tampon, LongTampon - 1)
     
        Else
     
            SeparateurDecimal = ","
     
        End If
     
    End Function
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        If KeyAscii = 44 Or KeyAscii = 46 Then
     
            KeyAscii = Asc(SeparateurDecimal)
     
        End If
     
    End Sub
    Hervé.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Ormonth Voir le message
    Bonjour,

    C'est impossible si tu as un paramétrage français de base, tu saisis alors du texte !


    fais le test dans uns cellule, et observe l'alignement qui se produit, à gauche = texte, à droite = nombres / dates.
    C'est pourquoi le point du pavé numérique est converti en virgule à la saisie dans une cellule, ce qui n'est pas le cas du point du clavier

    cordialement,

    Didier
    que je saisisse mon chiffre avec un point ou avec une virgule, il m'aligne toujours a droite.

    De plus je suis sur un portable, et quand je saisi le point il ne me converti pas en virgule.

  13. #13
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Après toutes ces réponses, je suis un peu perdu sur ce qui te bloques.
    Peux tu nous faire un topo avec ton code et le résultat attendu

Discussions similaires

  1. [Lazarus] Toujours des problèmes d'accents !
    Par JP.NUAGE dans le forum Lazarus
    Réponses: 10
    Dernier message: 12/03/2013, 09h10
  2. Toujours des problèmes sur IReport
    Par yaya0057 dans le forum iReport
    Réponses: 1
    Dernier message: 15/07/2008, 13h36
  3. Toujours des problème de "undefined reference to"
    Par Verbalinsurection dans le forum C++
    Réponses: 12
    Dernier message: 12/10/2007, 01h38
  4. [Sécurité][Sécurité]j'ai toujours des problèmes
    Par DSabah dans le forum Sécurité
    Réponses: 4
    Dernier message: 04/06/2007, 08h33
  5. SQL server et toujours des problèmes de dates ...
    Par constantin dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 28/10/2005, 12h19

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