Forcer la saisie numérique a un ensemble de textbox
Coucouhib
Messages postés
4
Statut
Membre
-
f894009 Messages postés 17417 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17417 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,
2 réponses
-
Bonjour,
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 :
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