CONTROLE DE SAISIE SIMPLE D'UN NOMBRE DÉCIMAL POUR EVITER LES ERREURS MATHÉMATIQ
Golog
Messages postés224Date d'inscriptionjeudi 31 janvier 2002StatutMembreDernière intervention22 décembre 2009
-
25 avril 2004 à 01:35
CSCGreg
Messages postés2Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention31 mars 2006
-
31 mars 2006 à 11:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
CSCGreg
Messages postés2Date d'inscriptionjeudi 2 décembre 2004StatutMembreDernière intervention31 mars 2006 31 mars 2006 à 11:27
Je pense que malgré les critiques se code est très bien fait et bien commenté, pour chaque étape.
Finalement le code de PCPunch devient presque aussi long, surtout quand il y a plusieurs textbox.
pcpunch
Messages postés1243Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention18 février 20195 26 avril 2004 à 16:21
Evidement que ca ne rendai pas le mm resultat que toi il suffisait de le modifié!!!!
Allez comme ça on va stopper la discution, une petite fonction qui permet de definir le nombre de décimal aprés la virgule :
Private Sub Text1_KeyPress(KeyAscii As Integer)
If InStr(Text1, ",") <> 0 And KeyAscii 46 Then KeyAscii 0: Exit Sub
If NbDeci(Text1, 2) <> True And KeyAscii <> 8 Then KeyAscii = 0: Exit Sub
If KeyAscii 46 Then KeyAscii 44
If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 And KeyAscii <> 44 Then KeyAscii = 0
End Sub
Public Function NbDeci(Src As TextBox, nb As Integer) As Boolean
'Src le textbox Nb le nombre de décimal autorisé
Dim Pos As Integer
Dim Decim As String
Pos = InStr(Src, ",")
If Pos <> 0 Then
Decim = Mid(Src, Pos + 1, Len(Src) - Pos + 1)
If Len(Decim) nb Then NbDeci False Else NbDeci = True
Else
NbDeci = True
End If
End Function
Voila , je pense qu'il n'y a plus rien a ajouter maintenant ????
cs_letrust
Messages postés9Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention25 janvier 2005 26 avril 2004 à 16:12
lol jte demande pas de le faire jte diser juste que dans ton code ça ne render pas le meme resultat que moi, c bon jsé le faire =) sinon merci en faite la fonction Chr jconnaissais pas =)
pcpunch
Messages postés1243Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention18 février 20195 26 avril 2004 à 16:07
La mm chose ne plus condensé et moin de ligne lol :
Private Sub Text1_KeyPress(KeyAscii As Integer)
If InStr(Text1, ",") <> 0 And KeyAscii 46 Then KeyAscii 0: Exit Sub
If KeyAscii 46 Then KeyAscii 44
If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 And KeyAscii <> 44 Then KeyAscii = 0
End Sub
pcpunch
Messages postés1243Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention18 février 20195 26 avril 2004 à 15:47
Ouuuuu la la !!! Malheur !! lol
Faut vraiment tout te faire letrust :
Dim Virgule As Boolean
Private Sub Form_Load()
Virgule = False
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii 46 And Not Virgule Then KeyAscii 44: Virgule = True
If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 And KeyAscii <> 44 Then KeyAscii = 0
End Sub
++
cs_letrust
Messages postés9Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention25 janvier 2005 26 avril 2004 à 15:43
hm... le test isnumeric ok... mais si jmet 2 virgules avec ton code pcpunch ça passe...
cs_letrust
Messages postés9Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention25 janvier 2005 26 avril 2004 à 14:34
j'avoue que je me suis un peu casser la tête pour rien... bon je laisse quand même la source comme ça, sinon ça serai pu Ma source =) ba merci bien a tous, pour drissou oui ba pour faire ça ya quelque truc a changer et c'est bon... =)
cs_drissou
Messages postés160Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention14 janvier 2009 26 avril 2004 à 08:56
Bonjour à tous, j'ai pour l'instant plutot utilisé vos sources sans en publier.
je n'ai pas bien lu le source en cause, mais au vu des réponses voilà comment je vois la chose. Pour moi il faut aller plus loin dans la gestion des chiffres..
- d'une part il faut évidemment gérer le fait que le caractère soit un chiffre et donc pourquoi pas IsNuméric.
- cependant d'autres choses sont à vérifier:
- gestion du signe moins, avec un seule exemplaire , en autorisant ou nom les chiffres négatifs
- gestion de la virgule avec là aussi le controle d'un seule exemmplaier de virgule
- gestion du nombre de chiffres après la virgule..
Si quelqu'un est intérssé je peux essayer (jamais fait) d'uploader ma fonction..
Bravo à tous les fournisseurs de psources
Drissou
FeelCode
Messages postés278Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention27 avril 20061 26 avril 2004 à 03:21
Pcpunch tu lui mache le boulot lol ;D
Petite remarque reafecter une valeur a une variable, d'une procédure (KeyAscii ) dans ton cas c est pas très bon car risque de confusion et écrasement des données.
ensuite utilise byte aux lieux de integer pour economiser de la mémoire pour plus d'info dans ton vb place toi sur integer et tape F1
ensuite cherche dans l'aide quelque chose comme: type de donnée
pcpunch
Messages postés1243Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention18 février 20195 26 avril 2004 à 00:04
FeelCode a raison !!!!!
Moi je trouve que ta source illustre formidablement bien, le dicton : "Pourquoi faire simple quand on peu faire compliqué!!!!"
Mm resultat en 2 lignes fait en qq secondes !!!!
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii 46 Then KeyAscii 44
If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 And KeyAscii <> 44 Then KeyAscii = 0
End Sub
Voila ++
cs_letrust
Messages postés9Date d'inscriptionmercredi 26 février 2003StatutMembreDernière intervention25 janvier 2005 25 avril 2004 à 11:24
Pour le IsNumeric je suis OK, mais le test se fera apres la saisie... mais j'avoue que le msg ferez ch*** mais c'est un exemple... jvais voir ce que je peut faire du IsNumeric...
FeelCode
Messages postés278Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention27 avril 20061 25 avril 2004 à 03:35
Euh il y a de l'idée
mai vala un une autre facon de voir la chose
If IsNumeric("asdf") = True Then
Stop' c est du numerique
Else
Stop'c est pas du numérique
End If
Apres tu reprend ton code pour la virgule :)
Mai en principe on laisse le choix a l'utilisateur de façons a ce qu'il utilise les deux c est beaucoup plus simple et sa lui évite de ce prendre un boite de dialogue qui fait ch*** a la moindre faute de frappe enfin bon c est juste mon avis
Golog
Messages postés224Date d'inscriptionjeudi 31 janvier 2002StatutMembreDernière intervention22 décembre 2009 25 avril 2004 à 01:35
31 mars 2006 à 11:27
Finalement le code de PCPunch devient presque aussi long, surtout quand il y a plusieurs textbox.
26 avril 2004 à 16:21
Allez comme ça on va stopper la discution, une petite fonction qui permet de definir le nombre de décimal aprés la virgule :
Private Sub Text1_KeyPress(KeyAscii As Integer)
If InStr(Text1, ",") <> 0 And KeyAscii 46 Then KeyAscii 0: Exit Sub
If NbDeci(Text1, 2) <> True And KeyAscii <> 8 Then KeyAscii = 0: Exit Sub
If KeyAscii 46 Then KeyAscii 44
If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 And KeyAscii <> 44 Then KeyAscii = 0
End Sub
Public Function NbDeci(Src As TextBox, nb As Integer) As Boolean
'Src le textbox Nb le nombre de décimal autorisé
Dim Pos As Integer
Dim Decim As String
Pos = InStr(Src, ",")
If Pos <> 0 Then
Decim = Mid(Src, Pos + 1, Len(Src) - Pos + 1)
If Len(Decim) nb Then NbDeci False Else NbDeci = True
Else
NbDeci = True
End If
End Function
Voila , je pense qu'il n'y a plus rien a ajouter maintenant ????
26 avril 2004 à 16:12
26 avril 2004 à 16:07
Private Sub Text1_KeyPress(KeyAscii As Integer)
If InStr(Text1, ",") <> 0 And KeyAscii 46 Then KeyAscii 0: Exit Sub
If KeyAscii 46 Then KeyAscii 44
If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 And KeyAscii <> 44 Then KeyAscii = 0
End Sub
26 avril 2004 à 15:47
Faut vraiment tout te faire letrust :
Dim Virgule As Boolean
Private Sub Form_Load()
Virgule = False
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii 46 And Not Virgule Then KeyAscii 44: Virgule = True
If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 And KeyAscii <> 44 Then KeyAscii = 0
End Sub
++
26 avril 2004 à 15:43
26 avril 2004 à 14:34
26 avril 2004 à 08:56
je n'ai pas bien lu le source en cause, mais au vu des réponses voilà comment je vois la chose. Pour moi il faut aller plus loin dans la gestion des chiffres..
- d'une part il faut évidemment gérer le fait que le caractère soit un chiffre et donc pourquoi pas IsNuméric.
- cependant d'autres choses sont à vérifier:
- gestion du signe moins, avec un seule exemplaire , en autorisant ou nom les chiffres négatifs
- gestion de la virgule avec là aussi le controle d'un seule exemmplaier de virgule
- gestion du nombre de chiffres après la virgule..
Si quelqu'un est intérssé je peux essayer (jamais fait) d'uploader ma fonction..
Bravo à tous les fournisseurs de psources
Drissou
26 avril 2004 à 03:21
Petite remarque reafecter une valeur a une variable, d'une procédure (KeyAscii ) dans ton cas c est pas très bon car risque de confusion et écrasement des données.
ensuite utilise byte aux lieux de integer pour economiser de la mémoire pour plus d'info dans ton vb place toi sur integer et tape F1
ensuite cherche dans l'aide quelque chose comme: type de donnée
26 avril 2004 à 00:04
Moi je trouve que ta source illustre formidablement bien, le dicton : "Pourquoi faire simple quand on peu faire compliqué!!!!"
Mm resultat en 2 lignes fait en qq secondes !!!!
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii 46 Then KeyAscii 44
If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 And KeyAscii <> 44 Then KeyAscii = 0
End Sub
Voila ++
25 avril 2004 à 11:24
25 avril 2004 à 03:35
mai vala un une autre facon de voir la chose
If IsNumeric("asdf") = True Then
Stop' c est du numerique
Else
Stop'c est pas du numérique
End If
Apres tu reprend ton code pour la virgule :)
Mai en principe on laisse le choix a l'utilisateur de façons a ce qu'il utilise les deux c est beaucoup plus simple et sa lui évite de ce prendre un boite de dialogue qui fait ch*** a la moindre faute de frappe enfin bon c est juste mon avis
25 avril 2004 à 01:35