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 415 fois - Téléchargée 287 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

Golog
Messages postés
224
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
22 décembre 2009
-
mdr quand meme le bordel de vérification :p
FeelCode
Messages postés
278
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
27 avril 2006
1 -
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
cs_letrust
Messages postés
9
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
25 janvier 2005
-
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...
pcpunch
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
3 -
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 ++
FeelCode
Messages postés
278
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
27 avril 2006
1 -
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

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.