Menu

Contrôle saisie pour toute TextBox [Résolu]

Messages postés
61
Date d'inscription
vendredi 20 mai 2011
Dernière intervention
26 octobre 2018
- - Dernière réponse : ed555
Messages postés
61
Date d'inscription
vendredi 20 mai 2011
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
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
12245
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
2716
1
Merci
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.

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 58162 internautes nous ont dit merci ce mois-ci

ed555
Messages postés
61
Date d'inscription
vendredi 20 mai 2011
Dernière intervention
26 octobre 2018
2 -
Super, merci beaucoup pour cette réponse rapide et efficace pijaku !
Commenter la réponse de pijaku