IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Listes déroulantes dépendantes [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Avril 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2015
    Messages : 13
    Par défaut Listes déroulantes dépendantes
    Bonjour le Forum,
    Je débute mais j'avance quand même !!
    J'ai petit problème : j'ai un tableau de ce type :
    1	2	3	4	6	8	10	12	15
    SB	SB	SB	SB	DA	DA	DA	DA	DA
    SBX	SBX	SBX	SBX	DAX	DAX	DAX	DAX	DAX
    Gril	SC	SC	SU	PAD	PAD	PAD	UA	UA
    	SCX	SCX	SUX	PADX	PADX	PADX	UDA	UDA
    	SU	Gril	UXQ	SB	UA	UA	UXA	Gril
    	SUX		Gril	SBX	UDA	UDA	Gril	
    	UXA			SU	UXA	UXA		
    	Gril			SUX	Gril	Gril		
    				UXA				
    				Gril				
    J'ai créé sur une userform 20 listes déroulantes : 10 pour les données de la lignes contenant 1,2,3,4,...,12,15 et 10 pour les données correspondantes.
    Pour chaque liste, il y a en a 10 : les premières se nomment DIAM1, DIAM2, ... DIAM10
    Les deuxièmes TYP_MW1, TYP_MW2,... TYP_MW10
    Je voudrai, en fonction du choix de cette liste, l'autre contiendra que les éléments correspondants. Par exemple, pour 1 ce ne sera que SB, SBX et Gril.

    Je voudrai avoir le code VBA pour cela.

    Merci d'avance.

    Cordialement.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Une piste avec la démarche suivante
    1) Créez un UserForm1 avec une ListBox1 et une ListBox2
    2) Copiez le code suivant dans la fenêtre de code du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Dim S As Worksheet
     
    Private Sub ListBox1_Click()
    Dim R As Range
    Dim var
    Dim LastLig&
    Dim Col&
    '---
    Col& = ListBox1.ListIndex + 1
    LastLig& = S.Cells(Application.Rows.Count, Col&).End(xlUp).Row
    Set R = S.Range(S.Cells(2, Col&), S.Cells(LastLig&, Col&))
    var = R
    ListBox2.List = var
    End Sub
     
    Private Sub ListBox2_Click()
    MsgBox ListBox2
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim var
    Dim Col&
    '---
    Set S = Sheets("Feuil2")
    Col& = S.Cells(1, Application.Columns.Count).End(xlToLeft).Column
    var = S.Range(S.Cells(1, 1), S.Cells(1, Col&))
    ListBox1.List = Application.WorksheetFunction.Transpose(var)
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Avril 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2015
    Messages : 13
    Par défaut Ca marche !!
    Excellent PMO2017, ça marche. On peut même remplacer les Listbox par des Combobox !!

    Merci beaucoup

  4. #4
    Membre averti
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Avril 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2015
    Messages : 13
    Par défaut Même chose mais avec une boucle
    Re bonjour,

    Maintenant la même chose mais avec une boucle (for ... to). C'est à dire plusieurs entrées et plusieurs sorties correspondantes.
    Voir le fichier joint.

    Comment écrira-t-on le code ?

    Merci.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Maintenant la même chose mais avec une boucle (for ... to). C'est à dire plusieurs entrées et plusieurs sorties correspondantes.
    Bonjour,

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Dim S As Worksheet
     
    Private Sub ListBox1_Click()
    Call CreeListeOutput(ListBox1)
    End Sub
     
    Private Sub ListBox3_Click()
    Call CreeListeOutput(ListBox3)
    End Sub
     
    Private Sub ListBox5_Click()
    Call CreeListeOutput(ListBox5)
    End Sub
     
    '########
    Private Sub ListBox2_Click()
    MsgBox ListBox2
    End Sub
     
    Private Sub ListBox4_Click()
    MsgBox ListBox4
    End Sub
     
    Private Sub ListBox6_Click()
    MsgBox ListBox6
    End Sub
     
    '#######
    Private Sub UserForm_Initialize()
    Dim i&
    '---
    For i& = 1 To 5 Step 2
      Call CreeListeInput(Me.Controls("ListBox" & i& & ""))
    Next i&
    End Sub
     
    '#######
    Private Sub CreeListeInput(LB As MSForms.ListBox)
    Dim var
    Dim Col&
    '---
    Set S = Sheets("Feuil2")
    Col& = S.Cells(1, Application.Columns.Count).End(xlToLeft).Column
    var = S.Range(S.Cells(1, 1), S.Cells(1, Col&))
    LB.List = Application.WorksheetFunction.Transpose(var)
    End Sub
     
    Private Sub CreeListeOutput(LB As MSForms.ListBox)
    Dim R As Range
    Dim var
    Dim LastLig&
    Dim Col&
    Dim i&
    Dim A$
    '---
    Col& = LB.ListIndex + 1
    LastLig& = S.Cells(Application.Rows.Count, Col&).End(xlUp).Row
    Set R = S.Range(S.Cells(2, Col&), S.Cells(LastLig&, Col&))
    var = R
    '---
    For i& = 1 To Len(LB.Name)
      If IsNumeric(Mid(LB.Name, i&, 1)) Then
        A$ = A$ & Mid(LB.Name, i&, 1)
      End If
    Next i&
    '---
    Me.Controls("ListBox" & CLng(A$) + 1 & "").List = var
    End Sub
    Si vous avez une pléthore de ListBoxes, il conviendrait d'utiliser une Classe.
    Mais c'est moins intuitif et cela demande un niveau bien supérieur à celui de débutant.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre averti
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Avril 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2015
    Messages : 13
    Par défaut
    Merci beaucoup, ça marche bien. On y arrivera.

    ET comment feriez vous ça avec des Combobox au lieu de ListBox ?
    En fait, j'ai dix choix à faire (10 Combobox) qui doivent chercher les diamètres et donner les modèles correspondants.
    J'ai repris votre fichier en remplaçant les ListBox par des Combobox, ça marche quand il y a une seule, mais avec une boucle, ça ne marche pas.
    Merci
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Zone de liste déroulante dépendante et sous-formulaire
    Par Philosophine dans le forum Access
    Réponses: 6
    Dernier message: 24/10/2006, 23h41
  2. Réponses: 2
    Dernier message: 15/09/2006, 20h03
  3. Réponses: 3
    Dernier message: 30/06/2006, 23h56
  4. Réponses: 4
    Dernier message: 17/03/2006, 15h39
  5. Liste déroulante dépendante
    Par nanas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2005, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo