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 :

Création listes déroulantes [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Points : 44
    Points
    44
    Par défaut Création listes déroulantes
    Bonsoir, je fais appel à vous car je rencontre un petit problème en créant mon programme...
    J'ai réalisé plusieurs formulaires qui sont plus ou moins liés à des feuilles.L'une d'entre elles contient 4 colonnes indiquant des villes de passage(Ville1 en colonne A,Ville2 en colonne C,Ville1 en colonne E et Ville4 en colonne G) et 4 colonnes qui completent la ville par son complément d'adresse(Complément adresse ville1 en colonne B,Complément adresse ville2 en colonne D...).
    Je souhaiterais utiliser 2 comboboxs:
    -le premier me permettrait d'avoir une liste déroulante des villes de passage (4 colonnes sans doublon)
    -le second me donnerait une liste déroulante des compléments d'adresse en fonction de la ville de passage saisie dans le premier combobox(sans doublon)

    Vous trouverez, en pièce jointe, une feuille exemple.
    Merci d'avance

    AC
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    J'ai réalisé plusieurs formulaires qui sont plus ou moins liés à des feuilles
    J'apprécie beaucoup le "plus ou moins"
    Mais je ne vois pas le rapport avec la suite. Pourquoi ne disposes-tu pas toutes les villes sur la même colonne ?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Bonsoir,
    j'y ai pensé...
    je pense que je vais faire des xldown sur chaque colonne et les copier dans une même colonne...
    Maintenant si quelqu'un a une idée je suis preneur...

    Une autre question:
    je sais réaliser ma liste dans ma première combo qui liste toutes mes villes sans doublon mais quel codage dois-je faire pour avoir une liste déroulante qui est liée à la valeur saisie dans la première?

    Exemple:
    "Avenue FOCH";"Place pigalle"... pour "paris" saisie dans ma combo1

    Merci d'avance, je continue à chercher de mon coté

    Ac

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Avec les villes en colonne A et les adresses en colonne B; Remplissage de la combobox, dans le module "thisworkbook" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Workbook_Open()
        Dim Dico As Object, c As Range
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Feuil1")
            Sheets("Feuil1").ComboBox1.Clear
            For Each c In .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
                If Not Dico.exists(c.Value) Then
                    Dico.Add c.Value, c.Value
                    Sheets("Feuil1").ComboBox1.AddItem c.Value
                End If
            Next c
        End With
    End Sub
    et dans le module de la feuille "Feuil1" :

    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
    Private Sub ComboBox1_Change()
        Dim c As Range, txt As String
        ReDim Tabl(0)
        Ctr = -1
        With Sheets("Feuil1")
            For Each c In .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
                If c.Value = Me.ComboBox1.Value Then
                    txt = txt & "," & c.Offset(, 1).Value
                End If
            Next c
            txt = Right(txt, Len(txt) - 1)
        With .[H4].Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=txt
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
        End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Activate()
        Dim Dico As Object, c As Range
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Feuil1")
            Me.ComboBox1.Clear
            For Each c In .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
                If Not Dico.exists(c.Value) Then
                    Dico.Add c.Value, c.Value
                    Me.ComboBox1.AddItem c.Value
                End If
            Next c
        End With
    End Sub
    La liste déroulante est créée en H4.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Bonsoir,
    Merci beaucoup pour ton aide...mais en fait j'aimerais que cette liste déroulante s'affiche dans ma combo n°2 et non dans la feuille, je me suis ma exprimé...
    EX:
    combo 1 combo2 colonneA colonne B
    PARIS rue de titi DIJON Rue papa
    rue toto PARIS rue de titi
    LYON rue dodo
    PARIS rue toto


    En fait, là je suis dans le cas où j'ai séléctionné PARIS dans la combo 1 de mon furmulaire et il apparait dans la liste déroulante de la combo 2 "rue de titi" et "rue toto" issue des colonnes a et b de la feuille


    A moins que je fasse un xldown sur la colonne H après voir fait ton code?C'est ça?C'est possible

    Merci d'avance

    AC

    J'ai ajouté une photo exemple de mon application cela sera plus parlant...

    Encore merci...

    AC
    Images attachées Images attachées  

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j'aimerais que cette liste déroulante s'affiche dans ma combo n°2
    Ca simplifie le code

    Dans "Thisworkbook" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Workbook_Open()
        Dim Dico As Object, c As Range
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Feuil1")
            Sheets("Feuil1").ComboBox1.Clear
            For Each c In .Range(.[E2], .Cells(.Rows.Count, 5).End(xlUp))
                If Not Dico.exists(c.Value) Then
                    Dico.Add c.Value, c.Value
                    Sheets("Feuil1").ComboBox1.AddItem c.Value
                End If
            Next c
        End With
    End Sub
    Dans le module de la feuille "Feuil1" :

    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
    Private Sub ComboBox1_Change()
        Dim c As Range, txt As String
        ReDim Tabl(0)
        Ctr = -1
        Me.ComboBox2.Clear
        With Sheets("Feuil1")
            For Each c In .Range(.[E2], .Cells(.Rows.Count, 5).End(xlUp))
                If c.Value = Me.ComboBox1.Value Then
                    Me.ComboBox2.AddItem c.Offset(, 1).Value
                End If
            Next c
        End With
        Me.ComboBox2.ListIndex = 0
    End Sub
     
    Private Sub Worksheet_Activate()
        Dim Dico As Object, c As Range
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Feuil1")
            Me.ComboBox1.Clear
            For Each c In .Range(.[E2], .Cells(.Rows.Count, 5).End(xlUp))
                If Not Dico.exists(c.Value) Then
                    Dico.Add c.Value, c.Value
                    Me.ComboBox1.AddItem c.Value
                End If
            Next c
        End With
    End Sub
    N'hésite pas à poser des questions s'il y a quelque chose que tu ne comprends pas.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Bonjour, merci beaucoup pour ton aide....
    J'ai compris brièvement le code...mais ne dois-je pas mettre ce code dans le module du userform au lieu de feuill1?Car mes combos sont dans un formulaire nommé "saisiE" et non dans la feuille 1...

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Car mes combos sont dans un formulaire
    Merci de la précision mais tu aurais pu le dire plus tôt.

    Essaie d'adapter. Le code qui allait dans le module "ThisWorkbook" va maintenant
    dans "Private Sub UserForm_Activate", et tu peux supprimer la macro "Private Sub Worksheet_Activate()". Si tu rencontres des difficultés, n'hésite pas à le dire.

    Pour éliminer les doublons dans Combobox2, mets le code suivant dans le module de l'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
    Private Sub ComboBox1_Change()
        Dim c As Range, txt As String, Dico As Object
        Set Dico = CreateObject("Scripting.Dictionary")
        Me.ComboBox2.Clear
        With Sheets("Feuil1")
            For Each c In .Range(.[E2], .Cells(.Rows.Count, 5).End(xlUp))
                If c.Value = Me.ComboBox1.Value Then
                    If Not Dico.exists(c.Offset(, 1).Value) Then
                        Dico.Add c.Offset(, 1).Value, c.Offset(, 1).Value
                        Me.ComboBox2.AddItem c.Offset(, 1).Value
                    End If
                End If
            Next c
        End With
        Me.ComboBox2.ListIndex = 0
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Activate()
        Dim Dico As Object, c As Range
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Feuil1")
            Sheets("Feuil1").ComboBox1.Clear
            For Each c In .Range(.[E2], .Cells(.Rows.Count, 5).End(xlUp))
                If Not Dico.exists(c.Value) Then
                    Dico.Add c.Value, c.Value
                    Me.ComboBox1.AddItem c.Value
                End If
            Next c
        End With
    End Sub

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 68
    Points : 44
    Points
    44
    Par défaut MERCI
    Ca marche!!!

    Merci beaucoup....

    AC

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

Discussions similaires

  1. Résultat inattendu lors enregistrementMacro - création liste déroulante
    Par JOBiJOBa3 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/10/2011, 20h09
  2. [AC-2003] Problème création liste déroulante
    Par Tom92 dans le forum IHM
    Réponses: 7
    Dernier message: 28/11/2010, 16h09
  3. [PHP 5.3] Création liste déroulante à partir d'une table
    Par Godard dans le forum Langage
    Réponses: 2
    Dernier message: 26/07/2010, 09h03
  4. Création liste déroulante
    Par settoken dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2009, 10h16
  5. Création liste déroulante en javascript pour adobe livecyrcle
    Par mad000 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/07/2009, 14h57

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