Autoriser uniquement les chiffres, point et signe - dans une textbox

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 499 fois - Téléchargée 30 fois

Contenu du snippet

Ce code permet de tester les caracteres de plusieurs textbox à l'aide de l'evenement keypress.Il permet aussi de tester si un caractere a ete tapé deux fois dans la meme textbox.

Source / Exemple :


Public Sub TextAscii(Text As Object, KeyAscii As Integer, virgule As Boolean, signe As Boolean)

    Dim positionpoint As Integer
    
    'on recherche la position du . dans la chaine
    positionpoint = InStr(1, Text, ".")
    
    Select Case KeyAscii
    
    Case 48 To 57:
    
    Case 8:
    
    Case 45:
        'si on ne veut que des chiffres positifs
        If signe = False Then: KeyAscii = 256
        'si on a deja un signe - le programme ne tient pas compte des autres
        If Len(Text) <> 0 Then: KeyAscii = 256
    
    Case 46:
        'si on ne veut pas de chiffres a virgule
        If virgule = False Then: KeyAscii = 256
        'empeche d'ecrire un . ( virgule) au debut de la textbox
        If Len(Text) = 0 Then
            KeyAscii = 256
        Else
        
            If Len(Text) = 1 Then
                'empeche d'ecrire un . apres un signe moins
                If Text = "-" Then
                    KeyAscii = 256
                Else
                    
                End If
            Else
                'si l'on a deja un . le programme ne tient pas compte des autres
                If positionpoint <> 0 Then
                    KeyAscii = 256
                Else
                  
                End If
            End If
        End If
    
    Case Else: KeyAscii = 256

End Select

End Sub

Conclusion :


J'ai essayé de mettre un select case pour tester les valeurs de keyascii mais ca ne marchait pas donc j'ai opté pour la solution bourrin certes peu elegante mais efficace.On peut changer la valeur des tests de keyascii pour n'avoir par exemple que des lettres, de meme pour le point et le signe -
Ah oui quand je dis virgule dans mon programme ca fait reference a un point a vous de changer la valeur de keyascii pour avoir une virgule ( 44 ).

Bon n'hesitez pas a le critiquer c'est ma premiere source, bourrin mais elle marche si elle peut aider qqn c'est cool.Si qqn a des conseils a me donner pas de prob lol.

ciao

A voir également

Ajouter un commentaire

Commentaires

bibinutz
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
13 janvier 2009
-
alors comme promis je regarde tous vos commentaires et je les teste je commence par yoman64 :
quand tu dis que je peux remplacer tout ceci :
If keyascii <> 45 And keyascii <> 46 And keyascii <> 48 And keyascii <> 49 And keyascii <> 50 _
And keyascii <> 51 And keyascii <> 52 And keyascii <> 53 And keyascii <> 54 And keyascii <> 55 _
And keyascii <> 56 And keyascii <> 57 And keyascii <> 8 Then keyascii = 24

par :

if (keyascii < 45 and keyascii > 57) and keyascii <> 8 then keyascii = 24

ca ne marche pas.Si tu mets if (keyascii < 45 0R keyascii > 57) and keyascii <> 8 then keyascii = 24
cela marche exepte qu'on ne bloque pas / caractere 47.

Autrement le reste de ton code est bon il marche chez moi
Voila encore merci de ton aide
Salut
bibinutz
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
13 janvier 2009
-
je voie que mon "code" se developpe lol et ben c'est bien la je n'ai pas le temps de tout regarder mais demain je vais jeter un coup d'oeil à tous ces commentaires et modifier mon code par la meme occasion je remercie tout le monde pour l'attention que vous portez à ce code.

Salutations.
cs_NICK123
Messages postés
29
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
22 juin 2009
-
Voici ce que vous chercher..
1. le signe '-' doit être que à la première position.
2. le nombre de chiffre apres la virgule.
3. la virgule ne doit-être apres le signe "-".


Public Sub TextAscii(Text As Object, KeyAscii As Integer, virgule As Boolean, PositionVirgule As Integer, signe As Boolean)
Dim Pointv As Integer
Pointv = InStr(1, Text, ".")
Select Case KeyAscii
Case 48 To 57:
If Pointv <> 0 Then
If Len(Text.Text) >Pointv + PositionVirgule Then: KeyAscii 256
End If
Case 8:
Case 45:
If signe False Then: KeyAscii 256
If Len(Text) <> 0 Then: KeyAscii = 256
Case 46:
If virgule False Then: KeyAscii 256
If Len(Text) = 0 Then
KeyAscii = 256
Else

If Len(Text) = 1 Then
If Text = "-" Then
KeyAscii = 256
Else

End If
Else
If Pointv <> 0 Then
KeyAscii = 256
Else

End If
End If
End If
Case Else: KeyAscii = 256
End Select

End Sub
cs_Targhan
Messages postés
13
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
24 mai 2005
-
L'intention est louable. :)
L'idée de limiter le nombre de décimales peut être intéressante dans certains cas...
Bibinutz pourrait rajouter ce paramètre dans sa sub...
cs_NICK123
Messages postés
29
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
22 juin 2009
-
Désolé, je veux seulement aider

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.