Bonsoir Gigi,
J'essayais de te mettre en garde dans mon dernier message : ce que tu essaies de réaliser là, me paraît plus qu'aléatoire... La création de contrôles et code associé de façon dynamique est quelque chose de très délicat à mettre en oeuvre (pour moi en tout cas !). Par ailleurs, tu tentes de créer des contrôles dynamiques sur des contrôles déjà existant, ce qui va fragiliser davantage ton projet il me semble... Sauf erreur de ma part, ce que tu vas créer de façon dynamique (je pense aux lignes de code notamment), tu vas devoir le détruire ensuite pour ne pas provoquer un plantage par surcharge de code au prochain lancement...
Pour reprendre l'exemple précédent, j'imagine qu'il conviendrait d'écrire quelque chose comme ça dans un module de code :
'Variable de niveau module permettant de mémoriser la ligne à partir de laquelle le code est ajouté
Dim DebutAjoutLignes As Integer
'Pour la constrution des labels et le code associé
Sub Construction()
Dim AutreLabel As MSForms.Label
Dim L As Byte
Dim Lign As Integer
For L = 1 To 10
Set AutreLabel = UserForm1.Controls("Frame1").Add("forms.label.1")
With AutreLabel
.Caption = "MonLabel" & L
.Top = 10 * L
.Left = 10
End With
With ThisWorkbook.VBProject.VBComponents("UserForm1").CodeModule
Lign = .CountOfLines
If L = 1 Then DebutAjoutLignes = Lign
.InsertLines Lign + 1, "Private Sub Label" & L & "_Click()"
.InsertLines Lign + 2, " MsgBox ""Clic sur "" & Label" & L & ".Caption"
.InsertLines Lign + 3, "End Sub"
.InsertLines Lign + 4, "Private Sub Label" & L & "_DblClick(ByVal Cancel As MSForms.ReturnBoolean)"
.InsertLines Lign + 5, " MsgBox ""Double-clic sur "" & Label" & L & ".Caption"
.InsertLines Lign + 6, "End Sub"
End With
Next L
End Sub
'Pour détruire le code créé dynamiquement après traitement
Sub DestructionLignesCode()
Dim L As Integer
With ThisWorkbook.VBProject.VBComponents("UserForm1").CodeModule
For L = .CountOfLines To DebutAjoutLignes + 1 Step -1
.DeleteLines L
Next L
End With
End Sub
Voilà, j'espère que tu pourras tenter ta chance sur la base de ces quelques lignes, je ne pense malheureusement pas pouvoir t'aider davantage sur le sujet et je me permets de te le répèter : cette façon de faire ne me semble pas viable...
Bon courage toutefois.
Cordialement.
Didier_mDF