[excel 2007 vba] Textbox saisie
florian
-
Polux31 Messages postés 7219 Statut Membre -
Polux31 Messages postés 7219 Statut Membre -
Bonjour,
J'ai un userform avec plusieurs textbox et je ne veux autoriser que la saisie de chiffre, avec des chiffres décimale aussi. J'ai bloqué pour que l'utilisateur ne puisse pas rentré plusieurs virgule dans la textbox mais quand j'inscrit un chiffre décimale dans la textbox que j'efface je ne peux plus inscrire un chiffre décimale.
Voici mon code:
Comment remédier à ce problème?
Merci pour vos réponses.
J'ai un userform avec plusieurs textbox et je ne veux autoriser que la saisie de chiffre, avec des chiffres décimale aussi. J'ai bloqué pour que l'utilisateur ne puisse pas rentré plusieurs virgule dans la textbox mais quand j'inscrit un chiffre décimale dans la textbox que j'efface je ne peux plus inscrire un chiffre décimale.
Voici mon code:
Private Sub TxtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "." Then
KeyAscii = 0 'on annule la pression sur la touche
End If
If Chr(KeyAscii) = "." Then
If Not virgule Then virgule = True Else KeyAscii = 0
End If
End Sub
Comment remédier à ce problème?
Merci pour vos réponses.
A voir également:
- [excel 2007 vba] Textbox saisie
- Save as pdf office 2007 - Télécharger - Bureautique
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
1 réponse
Bonjour,
La solution n'est pas de tester la saisie sur l'évènement KeyPress() mais sur l'évènement Change() du TextBox. Par exemple:
J'ai fait une fonction qui effectue le contrôle, ce qui permet d'effacer et de recommencer sans problème et de l'utiliser pour d'autres Textboxes le cas échéant.
;o)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
La solution n'est pas de tester la saisie sur l'évènement KeyPress() mais sur l'évènement Change() du TextBox. Par exemple:
Private Sub TextBox1_Change()
If CtrlSaisie(TextBox1.Text) = False Then
TextBox1.Text = Mid(TextBox1.Text, 1, Len(TextBox1.Text) - 1)
End If
End Sub
Public Function CtrlSaisie(ByVal str As Variant) As Boolean
Dim i As Long
Dim c As Variant
Dim trouve As Integer
trouve = 0
For i = 1 To Len(str)
c = Mid(str, i, 1)
If c = "," Then trouve = trouve + 1
Next i
If trouve > 1 Then
CtrlSaisie = False
Exit Function
End If
For i = 1 To Len(str)
c = Mid(str, i, 1)
If Not IsNumeric(c) And c <> "," Then
CtrlSaisie = False
Exit Function
End If
Next i
CtrlSaisie = True
End Function
J'ai fait une fonction qui effectue le contrôle, ce qui permet d'effacer et de recommencer sans problème et de l'utiliser pour d'autres Textboxes le cas échéant.
;o)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau