Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 17h20   #1
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
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 :
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
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h29   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
Bonjour;

Citation:
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 :
IsNumeric("13.2") = True
er
Code :
IsNumeric("13,2") = False
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h30   #3
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
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 ?
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h43   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
Et si tu remplaces les "." par des ","

Code :
IsNumeric(Replace(xlsFeuille.Cells(iNumLigne, iNumPeriode).Value,".",",")) = False
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h45   #5
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h02   #6
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
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 :
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 ?
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h06   #7
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

je pige mal le contexte
Citation:
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h06   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
Code :
IsNumeric(Replace(xlsFeuille.Cells(iNumLigne, iNumPeriode).Value,".",",")) = False
Ici on remplace uniquement dans la condition.
Code :
xlsFeuille.Cells(iNumLigne, iNumPeriode).Value
Contient toujours la virgule qui sera remplacée ensuite pour la requête SQL
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h16   #9
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
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 :
IsNumeric(Replace(xlsFeuille.Cells(iNumLigne, iNumPeriode).Value,".",",")) = False
Ici on remplace uniquement dans la condition.
Code :
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.
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h24   #10
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 18h32   #11
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
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 :
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é.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 19h40   #12
Membre du Club
 
Inscription : octobre 2005
Messages : 304
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 304
Points : 59
Points : 59
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.
_developpeur_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 21h15   #13
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h39.


 
 
 
 
Partenaires

Hébergement Web