Je n'arrive déjà pas à obtenir les valeur unique du lieu dans le Combobox1
Version imprimable
Je n'arrive déjà pas à obtenir les valeur unique du lieu dans le Combobox1
Bonjour,
Pourriez vous publier le code que vous avez utilisé ?Citation:
Je n'arrive déjà pas à obtenir les valeur unique du lieu dans le Combobox1
Si vous avez une version récente (365) d'excel, vous serez certainement inspiré par le billet de Pierre Fauconnier titré Excel 365: Filter les lignes d'une listbox selon la saisie d'un textbox (saisie intuitive) (Attention toutefois de ne pas devoir partager l'application avec des utilisateurs qui auraient des versions antérieures.
Je parviens à afficher un tri avec un combobox par rapport au champs de la table.
Mais ce n'est pas ce que je souhaiterais par rapport à mon projet.
Pièce jointe 584602
Et que souhaites-tu? Dans un message, tu parles de devoir obtenir la liste des villes sans doublons, et dans le message suivant, on comprend que tu veux trier sur base d'une colonne... :koi:
Avec la version 2010 que tu as taguée, tu vas devoir "chipoter" pour récupérer les valeurs uniques. On pourrait t'aiguiller vers l'utilisation d'un dictionary, mais perso, fidèle à ma maxime (VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...), je n'aime pas et je me tournerais plus volontiers vers un tableau temporaire dans une feuille masquée dans lequel je supprimerais les doublons. Je procéderais de la même manière avec les noms pour une ville choisie: copier les contacts dans un tableau temporaire, trier par ville, déterminer la plage qui correspond aux contacts de la ville choisie et passer cette plage à la listbox.
Avec les trois tableaux suivants t_contacts, t_VillesUniques et t_NomsVilleChoisie
Pièce jointe 584618
Voici comment j'afficherais le userform en préparant les contrôles. Je pense que le code se lit et se comprend facilement, surtout en pas à pas.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Sub Test() Dim Target As Range ClearTable "t_VillesUniques" ClearTable "t_NomsVilleChoisie" Set Target = Range("t_VillesUniques").ListObject.ListRows.Add().Range(1) Target.Resize(Range("t_Contacts").Rows.Count).Value = Range("t_Contacts[Ville]").Value Range("t_VillesUniques").ListObject.DataBodyRange.RemoveDuplicates 1 With UserForm1 .cboVilles.List = Range("t_VillesUniques").Value .lboNoms.List = Range("t_Contacts[Nom]").Value .Show End With End Sub Sub ClearTable(Name As String) If Not Range(Name).ListObject.DataBodyRange Is Nothing Then Range(Name).ListObject.DataBodyRange.Delete End Sub
Au changement de ville dans le userform, on utilise le code suivant:
Pièce jointe 584619Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Private Sub cboVilles_Change() AdaptLboNoms End Sub Sub AdaptLboNoms() Dim Target As Range Dim Pos As Long, CountOf As Long ClearTable "t_NomsVilleChoisie" Set Target = Range("t_NomsVilleChoisie").ListObject.ListRows.Add().Range(1) Target.Resize(Range("t_Contacts").Rows.Count, Range("t_Contacts").Columns.Count).Value = Range("t_Contacts").Value With Range("t_NomsVilleChoisie").ListObject.Sort .SortFields.Clear .SortFields.Add Key:=Range("t_NomsVilleChoisie[Ville]"), Order:=xlAscending .SortFields.Add Key:=Range("t_NomsVilleChoisie[Nom]"), Order:=xlAscending .Apply End With Pos = Application.Match(cboVilles.Value, Range("t_NomsVilleChoisie[Ville]"), 0) CountOf = Application.CountIfs(Range("t_NomsVilleChoisie[Ville]"), cboVilles.Value) lboNoms.List = Range("t_NomsVilleChoisie[Nom]")(Pos).Resize(CountOf).Value End Sub
Pièce jointe 584620
Le fichier: Pièce jointe 584617
Bonjour,
Tout d'abord je vous remercie pour l'aide apportée.
J'ai essayé votre code, mais je n'arrive pas à tout comprendre. Je dois avoir un problème avec les index de mes colonnes.
J'ai le tableau Tb_Site, le tableau Tb_Sitechoisi, et le tableau Tb_Garde. Lorsque je lance la macro du module test j'ai un décalage, la macro va chercher la date...
Je n'arrive pas à déterminer ou cela dysfonctionne
Tb_Site et Tb_SiteChoisi :
Pièce jointe 584649
Tb_Garde :
Pièce jointe 584650
Le code de la macro SUB test du module :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Sub Test() Dim Target As Range ClearTable "Tb_Site" ClearTable "Tb_SiteChoisi" Set Target = Range("Tb_Site").ListObject.ListRows.Add().Range(1) Target.Resize(Range("Tb_Garde").Rows.Count).Value = Range("Tb_Garde[NOMPRE]").Value Range("Tb_Site").ListObject.DataBodyRange.RemoveDuplicates 1 With UserForm1 .ComboBox1.List = Range("Tb_Site").Value .ListBox1.List = Range("Tb_Garde[NOMPRE]").Value .Show End With End Sub Sub ClearTable(Name As String) If Not Range(Name).ListObject.DataBodyRange Is Nothing Then Range(Name).ListObject.DataBodyRange.Delete End Sub
Les lignes 7, 8 et 9 du code que tu donnes crée la liste des sites dans doublons. A la ligne 8, tu dois donc prendre la colonne du site et pas la colonne NOMPRE
A l'initialisation c'est ok, sauf que le tableau Tb_SiteChoisi est désorganiser
Au changement dans la combo j'ai un problème sur le SOrt key.
Pièce jointe 584652
Pièce jointe 584653
Tu as mélangé mes tableaux intermédiaires, donc ça ne sait forcément pas fonctionner. De plus, je vois des tableaux sur d'autres feuilles.
Le plus simple serait probablement que tu nous dises ce que tu souhaites obtenir au départ des tableaux de garde et d'activités, en français, sans jargon excel ou vba et sans dire le "comment". Nous pourrons probablement mieux t'aiguiller.
Bonjour,
J'ai trois feuilles dans mon classeurs : PARAM; ACTIVITES; GARDE_JOUR
==> La feuille garde jour est alimentée avec un tableau Tb_Garde dans le quel on trouve un champ date, un champ matricule, un champ nompre;un champ site; un champ motif un champ poste
==> Je souhaiterais alimenter le tableau Tb_Activité la feuille activités à l'aide de la feuille garde jour par l'intermédiaire d'un formulaire. J'aimerais que ce formulaire comporte le choix du site et le choix d'un thème ( thème qui se trouve dans la feuille PARAM sous la tableau Tb_THEME). L'idée serait que l'utilisateur puisse sélectionner plusieurs nom dans la listbox issue du choix du combo du choix du site.
Aussi et avant le choix du thème, je souhaiterais que l'utilisateur puisse également avoir un état du dernier thème vu par les noms ( Date et thème) et voir le ou les thèmes les moins vu parmi les nom de la listBox.
Enfin une fois les noms choisis et le thème choisi, je souhaiterais pouvoir affecter un nom en qualité de formateur.
Le tableau Tb_Garde de la feuille GARDE_JOUR :
Pièce jointe 584742
Le tableau Tb_Activites de la feuille ACTIVITES
Pièce jointe 584743
Les tableaux Tb_Sites et Tb_Themes de la feuille PARAM
Pièce jointe 584744
Une idée de formulaire avec le bouton état d'aide au choix :
Pièce jointe 584745