Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 21h59   #1
Invité régulier
 
Homme
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 9
Points : 9
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
Type de fichier : xlsx exemple.xlsx (9,0 Ko, 13 affichages)
igno42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 11h07   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Citation:
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 ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 20h58   #3
Invité régulier
 
Homme
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 9
Points : 9
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
igno42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 21h58   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Avec les villes en colonne A et les adresses en colonne B; Remplissage de la combobox, dans le module "thisworkbook" :

Code :
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 :
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 :
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.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 23h16   #5
Invité régulier
 
Homme
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 9
Points : 9
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
Type de fichier : png PHOTO EXEMPLE.png (42,6 Ko, 7 affichages)
igno42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 10h10   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Code :
j'aimerais que cette liste déroulante s'affiche dans ma combo n°2
Ca simplifie le code

Dans "Thisworkbook" :

Code :
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 :
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.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/12/2011, 12h42   #7
Invité régulier
 
Homme
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 9
Points : 9
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...
igno42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 15h27   #8
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Citation:
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 :
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 :
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
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 21h59   #9
Invité régulier
 
Homme
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 9
Points : 9
Par défaut MERCI

Ca marche!!!

Merci beaucoup....

AC
igno42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h42.


 
 
 
 
Partenaires

Hébergement Web