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

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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Ca roule ??

      En effet, mais ne sachant pas si les noms de textboxs sont adkoite, j'ai seulement repondu a la demande car 90 textbox ca compte pour les doigts
      0