Module de classe pour alimenter ComboBox et TextBox

Bonjour,

Dans mon document j'ai un userform qui permet de sélectionner des noms dans des ComboBox et afficher automatiquement les fonctions correspondantes dans des TextBox.

Pour alléger le code j'ai créé un module de classe qui affiche à la suite et alimente les ComboBox et TextBox 2 à 8.

La liste de noms s'affiche correctement dans les ComboBox, mais je ne trouve pas le code qui permet d'alimenter les TextBox.

Autre question : le code suivant dans le module de classe :

GrSaisie.Parent("ComboBox" & no).RemoveItem GrSaisie.ListIndex

me permet de supprimer les doublons dans les noms sélectionnés, mais lorsque je veux faire une nouvelle saisie ou supprimer le nom, un message d'erreur s'affiche ("argument non valide")

Je vous remercie d'avance pour votre aide.

Bonjour EveN, bonjour le forum,

Tu as mis un fichier xlxs en pièce jointe donc sans VBA. Il nous faut le fichier xlsm pour pouvoir t'aider !...

Bonjour Thau Thème et merci pour ton message.

Voici le bon fichier.

Sincères salutations.

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...

Un grand merci Thau Thème pour ta réponse détaillée et tes explications.

A présent tous les TextBoxes se remplissement automatiquement!

Je suis très contente!

Maintenant je vais me pencher sur ta méthodologie pour la comprendre, et pouvoir progresser...

A bientôt!

Re,

C'est marrant car moi c'est ta méthode pour afficher les contrôles au fur et à mesure qui m'a paru très astucieuse. Pour moi tu avais fait le plus dur...

Rechercher des sujets similaires à "module classe alimenter combobox textbox"