IsNumeric ne suffit pas...

cs_titou13 Messages postés 3 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 24 juin 2004 - 23 juin 2004 à 14:59
cs_titou13 Messages postés 3 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 24 juin 2004 - 24 juin 2004 à 00:20
Bonjour à tous :)

J'ai un souci avec un test sur le contenu d'une text box :

je voudrais qu'on ne puisse y mettre que des chiffres de 0 à 9 ainsi qu'un séparateur décimal en fonction des parametres régionaux.

j'utilise pour le moment la fonction isnumeric pour tester que le dernier carractere entré est bien numérique : ceci à pour effet d'empecher la saisie de tout carractere autre que 0 à 9 ...
là ou la bas blesse c qu'au deuxieme carractere, mon test accepte les signes + et - ....
Or si j'entre 9- il me compte ça comme "-9" ce qque je ne veux pas....

qqn a t il une solution?

8 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
23 juin 2004 à 15:14
Et bien tu teste en plus les touches préssées, en testant le KeyCode passé en paramètre à ton événement KeyUp, et tu supprime le dernier caractère s'il ne s'agit pas d'une chiffre ou d'un point.

Gare aussi aux points : s'il y en a plusieurs, il faut les supprimer !

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
23 juin 2004 à 15:52
Voici une petite fonction que j'utilise courament pour les problèmes de ce genre

'******************************************************************************
'* Retourne le Code Ascii du caractère entré si il est dans le range Autorisé *
'******************************************************************************
Public Function Input_Filter(ByVal Key%, Authorised_Key$) As Integer
Select Case Key
Case 32, 8 'on laisse passer les touches "espace" "Backspace"
Input_Filter = Key
Case Else
If InStr(1, Authorised_Key, Chr$(Key)) <= 0 Then
Beep
Input_Filter = 0
Else
Input_Filter = Key
End If
End Select

End Function

et il te suffit de l'appeler de cette façon

Private Sub montextbox_KeyPress(KeyAscii As Integer)
KeyOk = "1234567890."
KeyAscii = Input_Filter(KeyAscii, KeyOk)
End Sub

Pascal Laurençon
Mieux vaut un petit clic que deux grandes claques..
Mieux vaut un naze bin qu'un naze tout court..
0
PiterTheWood Messages postés 48 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 23 mars 2007 1
23 juin 2004 à 15:53
Utilise l'événement _KeyPress(KeyAscii as integer) de ton Textbox

Keyascii c'est le caractaire ascii fait par l'utlisateur


'Pour le point => virguleif Chr(KeyAscii) "." then KeyAscii Asc(",")
if not((Keyascii >= 48 and KeyAscii <=57) or _
      KeyAscii =8 Or KeyAscii = Asc(",")) then
   KeyAscii =0 'annule la touche fait par l'utilisateur
end if

0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
23 juin 2004 à 17:00
Salut,
Je rajouterais :
AND keyascii>31
sinon, les retour arrière ,déplacement par les flèches, suppression,... en cas d'erreur ne fonctionneront pas.

Cordialement

CanisLupus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_titou13 Messages postés 3 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 24 juin 2004
23 juin 2004 à 17:07
Merci beaucoup pour vos diverses reponses :)

sans vouloir abuser de vous j'ai encore un souci avec ce que vous me proposez...

en fait, si l'utilisateur a configuré ses parametres regionaux pour que la virgule soit le séparateur décimal, je veux interdire la saisie du point et inversement s'il choisi le point comme séparateur : exit la virgule...

c faisable? :)
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Modérateur Dernière intervention 23 décembre 2008 23
23 juin 2004 à 17:30
ou avec des expressions régulières (pas l'idéal dans ton cas, mais intéressant) :

Référence à charger :
Microsoft VB Script Regular Expressions 5.5


Function isValidTextBox(sText As String, parametre_regional As String) As Boolean
'Check is the textbox has the correct format
Dim FORMAT_TEXTBOX As RegExp
Dim MATCHES, MATCH As Object
Dim bReturn As Boolean

    Set FORMAT_TEXTBOX = New RegExp
    FORMAT_TEXTBOX.IgnoreCase = True
    If parametre_regional = "virgule" Then
        FORMAT_TEXTBOX.Pattern = "[0-9,]*"
    Else
        FORMAT_TEXTBOX.Pattern = "[0-9\.]*"
    End If
    Set MATCHES = FORMAT_TEXTBOX.Execute(sText)
    bReturn = False
    For Each MATCH In MATCHES
        If Len(MATCH.Value) = Len(sText) Then
            bReturn = True
        End If
    Next
    
isValidTextBox = bReturn
End Function

Private Sub Text1_Change()
If Not isValidTextBox(Text1.Text, "virgule") Then
    MsgBox "bouuuhhh , pas bien !!"
    Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
    Text1.SelStart = Len(Text1.Text)
End If
End Sub



====== JUSTE POUR INFO =============

Les expressions régulières restent idéales pour vérifier le format d'une chaine de caractères.
Tu peux ainsi valider des chaines complexes du style :
3 caractères + 2 espaces + au moins une lettre comprise entre D et K + un nombre à 3 chiffres + une virgule.

TEXT_BOX.Pattern = "[a-zA-Z]{3}/s{2][D-K]+[0-9]{3},"

isValidTextBox renverra alors True pour les chaines de caractères suivantes :

"rTu DKHGFHDGDHFJDH834,"
"zbY K342,"

Note supplémentaire : idéal pour vérifier le format des emails.

Manu
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
23 juin 2004 à 18:12
Pour tester si c un point ou une virgule le séparateur, il y a un truc hyper simple :

If IsNumeric("0.1") = true then
' Le séparateur est un point
else
' Le séparateur est une virgule
endif

Cordialement

CanisLupus
0
cs_titou13 Messages postés 3 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 24 juin 2004
24 juin 2004 à 00:20
mille mercis
avec ça si je ne m'en sors pas ^^
0