IsNumeric ne suffit pas...

Signaler
Messages postés
3
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
24 juin 2004
-
Messages postés
3
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
24 juin 2004
-
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

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
129
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
Messages postés
615
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
4 juillet 2012

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..
Messages postés
48
Date d'inscription
samedi 19 avril 2003
Statut
Membre
Dernière intervention
23 mars 2007
1
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

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
17
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
Messages postés
3
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
24 juin 2004

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? :)
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
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
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
17
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
Messages postés
3
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
24 juin 2004

mille mercis
avec ça si je ne m'en sors pas ^^