Afficher un msgbox pour plusieurs textbox
Bonjour,
J'aimerais qu'un msgbox apparaissent "Le caractère saisi n'est pas valide" pour 27 TextBox quand on saisi une donnée autre qu'un chiffre.
Je précise que tout est dans un formulaire et rien ne doit apparaître dans les feuilles excel.
J'e cherche depuis plusieurs jours mais je n'arrive pas à régler le soucis. J'ai remarqué que le problème venait de : "Public Sub TextBox1" puisque cela fonctionne que pour la TextBox1 et quand je change et que je mets TextBox2 cela fonctionne seulement pour la TextBox2.
J'ai essayé de mettre "Public Sub Userform1" ou "Public Sub exemple"
Voilà mon code :
Public Sub TextBox1()
Dim i As Integer
For i = 1 To 27
Next i
For Each TextBox In i
If Not IsNumeric("TextBox" & i) Then
MsgBox "Le caractère saisi n'est pas valide"
End If
End Sub
Pouvez-vous m'aider s'il-vous-plait
Je vous remercie par avance
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Pour répondre à votre problème,
Etape 1
Créer un module de classe nommé par exemple Tbox avec le code suivant :
Option Explicit
'# Evénements pour zone de texte
Private WithEvents Txtbox As MSForms.TextBox
Public Property Set Obj_class(ByVal zone_texte As MSForms.TextBox)
Set Txtbox = zone_texte
End Property
Private Sub Txtbox_Change()
If Not IsNumeric(Txtbox.Value) Then MsgBox "Le caractère saisi n'est pas valide": Exit Sub
End SubEtape 2
Insérer ce code dans votre formulaire
Option Explicit
'définition variables du module
Dim TextBoxes As New Collection
Private Sub UserForm_Initialize()
Dim ctrl As Control
'création et stockage éléments de la classe TextBoxes
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then
'création de l'élément de la classe et stockage dans la collection TextBoxes
TextBoxes.Add Key:=ctrl.Name, Item:=New TBox
'affectation de l'objet TextBox à l'élément de la classe
Set TextBoxes(ctrl.Name).Obj_class = ctrl
End If
Next ctrl
End SubBonjour
Le problème dans tout cela, si tu as 27 textbox , le message n'indiquera pas sur quel textbox il y a problème.
Tu peux pas non plus envoyer un message "le textbox15 ou autre" n'est pas valide, car l'utilisateur va se demander de quoi tu parles...
Donc le mieux, même si cela te gave, c'est de mettre à chaque textbox cet évènement, ce qui empêchera l'utilisateur de saisir autre chose que des chiffres
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep
End SubBon courage