Copier dynamiquement les contrôles d'une page de Multipage
Bonjour à tous,
Je prépare une appli Excel de cahier d'entraînement en musculation, mais je bloque sur une fonctionnalité qui m'oblige à me pencher sur les modules de classe. Mon problème est le suivant :
Dans l'UserBox d'édition des séances, sur la première page du Multipage répertoriant les exercices, la ListBox "Exercices" se remplit en fonction du muscle choisi dans une ComboBox, en allant chercher les exercices correspondant, créés au préalable sur une autre feuille. Lorsque je rajoute une page au Multipage, j'arrive à faire en sorte que les contrôles soient copiés, et même à remplir la nouvelle ComboBox du choix de muscle, mais pas la ListBox des exercices. (Je vous invite à regarder le fichier joint pour plus de clarté).
En recyclant des infos trouvées ça et là sur internet, j'ai pensé à créer un module de classe mais rien n'y fait, la ListBox reste vide.
Merci d'avance pour vos suggestions !
Voci le code de l'UserBox :
Private Sub UserForm_Initialize()
'Attribue la collection à la variable "Collect".
Set Collect = New Collection
End Sub
'Détecte l'ajout de contrôle dans le multipage.
Private Sub MultiPage1_AddControl(ByVal Index As Long, ByVal Control As MSForms.Control)
Dim Cl As Classe1
'Vérifie si le contrôle est une ComboBox.
If TypeOf Control Is MSForms.ComboBox Then
'Ajoute l'objet dans la classe.
Set Cl = New Classe1
Set Cl.CbBox = Control
Collect.Add Cl
End If
End Sub
'Evenement "Avant la Fermeture" du UserForm.
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Libère l'espace mémoire.
Set Collect = Nothing
End SubLe code de la Classe1 :
Option Explicit
Public WithEvents CbBox As MSForms.ComboBox
'Pour gérer l'évènement change des objets type ComboBox.
Private Sub CbBox_Change()
Dim ctrl As MSForms.Control
Dim muscle As String, ligne_premier_exo As Integer, ligne_dernier_exo As Integer
muscle = CbBox.Value
ligne_premier_exo = Sheets("Liste et création d'exercices").Range("G9:G1048576").Find(muscle, LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext).Row + 1
ligne_dernier_exo = Sheets("Liste et création d'exercices").Range("G9:G1048576").Find(muscle,
LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious).Row
For Each ctrl In UserForm2.MultiPage1.Pages(UserForm2.MultiPage1.Value).Controls
If TypeOf ctrl Is MSForms.ListBox Then
ctrl.Clear
For i = ligne_premier_exo To ligne_dernier_exo
ctrl.AddItem Sheets("Liste et création d'exercices").Cells(i, 4)
Next
End If
Next
End SubEt le module pour la collection :
Option Explicit
Public Collect As CollectionMerci beaucoup ! ça marche.
Réponse rapide en plus...
Je vais essayer de comprendre où se cache le détail qui fait la différence.