liste déroulante dans userform
#1
Aspirant XLPages

Inscription: 13/04/2010

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
excel 2007
Posté le : 13-04-2010 10h47
Bonjour,
 
J'ai vu que cette question avait souvent été abordé mais je n'ai pas trouvé de réponse qui correspondent a ce que je cherche!
 
J'ai créée une userform (on appuis sur un "+" dans mon tableur et elle s'affiche) et j'aimerai créer deux liste déroulante dans cette UF, les 2 listes utiliseraient une base de données (déjà créée).
 
Plus précisement, la 1ère liste déroulante s'appelle "Marque" et la 2ème "Modèle", en fonction de la marque choisi, différents modèle doivent s'afficher. Une fois la marque et le modèle choisi, le nom du modèle doit être reporté dans une case de ma feuille.
 
 
Merci d'avance

PS: ci-joint, un exemple de ce que je cherche à avoir, cliquer sur le "+" pour une vision d'ensemble de ce que je veux obtenir, il me manque juste les 2 listes déroulantes en fait :x


Pièce jointe:
xls Classeur1.xls   [ Taille: 47.50 Ko - Téléchargements: 1495 ]
Edité par vodkaddict le 13/04/2010 15:52:31
Hors Ligne
Rapport   Haut 

Re: liste déroulante dans userform
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 13-04-2010 13h31
Bonjour vodkaddict, bienvenue sur XLpages,
Bonjour le Forum,

Si j'ai bien compris la question, tu trouveras en pièce jointe une façon de faire pour ton problème (sans remettre en cause la structure de ta base de données).

J'ai utilisé le code VBA suivant (repris de ce Post du forum et à peine modifié pour l'occasion ).

Option Explicit
' myDearFriend!  -  www.mdf-xlpages.com
'La sélection du ComboBox1 (données colonne B) définit le contenu du ComboBox2 (données colonne 1)

Dim TabTemp As Variant

Private Sub UserForm_Initialize()
Dim L As Long
    'Mémorise les données dans un tableau variant temporaire
    With Sheets("Feuil1")
        L = .Cells(.Rows.Count, 1).End(xlUp).Row
        TabTemp = .Range(.Cells(2, 1), .Cells(L, 3)).Value
    End With
    'Remplir ComboBox1
    RemplirCbo 1, ""
End Sub

Private Sub ComboBox1_Change()
    'Remplir Combo2
    RemplirCbo 2, ComboBox1.Text
End Sub

Private Sub RemplirCbo(Id As Byte, T As String)
'myDearFriend!  -  www.mdf-xlpages.com
Dim Col As New Collection   'gestion doublons
Dim Cbo As Control
Dim L As Long
    'RAZ ComboBox
    For L = 2 To Id Step -1
        Controls("Combobox" & L).Clear
    Next L
    'MAJ ComboBox (sans doublon)
    Set Cbo = Controls("Combobox" & Id)
    For L = 1 To UBound(TabTemp, 1)
        If TabTemp(L, 2) <> "" Then 'Pour éviter les lignes de titre
            If Id = 1 Then  'Pour la première ComboBox
                TabTemp(L, 3) = 1
                On Error Resume Next
                Col.Add TabTemp(L, 2), CStr(TabTemp(L, 2))
                On Error GoTo 0
                If Col.Count > Cbo.ListCount Then Cbo.AddItem TabTemp(L, 2)
            Else            'Pour la suivante
                If TabTemp(L, Id) = T Then
                    If TabTemp(L, 3) = 1 Then
                        On Error Resume Next
                        Col.Add TabTemp(L, 1), CStr(TabTemp(L, 1))
                        On Error GoTo 0
                        If Col.Count > Cbo.ListCount Then Cbo.AddItem TabTemp(L, 1)
                    End If
                End If
            End If
        End If
    Next L
End Sub

Private Sub CommandButton1_Click()
    MsgBox "Modèle choisi = " & ComboBox2.Text
    Unload UserForm1
End Sub
Attention, cela nécessite à minima que toutes le lignes de la base soient correctement complétées : j'ai rectifié la cellule B11 par exemple.

J'espère que ça peut te rendre service.

