VBA : Gestion d'évènement Userform dynamique

Bonjour à tous,

Voilà mon probleme, j'ai un Userform que je construis dynamiquement suivant le nombre d'items utilisé dans un onglet Excel ( en fait, je cré un formulaire dynamique ).

Dans ce formulaire, suivant certaines cases cochées, je bloque l'acces à certains TextBox à l'ouverture du Userform ( Initialisation ).

Mon probleme est que si je décoche ces cases, rien ne se passe : NORMAL !!

Je sais qu'on peut gérer ça en statique : Private sub TextBox1_Change ()

Mais comment proceder quand les TextBox sont multiples et que je ne connais pas leur nombre ( création en dynamique ) ??

Merci a tous pour votre aide... et bon week-end si je n'ai pas de réponse avant...
Configuration: Windows XP
Firefox 2.0.0.11

9 réponses

  • Votes
  • Date
  • Date décroissante
  1. Je viens de trouver réponse à ma question.
    Pour ceux que ca pourrait intéresser :
    https://silkyroad.developpez.com/VBA/VisualBasicEditor/#LV-A
    1. Excellent.

      Tu a perdu u peu de temps avec ces imbéciles qui te répondent sans savoir de quoi ils parlent; mais la solution que tu as trouvée toi-même est excellente, j'aurais répondu la même chose si j'avais lu à temps.

      Il faut en effet "Sub-classer" l'objet créé, dans une classe, déclarer l'évènement, etc. et après ça roule tout seul.

      -AS
    2. @AseghirMais bien sûr ... tu n'as pu eu le temps ... c'est cela ... il faut "Sub_classer" .... mouaarrrffff
  2. bonjour,

    Pour les créer :

    Dim myTextBox As Object
    Dim i As Long

    With UserForm1
    For i = 1 to nbCaseCochee
    set myTextBox = .controls.add("Forms.TextBox.1","le nom du TextBox" & i, true)
    ... < tu mets les propriétés du textbox : myTextBox.Top = ..., la hauteur, largeur etc ...>
    Next i
    End With

    ....

    pour les lire et mettre les données saisies dans les textboxes dans la colonne A de la première feuille du classeur par exemple:

    Dim myTextBox As Object
    Dim i As Long

    With UserForm1
    For i = 1 to nbCaseCochee
    set myTextBox = .controls("le nom du TextBox" & i)
    worksheets("Feuil1").Range("A" & i).Value = myTextBox
    Next i
    End With
    .....

    ;o)

    Polux
    1. faut choisir son identifiant intelligement, n'oublies pas que windows aussi arrive à les distinguer
      1. en vba tu peut écrire des trucs comm

        txtTest & i --> p.ex. txtTest1 si i = 1
        1. Je veux bien croire que c'est vendredi soir mais où t'as fumé ou c'est moi... JE NE COMPRENDS RIEN A CE QUE TU ME DIS.... Laisse tomber !!!!

          Bon week-end
          1. moi, c'est Super Pollem

            et je me demandes si Delphi ne serait pas mieux adapté à tes besoin. là c'est pas un pb d'attacher un event p.ex.
            par contre en vba ce n'est pas possible (à ma connaissance)
            1. Bonjour,
              Je me permets de ressortir ce sujet pour savoir s'il était possible de créer une fonction du type Change() sur un TextBox créé dynamiquemment.
              En statique cela donne :
              Private sub myTextBox_Change ()
              ... [mon code]
              End Sub

              Mais quand est-il du dynamique? Est-ce possible?

              Cordialement,
              Romain.
              1. Bof, Polux31. Ne pas avoir "lu *à* temps" devient dans votre imaginaire, "ne pas avoir eu le temps" ce qui est sémantiquement très différent. Ce qui se lit correctement se conçoit puis s'énonce correctement.
                - AS