Textbox numerique

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

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.