Formualire VBA Menu déroulant combinée à 3 niveau
Bonjour
J'ai besoin de créer différents outils de saisie pour mon activité
Initialement, j'avais créer un simple formulaire de saisie de produit en utilisant la commande INDIRECT , ca fonctionne parfaitement
Néanmoins, j'ai besoin par la suite de créer plusieurs formulaire et un tableau de bord. J'ai donc décidé de la faire via Userforms
J'ai commencer mon formulaire en utilisant Userforms mais je cale pour les menu déroulants.
J'ai besoin de filtrer les produits sur 3 critères : MARQUE ( Apple et Samsung, par exemple). GAMME (Iphone5_6, Iphone7_8, Gamme A, Gamme S, etccc), et ensuite Modele (iphone 5, iphone 6, iphone 7, iphone 8, A10, A20, S20, S21) le dernier champ (PIECE) est un menu qui n'a aucune interraction avec les 3 autres.
Je souhaite donc sélectionner la marque, suivant le choix que je fais, la Gamme correspondant a la marque apparait et même chose pour le modèle.
J'ai vu pas mal de vidéo sur le sujet mais ca concernait que 2 critères, pas vu de tuto ou de vidéos EXPLICITE sur 3 critères.
Si quelqu'un peut m'aider a démarrer (J'ai encore pas mal de Marque et gamme a implémenter par la suite mais si ca fonctionne avec ces 2 la, y aura plus qu'a développer pour le reste).
Ci joint le fichier de travail.
Il y a 3 onglet :
MENU : La ou il y aura tous les futurs formulaire.
GLOSSAIRE : Les données
CATALOGUE : la ou les données du formulaire s'implémenteront par la suite
Merci d'avance du temps que vous pourrez consacrer a m'aider.
Bonjour
Une proposition qui implique de renommer tous les tableau de la feuille "Glossaire" en fonction des listes que tu souhaites dans les combobox de choix.
En l'état ça bogue si tu clic sur un choix qui n'a pas de tableau correspondant. C'est normal puisque dans ce cas tu fais appel à un objet qui n'existe pas.
A mon sens l'avantage de ma solution par rapport à celle de fanfan38 c'est que tu peux ajouter ou enlever des marques, des catégorie ou des modèles sans toucher au code.
Bonjour Adi, bonjour le forum,
En restructurant l'onglet Glossaire (j'ai gardé le tien et renommé le mien Glossaire (2)), et en renommant les tableaux structurés, ça donne un code assez simple :
Private OG As Worksheet 'déclare la variable OG (Onglet Glossaire)
Private OC As Worksheet 'déclare la variable OC (Onglet Catalogue)
Private TS As ListObject 'déclare la variable TS (Tableau Structuré)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Set OG = Worksheets("Glossaire (2)") 'définit l'onglet OG (à adapter)
Set OC = Worksheets("Catalogue") 'définit l'onglet OC (ça te servira plus tard)
Me.cbopiece.List = OG.ListObjects("PieceTel").DataBodyRange.Value 'alimente cbopiece
End Sub
Private Sub cboMarque_Change() 'au changement dans cboMarque
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Me.cboGamme.Clear 'vide cboGamme
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
If Me.cboMarque.ListIndex <> -1 Then Set TS = OG.ListObjects(Me.cboMarque.Value) 'définit le tableau structuré TS (en fonction de la marque)
TV = TS.DataBodyRange 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 de TV
Next I 'prochaine ligne de la boucle
Me.cboGamme.List = Application.Transpose(D.keys) 'alimente cboMarque avec les éléments du dictionnaire D sans doublon (les clés)
End Sub
Private Sub cboGamme_Change() 'au changement dans cboGamme
Dim I As Integer 'déclare la variable I (Incrément)
Me.cboModele.Clear 'vide cboModele
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
'si la donnée ligne I colonne 1 de TV est égale à cboGamme, ajoute la donnée ligne I colonne 2 de TV à cboModele
If TV(I, 1) = Me.cboGamme.Value Then Me.cboModele.AddItem TV(I, 2)
Next I 'prochaine ligne de la boucle
End SubLe fichier :
[Édition]
Hou la ! Je navet pas rafraîchi et nos posts se sont croisés. Bonjour Yal_excel et Fanfan...
Super, merci beaucoup
Je vais pouvoir décrypter votre code a tout le monde et le répliquer pour les autres marque et modèle.
Merci encore, je me permettrais de revenir vers vous si je suis encore dans la panade.