Contrôle saisie pour toute TextBox

Résolu/Fermé
ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018 - 26 oct. 2018 à 12:24
ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018 - 26 oct. 2018 à 14:54
Bonjour le forum,

Je cherche à réaliser une routine qui contrôlerait la saisie de toute les TextBox d'un userform.

j'ai donc un module de classe appelé CEventClass qui contient ceci :

'These are declared WithEvents so the events are exposed to us
Public WithEvents tbxEvent As MSForms.TextBox

'This will fire for any control assigned to tbxEvent
Private Sub tbxEvent_Change()
MsgBox "ca marche"
End Sub


Et un module d'initialisation d'userform où je balaie tous les Controls de ma feuille et ajoute les TextBox à CEventClass :

Private Sub UserForm_Initialize()

Dim oControl As MSForms.Control

' je balaie tous les controls de l'userform
For Each oControl In Me.Controls

' si c'est une TextBox on l'ajoute à CEventClass
If TypeName(oControl) = "TextBox" Then

'tout se passe ici
Set txt = oControl '
'Set txt = oControl.Object '>> ne marche pas non plus

'ici rien à changer
Set clsEventClass = New CEventClass
Set clsEventClass.tbxEvent = txt
mEventTexts.Add clsEventClass ' >> ICI PLANTAGE

End If
Next oControl

End Sub


Je suis à deux doigts d'aboutir mais j'ai un message d'erreur "Variable object ou variable de bloc with non définie" au niveau de "mEventTexts.Add clsEventClass "

Je me suis inspiré de ce lien :
https://stackoverflow.com/questions/24558214/actions-for-multiple-similar-dynamically-created-command-buttons

Et la seule différence est au niveau de l'affectation de txt. Dans le lien ci-dessus, il crée la TextBox dynamiquement :
Set txt = Me.Controls.Add("Forms.TextBox.1", "FourthName")

Je sèche... Auriez-vous une idée ?
Toute suggestion est la bienvenue !

Grand merci par avance,
ed
A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
26 oct. 2018 à 12:33
Bonjour,

Si tous les TextBox sont créés "en dur", en mode création, le code de l'UserForm est :

Private Cl() As CEventClass

Private Sub UserForm_Initialize()
Dim Ctl As Control, i As Long
   For Each Ctl In Me.Controls
      If TypeOf Ctl Is MSForms.TextBox Then
         ReDim Preserve Cl(i)
         Set Cl(i) = New CEventClass
         Set Cl(i).tbxEvent = Ctl
         i = i + 1
      End If
   Next
End Sub


A titre personnel, je préfères déclarer une variable tableau (Cl() As CEventClass) plutôt qu'une collection.
1
ed555 Messages postés 61 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 26 octobre 2018
26 oct. 2018 à 14:54
Super, merci beaucoup pour cette réponse rapide et efficace pijaku !
0