Forcer la saisie numérique a un ensemble de textbox
Coucouhib
Messages postés
4
Statut
Membre
-
f894009 Messages postés 17414 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17414 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je réalise actuellement un formulaire et je souhaiterai que seul des chiffres soient renseignés dans mes textbox.
j 'ai trouvé le programme suivant sur internet mais je n'arrive pas à l'étendre a l'ensemble des textbox (1 à 90).
Est ce que quelqu'un pourrait m'aider s'il vous plait ?
cordialement,
Je réalise actuellement un formulaire et je souhaiterai que seul des chiffres soient renseignés dans mes textbox.
j 'ai trouvé le programme suivant sur internet mais je n'arrive pas à l'étendre a l'ensemble des textbox (1 à 90).
Est ce que quelqu'un pourrait m'aider s'il vous plait ?
Private Function ChainePasOK(strpass As String) As Boolean
If strpass = "" Then Exit Function
If Len(Replace(strpass, ".", "")) <> Len(strpass) Then ChainePasOK = True: Exit Function
If Len(strpass) = 1 And InStr("1234567890", strpass) = 0 Then ChainePasOK = True: Exit Function
strpass = Replace(strpass, ",", ".")
If Len(CStr(Val(strpass))) <> Len(strpass) Then ChainePasOK = True
End Function
'vérifie la saisie de la textbox 1
Private Sub TextBox11_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim strpass As String
strpass = TextBox1.Value
If ChainePasOK(strpass) = True Then Cancel = True: TextBox1.Value = "": Beep: MsgBox "Saisie non valide !"
End Sub
cordialement,
A voir également:
- Obliger saisie numérique dans textbox vba
- Télévision numérique - Guide
- Télévision numérique terrestre - Accueil - TV & Vidéo
- Saisie gestuelle iphone - Guide
- Pavé numérique bloqué - Guide
- Clavier numérique bloqué - Guide
2 réponses
Bonjour,
Controlez l'entree plutot que le resultat:
Controlez l'entree plutot que le resultat:
Private Function KPressOK(KPress As Byte) As Boolean
Select Case KPress
Case 48 To 57 'chiffres de 0 a 9
KPressOK = True
Case Else
KPressOK = False
MsgBox "Entree de chiffres uniquement"
End Select
End Function
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim KPress As Byte
KPress = KeyAscii
If Not KPressOK(KPress) Then
KeyAscii = 0
End If
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim KPress As Byte
KPress = KeyAscii
If Not KPressOK(KPress) Then
KeyAscii = 0
End If
End Sub
Salut f894009,
Ou, plutôt que de se taper 90 Private Sub TextboxX_Keyppress, utiliser un module de classe.
Comme ceci :
Dans un module standard :
Dans un module de classe (nommé Classe1)
Dans l'événement Initialize (module de l'UserForm)
!!! A condition que les TextBox soient nommés : TextBox1, TextBox2, ..., TextBox90 :
Dans l'événement QueryClose (module de l'UserForm)
Ou, plutôt que de se taper 90 Private Sub TextboxX_Keyppress, utiliser un module de classe.
Comme ceci :
Dans un module standard :
Option Explicit Public mesTB() As New Classe1
Dans un module de classe (nommé Classe1)
Option Explicit
Public WithEvents cTBx As MSForms.TextBox
Private Sub cTBx_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or cTBx.SelStart > 0 And Chr(KeyAscii) = "-" _
Or InStr(cTBx.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
KeyAscii = 0
End If
End Sub
Private Function ChainePasOK(strpass As String) As Boolean
If strpass = "" Then Exit Function
If Len(Replace(strpass, ".", "")) <> Len(strpass) Then ChainePasOK = True: Exit Function
If Len(strpass) = 1 And InStr("1234567890", strpass) = 0 Then ChainePasOK = True: Exit Function
strpass = Replace(strpass, ",", ".")
If Len(CStr(Val(strpass))) <> Len(strpass) Then ChainePasOK = True
End Function
Dans l'événement Initialize (module de l'UserForm)
!!! A condition que les TextBox soient nommés : TextBox1, TextBox2, ..., TextBox90 :
Option Explicit
Private Sub UserForm_Initialize()
Dim i As Integer, Ctrl As Control
ReDim mesTB(90)
For i = 1 To 90
Set Ctrl = Me.Controls("TextBox" & i)
Set mesTB(i).cTBx = Ctrl
Next i
Set Ctrl = Nothing
End Sub
Dans l'événement QueryClose (module de l'UserForm)
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Erase mesTB
End Sub