Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Textbox exclusivement pour des chiffres

2 réponses
Avatar
lomer
Bonjour
dans un userform en Word, j'ai plusieurs Textbox qui servent à mettre des
chiffres. Chaque Textbox doit être prgrammé de la façon suivante :

Private Sub Textbox36_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' Si la valeur n'est pas comprise entre 0 et 9 et qu'elle n'est pas un
backspace
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8) Then
KeyAscii = 0 'on annule la pression sur la touche
Textbox36.Value = 0
End If
End Sub

Mais en raison du nombre de Textbox concerné (30) je me demandais s' il
n'existait pas une méthode (fonction) permettant de programmer tous les
Textbox en même temps. Quelque chose du genre For i = X to Y
Merci par avance de l'aide que vous pourrez me donner.

--
lomer

2 réponses

Avatar
Jacques93
Bonjour lomer,
Bonjour
dans un userform en Word, j'ai plusieurs Textbox qui servent à mettre des
chiffres. Chaque Textbox doit être prgrammé de la façon suivante :

Private Sub Textbox36_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' Si la valeur n'est pas comprise entre 0 et 9 et qu'elle n'est pas un
backspace
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8) Then
KeyAscii = 0 'on annule la pression sur la touche
Textbox36.Value = 0
End If
End Sub

Mais en raison du nombre de Textbox concerné (30) je me demandais s' il
n'existait pas une méthode (fonction) permettant de programmer tous les
Textbox en même temps. Quelque chose du genre For i = X to Y
Merci par avance de l'aide que vous pourrez me donner.



Comme en VBA il n'est pas possible d'indexer les contrôles, si tu peux
effectuer le contrôle à la fermeture du formulraire, et si tu n'utilise
pas la propriété Tag des textbox à d'autres fins, le code qui suit
devrai convenir :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim c As Control

For Each c In Me.Controls
If TypeOf c Is TextBox Then
If c.Tag = "N" And Len(c.Text) > 0 _
And c.Text <> CStr(Val(c.Text)) Then
MsgBox " Ce champ doit être numérique"
c.SelStart = 0
c.SelLength = Len(c.Text)
c.SetFocus
Cancel = True
Exit Sub
End If
End If
Next
End Sub


--
Cordialement,

Jacques.

Avatar
lomer
Merci cela pourrait effectivement convenir car je n'utilise pas le Tag.
je vais l'essayer au plus vite
--
lomer



Bonjour lomer,
Bonjour
dans un userform en Word, j'ai plusieurs Textbox qui servent à mettre des
chiffres. Chaque Textbox doit être prgrammé de la façon suivante :

Private Sub Textbox36_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' Si la valeur n'est pas comprise entre 0 et 9 et qu'elle n'est pas un
backspace
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8) Then
KeyAscii = 0 'on annule la pression sur la touche
Textbox36.Value = 0
End If
End Sub

Mais en raison du nombre de Textbox concerné (30) je me demandais s' il
n'existait pas une méthode (fonction) permettant de programmer tous les
Textbox en même temps. Quelque chose du genre For i = X to Y
Merci par avance de l'aide que vous pourrez me donner.



Comme en VBA il n'est pas possible d'indexer les contrôles, si tu peux
effectuer le contrôle à la fermeture du formulraire, et si tu n'utilise
pas la propriété Tag des textbox à d'autres fins, le code qui suit
devrai convenir :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim c As Control

For Each c In Me.Controls
If TypeOf c Is TextBox Then
If c.Tag = "N" And Len(c.Text) > 0 _
And c.Text <> CStr(Val(c.Text)) Then
MsgBox " Ce champ doit être numérique"
c.SelStart = 0
c.SelLength = Len(c.Text)
c.SetFocus
Cancel = True
Exit Sub
End If
End If
Next
End Sub


--
Cordialement,

Jacques.