Cordialement,
Pièce jointe:
zip ComboCascadePourVodkaddict.zip   [ Taille: 18.75 Ko - Téléchargements: 2010 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: liste déroulante dans userform
#3
Aspirant XLPages

Inscription: 13/04/2010

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
excel 2007
Posté le : 13-04-2010 14h27
 Woh :O!

Merci, je ne m'attendais a obtenir si complète en si peu de temps!!

Je te remercie, c'est vraiment du bon boulot, pour moi complètement novice en la matière j'avoue que je suis stupéfait ^^.

Il me reste plus qu'a trouver comment retourner la valeur du modèle choisi dans une case du tableau et a adapter ceci à toute ma base de donnée ^^


Encore merci :)
Hors Ligne
Rapport   Haut 

Re: liste déroulante dans userform
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 13-04-2010 15h02
Re,

Si la réponse te convient, merci de mettre en pratique ce qui est indiqué au bas de ma signature (voir le lien).
N'hésite pas à revenir au besoin (en créant un autre sujet, c'est selon)

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: liste déroulante dans userform
#5
Aspirant XLPages

Inscription: 13/04/2010

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
excel 2007
Posté le : 14-04-2010 17h29
Re-bonjour,

Pourrais tu m'expliquer comment tu fais pour choisir quelles colonnes vont être utilisées? J'avoue ne pas avoir bien saisi cette partie. Je vois comment tu fais pour savoir à quelle ligne va commencer la sélection ma comment tu définis quelle colonne!

et si possible, tu pourrais me dire comment faire si je veux le faire sur plus de colonnes ?

Merci d'avance
Hors Ligne
Rapport   Haut 

Re: liste déroulante dans userform
#6
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 14-04-2010 19h20
Re vodkaddict,

A vrai dire, je ne sais comment t'expliquer au mieux le fonctionnement de ce bout de code, mais je vais quand même essayer de répondre à ton interrogation concernant les colonnes...

Globalement, cette macro prend pour base un tableau variant que j'ai nommé TabTemp() :

- On stocke l'ensemble des valeurs de la base de données, dans ce tableau variant temporaire à 2 dimensions : une dimension pour l'indice de ligne et une autre dimension pour l'indice de colonne. On manipule ce tableau variant de la même façon que la plage de cellules correspondante : TabTemp(Ligne, Colonne)
- J'intègre également dans ce tableau une colonne supplémentaire qui va me permettre de stocker une valeur de test.

Dans mon post précédent, je t'ai mis le lien sur la discussion d'origine de cette macro. Si tu observes le code original et le fichier correspondant, je pense que tu serais plus à même d'en comprendre le fonctionnement.
Les données étaient, en particulier, classée de façon logique : la catégorie principale en première colonne sur la gauche, puis les catégories, sous-catégories et sous-sous catégories sur chaque colonne vers la droite. C'est comme si tu créais un arbre hiérarchique en fait... La macro et donc le tableau TabTemp() tenaient compte de cette hiérarchie à plusieurs niveaux avec toujours une colonne ajoutée à la fin pour stocker ma valeur de test.

Dans ton cas, j'ai simplifié puisqu'on n'a plus qu'un seul niveau hiérarchique à gérer, mais à l'envers : la catégorie principale en colonne 2 (B) et une seule sous-catégorie dépendante en colonne 1 (A). TabTemp() stocke donc toutes les valeurs présentes en colonne A (indice 1) et B (indice 2), plus une colonne supplémentaire (indice 3) pour test.

J'ai donc simplement remplacé les variables d'indice de colonne utilisées dans la macro d'origine par les constantes 1 ou 2 (et voire 3 pour le test).

Par exemple, quand j'écris :
If TabTemp(L, 3) = 1 Then ...
... je teste si la valeur stockée en ligne L et colonne 3 (colonne de test) contient bien le chiffre 1.

Désolé de ne pouvoir être plus clair, mais je te recommande vivement d'analyser le fichier et le code VBA du fil de discussions mis en lien précédemment et en particulier si tu veux l'utiliser sur plus de colonnes.

Cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: liste déroulante dans userform
#7
Aspirant XLPages

Inscription: 13/04/2010

Messages: 29

Système d'exploitation:
PC
Version Excel utilisée:
excel 2007
Posté le : 15-04-2010 11h30
Merci à toi, je viens de comprendre comment tu avais fait ^^

Cela m'a bien aidé! :)
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes