Textbox numerique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 781 fois - Téléchargée 68 fois

Contenu du snippet

Le code suivant permet de limiter la saisie dans un textbox à un ensemble de caractères. En particulier, si on désire que le champs contienne un nombre, on est sur qu'on n'aura aucune erreur.

Source / Exemple :


'Le code ci après utilise l'évenement KeyPress d'un contrôle pouvant gérer cet évenement ainsi
'que les propriétés "Text", "SelText" et "SelStart" pour permettre la saisie de champs numériques

Private Sub Text1_KeyPress(KeyAscii As Integer)
   SaisieText Text1, KeyAscii, True, False
   KeyAscii = 0
End Sub

'Les paramètres de la procédure Saisie Text sont :
'TxtChamps As Control : Tout contrôle qui gère les propriétés "Text", "SelText" et "SelStart"
'KeyAscii As Integer : Code ASCII de la touche pressée
'Numerique As Boolean : True si le champs est numérique, False sinon
'Optional Negatif As Boolean : True si le nombre peut être négatif, 
'False sinon (Si ce paramètre est omis, le champs est positif)
'Optional Etendue As String : Si le champs n'est pas numérique, on peut 
'restreindre la saisie aux caractères contenus dans Etendue
'Par exemple : Etendue = "AZERTYiopmlk", seules ces lettres seront permises

Public Sub SaisieText(TxtChamps As Control, ByVal KeyAscii As Integer _
           , ByVal Numerique As Boolean, Optional ByVal Negatif As Boolean, _

             Optional ByVal Etendue As String)
   Dim Position As Long
   Dim Nombre As Single
   Dim SeparateurDecimal As String
   'Definition du séparateur décimal défini dans le panneau de configuration
   Nombre = Val("1.1")
   SeparateurDecimal = Mid(Nombre, 2, 1)
   'Definition de l'action de la touche "Retour arrière"
   If KeyAscii = 8 Then
      TxtChamps.SelText = ""
      Position = TxtChamps.SelStart
      If Position <> 0 Then
         Select Case True
           Case Position = 1 And Len(TxtChamps.Text) > 1
                TxtChamps.Text = Mid(TxtChamps.Text, 2)
           Case Position = Len(TxtChamps.Text)
                TxtChamps = Left(TxtChamps.Text, Position - 1)
           Case Else
                TxtChamps.Text = Left(TxtChamps.Text, Position - 1) & _
                  Mid(TxtChamps.Text, Position + 1)
          End Select
          TxtChamps.SelStart = Position - 1
       End If
      Exit Sub
   End If
   ' Si le champs est numérique
   If Numerique Then
      Etendue = "0123456789" & SeparateurDecimal
      If Negatif Then Etendue = Etendue & "-"
      If Chr(KeyAscii) = "." Then KeyAscii = Asc(SeparateurDecimal)
      If Chr(KeyAscii) = "," Then KeyAscii = Asc(SeparateurDecimal)
      If InStr(Etendue, Chr(KeyAscii)) = 0 Then Exit Sub
      If Chr(KeyAscii) = SeparateurDecimal And _
         InStr(TxtChamps.Text, SeparateurDecimal) <> 0 And _
         InStr(TxtChamps.SelText, SeparateurDecimal) = 0 Then Exit Sub
      If Chr(KeyAscii) = "-" And TxtChamps.SelStart <> 0 Then Exit Sub
      If Chr(KeyAscii) = "-" And InStr(TxtChamps.Text, "-") <> 0 And _
         InStr(TxtChamps.SelText, "-") = 0 Then Exit Sub
      TxtChamps.SelText = Chr(KeyAscii)
   Else
      If InStr(Etendue, Chr(KeyAscii)) <> 0 Then TxtChamps.SelText = Chr(KeyAscii)
   End If
End Sub

Conclusion :


Le code ci après est valable pour tout contrôle qui gère l'évenement KeyPress ainsi que les propriétés SelText, SelStart ...

A voir également

Ajouter un commentaire

Commentaires

cs_vero
Messages postés
4
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
7 janvier 2002
-
Merci pour ce code il est bien pratique
cs_TheGo
Messages postés
12
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
24 mai 2004
-
C vraiment pratique ...
En plus mit dans un moduel ca peut servir pour tout le projet, c vraiment trop cool :)
Merci
martyrs
Messages postés
3
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
9 décembre 2003
-
simple et efficace : j'ai pas trouvé mieux pour gérer un textbox
forchi
Messages postés
33
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
24 mai 2008
-
Trés bien, merci... :)
bensalahfatma
Messages postés
2
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
30 janvier 2008
-
c'est bien merci

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.