Bonjour EveN, bonjour le forum,
• Code de l'UserForm1
Supprime ton code et remplace par :
Dim cmbN(1 To 7) As New ClasseSaisie
Private Sub UserForm_Initialize()
Dim I As Long
' Frame 1 : ajouter la liste des noms dans ComboBox
Set f = Sheets("Organigramme")
TV = f.Range("A1").CurrentRegion
Set Mondico2 = CreateObject("Scripting.Dictionary")
For I = 2 To UBound(TV, 1)
Mondico2(TV(I, 6) & " " & TV(I, 7)) = ""
Next I
For b = 1 To 7: Set cmbN(b).GrSaisie = Me.Frame1("ComboBox" & b): Next b
Me.Frame1.ComboBox1.List = Mondico2.keys
End Sub
• Code du Module1
Supprime ton code et remplace par :
Public f As Worksheet
Public TV As Variant
Sub affiche()
UserForm1.Show
End Sub
• Code du Module de Classe
Supprime ton code et remplace par :
Public WithEvents GrSaisie As MSForms.ComboBox
Private Sub GrSaisie_Change()
no = Val(Mid(GrSaisie.Name, 9)) + 1
For I = 2 To UBound(TV, 1)
If GrSaisie.Parent("ComboBox" & no - 1).Value = TV(I, 6) & " " & TV(I, 7) Then GrSaisie.Parent("TextBox" & no - 1) = TV(I, 5): Exit For
Next I
GrSaisie.Parent("ComboBox" & no).Visible = True
GrSaisie.Parent("ComboBox" & no).List = GrSaisie.List
GrSaisie.Parent("TextBox" & no).Visible = True
GrSaisie.Parent("ComboBox" & no).RemoveItem GrSaisie.ListIndex
End Sub
Explications :
L'utilisation d'une variable tableau de type Variant (TV) est beaucoup plus rapide d'exécution qu'un accès réel aux cellules de la même plage...
Les variable publiques du Module1 (f et TV) permettent de ne les définir qu'une seule fois à l'initialisation et de pouvoir les utiliser dans l'UserForm1 et dans le Module de Classe...
Tu n'avais écrit la mise à jour que pour la TextBox1 dans l'événement Change de la Combobox1. Je l'ai intégrée dans le Module de Classe. Désormais ça fonctionne tour toutes les TextBoxes...