Contrôle saisie pour toute TextBox

Résolu
ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -
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

1 réponse

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. ed555 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention  
       
      Super, merci beaucoup pour cette réponse rapide et efficace pijaku !
      0