Controle de saisie simple d'un nombre décimal pour eviter les erreurs mathématiques par exemple

Soyez le premier à donner votre avis sur cette source.

Vue 5 610 fois - Téléchargée 298 fois

Description

Ce code permet d'eviter les erreurs de frappe d'un nombre décimal pour ainsi éviter ensuite les erreurs de calcul ou d'autres types...

Dans le zip un exemple !

Hop une petit mise à jour... il est plus simple, plus compréhensible je pense... , j'ai aussi modifer l'exemple...

Source / Exemple :


Dim cptmont11 As Integer
Dim cptmont12 As Integer
Dim cptmont21 As Integer
Dim cptmont22 As Integer

Public Sub Verifions(KeyAscii As Integer, lechamp As String, compteur As Integer, compteur2 As Integer)
If lechamp = "" Then 'si le champ est vide qd il tape alors
    compteur = 0 'on initialise les cpteurs à zéro
    compteur2 = 0
End If

If KeyAscii = 46 Then 'si c'est un point (.) on le change en virgule (,)
    KeyAscii = 44
End If

If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 And KeyAscii <> 13 And KeyAscii <> 44 Then 'si c'est un caractere sans raport avec le decimal (lettres...)
    'on affiche une erreur et on n'inscrit pas ce qu'il a tape
    MsgBox "Ce caractére ne convient pas, veuillez n'entrer que des chiffres (1 à 9 ou ',').", vbExclamation, "Erreur de saisie"
    KeyAscii = 0
Else
    If KeyAscii = 44 Then
        If lechamp = "" Then 'si c'est une virgule et que le champ est vide...
            KeyAscii = 0 'on n'inscrit pas (pas de virgule en début de nombre décimal...) ,57454?????
        Else
            If compteur = 0 Then 'si le champ est utilisé on verifie que le compteur est à zero pour mettre la virgule et la compter
                compteur2 = 0
                compteur = compteur + 1
            Else 'si il y a deja une virgule on affiche erreur... et on n'inscrit pas la virgule
                MsgBox "La virgule ne peut être placé qu'une seule fois dans un nombre décimal.", vbExclamation, "Erreur de saisie"
                KeyAscii = 0
            End If
        End If
    End If
    If compteur = 1 And KeyAscii <> 8 And KeyAscii <> 44 And KeyAscii <> 0 Then 'si il y a une virgule et que l'on tape un chiffre on le compte ds le compteur2
        compteur2 = compteur2 + 1
    End If
    
    If (KeyAscii = 8) Then 'si c'est un retour en arriere on enleve un chiffre du compteur2 (-1)
        compteur2 = compteur2 - 1
    End If
    
    If compteur2 < 0 Then 'si le compteur2 est inferieur à zero alors on le met à zero ainsi que le compteur
        compteur = 0
        compteur2 = 0
    End If
End If
End Sub

Private Sub Mont1_KeyPress(KeyAscii As Integer)
Call Verifions(KeyAscii, Mont1, cptmont11, cptmont12) 'on apelle la procedure avec ses propres compteurs
End Sub

Private Sub Mont2_KeyPress(KeyAscii As Integer)
Call Verifions(KeyAscii, Mont2, cptmont21, cptmont22) 'on apelle la procedure avec ses propres compteurs
End Sub

'## Mailing: f_latos2@hotmail.com ##'

Conclusion :


Premier code que je poste j'espere que je l'ai pas trop loupé, je pense qu'il marche mais je ne l'ai pas optimisé au maximum... deja voyons si il y a des bugs et apres je l'optimiserai...

lachez vous pour les commentaires je veux qd meme progresser... ! =)

Merci

(j'espere qu'une source similaire n'existe pas déjà...)

Ps: je n'ai pas limité le nombre de chiffre apres la virgule mais j'aurai pu... et le nombre doit être positif!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
jeudi 2 décembre 2004
Statut
Membre
Dernière intervention
31 mars 2006

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.
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
3
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 ????
Messages postés
9
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
25 janvier 2005

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 =)
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
3
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
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
3
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

++
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.