Je n'arrive déjà pas à obtenir les valeur unique du lieu dans le Combobox1
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é ?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.
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
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.
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...
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
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 : 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 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:
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 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
Le fichier: ComboboxListBoxFiltrés.xlsm
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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 :
Tb_Garde :
Le code de la macro SUB test du module :
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 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
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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.
VBA_TABSTRUC.xlsm
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.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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 :
Le tableau Tb_Activites de la feuille ACTIVITES
Les tableaux Tb_Sites et Tb_Themes de la feuille PARAM
Une idée de formulaire avec le bouton état d'aide au choix :
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager