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 :

Liste déroulante variable dépendant d'une autre liste déroulante [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut Liste déroulante variable dépendant d'une autre liste déroulante
    Bonjour à tous,

    Tout d'abord je tiens à m'excuser si le titre n'est pas très clair, mais je n'ai pas trouvé meilleur titre à vrai dire. Je vais donc vous préciser la situation en vous partageant dans un premier temps le code que je souhaite utiliser (et qui donc ne fonctionne pas) :

    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
    Sub TestLR()
        Dim Plage_Listes As Range
        Dim Liste As String
        Dim Region As String
     
        Region = Worksheets("Résumé").Range("B2")
        Set Plage_Listes = Worksheets("Résumé").Range("A2")
     
        Select Case Region
            Case "Nord-Est"
                Liste = "TOTAL, Ville 1, Ville 2, Ville 3, Ville 4"
            Case "Île-de-France"
                Liste = "TOTAL, Ville 1, Ville 2, Ville 3, Ville 4, Ville 5"
            Case "Ouest"
                Liste = "TOTAL, Ville 1, Ville 2, Ville 3, Ville 4, Ville 5, Ville 6, Ville 7, Ville 8"
            Case "Sud-Est"
                Liste = "TOTAL, Ville 1, Ville 2, Ville 3"
            Case "Sud-Ouest"
                Liste = "TOTAL, Ville 1, Ville 2"
        End Select
    End Sub
    En cellule B2 se trouve une liste déroulante "Région" qui est composée de chacun des "Case" du code ci-dessus. J'aimerai que lorsque que je choisis l'une des 5 régions, la "Liste" soit mise à jour automatiquement.

    Quel type d'objet dois-je utiliser ? J'ai cru voir qu'il y avait ComboBox et ListBox mais je dois avouer ne pas bien cerner la différence.

    Merci d'avance !

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Révèr, bonjour le forum,

    J'ai compris que B2 tu as une liste déroulante et qu'en fonction de l'élément choisi dans cette liste, tu veux définir une autre liste déroulante. Mais ce que je n'ai pas compris c'est quelle (ou quelles) cellules(s) allai(en)t contenir cette nouvelle liste déroulante ?!...

    [Édition]
    Un code pour C2 :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Liste As Variant
    Dim L As String
     
    If Target.Address <> "$B$2" Then Exit Sub
    Select Case Target.Value
        Case "Nord-Est"
            Liste = Array("TOTAL", "Ville 1", "Ville 2", "Ville 3", "Ville 4")
        Case "Île-de-France"
            Liste = Array("TOTAL", "Ville 1", "Ville 2", "Ville 3", "Ville 4", "Ville 5")
        Case "Ouest"
            Liste = Array("TOTAL", "Ville 1", "Ville 2", "Ville 3", "Ville 4", "Ville 5", "Ville 6", "Ville 7", "Ville 8")
        Case "Sud-Est"
            Liste = Array("TOTAL", "Ville 1", "Ville 2", "Ville 3")
        Case "Sud-Ouest"
            Liste = Array("TOTAL", "Ville 1", "Ville 2")
    End Select
    L = Join(Liste, ",")
    With Range("C2").Validation
        .Delete
        .Add xlValidateList, Formula1:=L
    End With
    End Sub

  3. #3
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Est-ce que j'ai bien compris :
    Tu as une liste déroulante en B2 qui contient tes régions et une autre en A2 qui contient des villes en fonction de la région sélectionnée en B2

    Si j'ai bien compris le plus simple, sur une feuille, est de faire ces listes déroulantes (en cascade) par des listes de validation plutôt que d'utiliser les ComboBox et ListBox qui eux sont souvent utilisé dans les UserForms

    Je te joints un exemple.

    Liste_filtree par validation.xlsm

    Sinon concernant ta demande d'éclaircissement entre ComboBox et ListBox. La listBox est utile lorsque l'on a besoin de sélectionner plusieurs éléments (liste de collaborateurs pour un projet par exemple)
    exemple joint

    Selec_Multi_par_ListBox.xlsm

  4. #4
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour à vous deux, et merci pour vos réponses :

    J'ai compris que B2 tu as une liste déroulante et qu'en fonction de l'élément choisi dans cette liste, tu veux définir une autre liste déroulante. Mais ce que je n'ai pas compris c'est quelle (ou quelles) cellules(s) allai(en)t contenir cette nouvelle liste déroulante ?!...
    J'ai en effet oublié de préciser ce détail. C'est dans la cellule A2 que se situera la Liste Déroulante contenant les villes (donc variable en fonction de la liste déroulante des Régions en B2)

    Est-ce que j'ai bien compris :
    Tu as une liste déroulante en B2 qui contient tes régions et une autre en A2 qui contient des villes en fonction de la région sélectionnée en B2
    C'est exactement ça ! Néanmoins, il m'est impossible d'ouvrir des classeurs contenant des macro (sécurité de l'entreprise où je travaille). Je vais regarder les codes

    Je regarde vos réponses de suite et vous tient au courant de l'avancement ! Merci à vous

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Néanmoins, il m'est impossible d'ouvrir des classeurs contenant des macro (sécurité de l'entreprise où je travaille).
    Ah désolé voici les capture écran de tout

    (c'est ultra simple pour que ce soit compréhensible)

    Nom : list multi 01.JPG
Affichages : 1392
Taille : 151,5 Ko

    D1 et G1 sont des listes déroulantes
    Le bouton ne fait qu'appeler la macro : Macro()

    Nom : list multi 02.JPG
Affichages : 1340
Taille : 41,1 Ko

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    J'aurais pu automatiser pour que la liste se génère automatiquement dès le changement de classe mais avec le bouton tu vois bien chaque étape de la création de la liste

  7. #7
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    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
    Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$A$2" Or Target.Address = "$B$5" Then
            Call MAJ_R
            Call LastP
     
            If Right(Worksheets("Résumé").Range("B5"), 4) = Right(Worksheets("BUDGET").Range("B1"), 4) Then
                Call TestMAJ
            Else
                'Si l'année est différente, les feuilles 3 à 7 ne correspondant plus à la bonne année sont remplacées'
                Call MAJ_DIFF
                Call MAJ_R
            End If
        Else
            If Target.Address = "$B$2" Then
                Worksheets("Résumé").Range("A2").Value = ""
                Call TestLR
                Exit Sub
            End If
        End If
    End Sub
    Alors, le Sub "TestLR" - donc les codes que vous m'aviez conseillés, fonctionnent parfaitement. Je vous le mets plus bas. Mais ici j'ai encore un problème, il se trouve que lorsque je modifie B2, j'ai tout de même la procédure "TestMAJ" qui est appelée, alors qu'elle n'est censée ne s'effectuer que s'il y a un changement dans la cellule A2 ou B5. Est-il du coup possible de faire en sorte que le "Worksheet_Change" ne prenne pas effet lorsque je mets la valeur A2 à "" ?

    En résumé, je souhaiterai que lorsque l'utilisateur change de région à travers la liste déroulante en B2, cela réinitialise la valeur en A2 SANS que la première partie du Worksheet_Change (concernant A2 en Target) ne prenne effet. Est-il donc possible de "forcer" VBA à ne pas effectuer un Worksheet_Change ?

    J'espère que ma question est claire

    Voici le code la procédure TestLR

    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
    Sub TestLR()
        Dim Region As String
        Dim Liste As Variant
        Dim L As String
     
        Region = Worksheets("Résumé").Range("B2")
     
        Select Case Region
            Case "Nord-Est"
                Liste = Array("TOTAL, Ville 1, Ville 2, Ville 3, Ville 4")
            Case "Île-de-France"
                Liste = Array("TOTAL, Ville 1, Ville 2, Ville 3, Ville 4, Ville 5")
            Case "Ouest"
                Liste = Array("TOTAL, Ville 1, Ville 2, Ville 3, Ville 4, Ville 5, Ville 6, Ville 7, Ville 8")
            Case "Sud-Est"
                Liste = Array("TOTAL, Ville 1, Ville 2, Ville 3")
            Case "Sud-Ouest"
                Liste = Array("TOTAL, Ville 1, Ville 2")
        End Select
        L = Join(Liste, ",")
        With Range("A2").Validation
            .Delete
            .Add xlValidateList, Formula1:=L
        End With
    End Sub

  8. #8
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    OK ! Je viens de trouver une alternative. Il existe une valeur commune à toutes les listes, la valeur "TOTAL". Je force donc la cellule A2 à prendre cette valeur-là. La liste déroulante se met du coup à jour sur cette valeur commune. Cela me permet ainsi d'éviter de me retrouver avec Bordeaux dans le Nord-Est !

    Il me reste néanmoins un dernier détail à régler, mais pour cela je vais devoir attendre une réponse de mon responsable.
    Je vous remercie grandement pour votre aide !

  9. #9
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Pardon j'avais mal lu !... Autoeffaçage.

  10. #10
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Citation Envoyé par Thautheme Voir le message
    Re,



    Pourquoi des codes, alors, dans ton premier post ?!...
    Parce qu'il s'agit d'un document que j'ai créé sur une zone de travail. Il ne s'agit aucunement d'un fichier téléchargé. Nous avons par ailleurs chacun une adresse mail professionnelle liée à notre compte Office, je suppose que tout compte étranger doit être bloqué ? Je n'en ai aucune idée, mais le fait est que je ne peux accéder aux macros d'un fichier téléchargé.

  11. #11
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Fausse Alerte... J'ai fermé et rouvert Excel et ça fonctionne de nouveau.

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

Discussions similaires

  1. [AC-2007] liste déroulante dépendante d'une autre
    Par alex77140 dans le forum IHM
    Réponses: 2
    Dernier message: 30/06/2009, 13h22
  2. [A-07] Liste déroulante dépendante d'une autre
    Par Bravozulu dans le forum IHM
    Réponses: 3
    Dernier message: 07/11/2008, 16h25
  3. Perl : nom de variable dépendant d'une autre
    Par nicolaskarp dans le forum Langage
    Réponses: 9
    Dernier message: 06/08/2007, 03h05
  4. Réponses: 3
    Dernier message: 30/06/2006, 22h56
  5. Réponses: 12
    Dernier message: 03/04/2006, 19h08

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