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

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

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.