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!
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.