Forcer la saisie numérique a un ensemble de textbox

Fermé
Coucouhib Messages postés 4 Date d'inscription samedi 20 août 2016 Statut Membre Dernière intervention 30 août 2016 - Modifié par pijaku le 31/08/2016 à 10:40
f894009 Messages postés 17191 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 mai 2024 - 31 août 2016 à 11:00
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

f894009 Messages postés 17191 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 mai 2024 1 707
31 août 2016 à 07:56
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
31 août 2016 à 10:57
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
f894009 Messages postés 17191 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 mai 2024 1 707
Modifié par f894009 le 31/08/2016 à 11:01
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