Utilisation d'expression régulière pour n'autoriser que la saisie de caractère n

Résolu
molbento Messages postés 35 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 23 mai 2007 - 18 avril 2007 à 10:35
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 18 avril 2007 à 12:17
Bonjour je développe en visual basic.J'ai un petit problème avec les expression régulière. J'aimerais n'autoriser que la saisie de valeur numérique dans un text box et donc interdir tout les caractères qui ne sont pas numérique. Quand je tappe un caractère (ex P) mon code ne fonctionne pas, car la lettre P ne s'efface pas. Qyelqu'un pourait-il m'aider. Dans quel fonction de text1 je doit mettre le code que je mets dans Private Sub Text1_KeyPress(KeyAscii As Integer). On quelqu'un pourrait me donner un exemple d'utilisation des expressions régulières pour n'autoriser que la saisie de caracère numérique merci d'avance. Voila le code que j'ai saisie.

Dim expnum As String


Function numerique(myPattern As String, myString As Integer)
   Dim objRegExp As RegExp
   Dim objMatch  As Match
   Dim colMatches   As MatchCollection
   Dim RetStr As String
  
   'Création d'une nouvelle instance de l'objet RegExp (inutile si vous avez écrit "New" dans la déclaration)
   Set objRegExp = New RegExp


   'mettre notre expression regulière
   objRegExp.Pattern = myPattern


   'Tient-on compte de la différence entre majuscules et minuscules (case sensitiveness) ou non (case insensitiveness) ?
   objRegExp.IgnoreCase = True


   'Une recherche globale s'effectue sur la totalité du texte, sans s'arrêter dès le premier résultat trouvé
   objRegExp.Global = True


   'test de l'expression regulière
   If (objRegExp.Test(Chr(myString)) = True) Then
        TestRegExp = True
   Else
        TestRegExp = False
   End If
  
End Function




Private Sub Text1_KeyPress(KeyAscii As Integer)
expnum = "[0-9]"
If (numerique(expnum, KeyAscii) = False) Then
' on efface le caractère et on remet le focus du textbox au bon endroit
taille = Len(Text1.Text)
Text1.Text = Left(Text1.Text, taille) 'efface le dernier caractère tappé
Text1.SelStart = Len(Text1) ' Replace le curseur à la fin
End If


End Sub

5 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 avril 2007 à 10:42
Pourquoi utiliser les expression régulière pour un si petit traitement ?

De plus, au KeyPress, ton textbox ne contient pas encore ton nouveau caratère (il est stocké dans le KeyAscii), donc pour annuler l'ajout du caractère, il suffit de passer le KeyAscii à 0 :

Private Sub Text1_KeyPress(KeyAscii As Integer)
If (IsNumeric(KeyAscii)) Then KeyAscii = 0
End If End Sub
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
18 avril 2007 à 10:42
Salut,

Pour que du numérique, voici :

Private Sub Txt_détails_KeyPress(KeyAscii As Integer)




' On autorise que des chiffres
     If Not IsNumeric(Chr(KeyAscii)) Then
           KeyAscii = 0
    End If
  
End Sub


A+
Exploreur


 
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
18 avril 2007 à 10:43
Désolé Darksidious, encore une fois poste croisés....Ralalala....17 secondes...

A+
Exploreur

 
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
18 avril 2007 à 10:51
Salut,
Sinon en regardant dans les snippets de www.codyx.org, ou en recherchant dans le forum (sujet traité pas plus tard qu'hier) tu aurais trouver une autre solution que les expressions réguliaires

@+: Ju£i?n
Pensez: Réponse acceptée
0

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

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 avril 2007 à 12:17
Bon,

Une fois de plus un sujet traitant de la saisie contrôlée d'une textbox (numérique).... C'est lassant.

Il est également lassant de dire, comme je le fais ici une dernière fois, que ce contrôle de saisie ne sert à rien si, parrallèlement, on n'hinibe pas les copier coller (hé houi !)

J'ai ma méthode pour, à la fois :
- contrôler la saisie tout au long de la saisie
- contrôler les copier-coller indus mais laisser passer les bons
- permettre à l'utilisateur de saisir avec, comme séparateur de décimales, celui qu'il entend
- ne permettre comme séparateur de milliers que l'espace ou rien du tout

Pour y parvenir, j'utilise l'événement Change (Hé! Hé ! oui, Chaibat.... ne bondis pas !), mais avec une astuce.

Maintenant :

- Déposer une source pour celà me parait démesuré
- Déposer un simple "snippet" serait insuffisant car il me faut accompagner le tout d'explications et l'assortir de certains commentaires relatifs à l'utilisation ensuite de ce qui a été saisi, dans l'optique d'une distribution toujours efficace de son appli, quels que soient les paramètres locaux.

Comment faire ?
0
Rejoignez-nous