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 ...
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.