Filtres sans doublons et Combobox // VBA

jonleboss

XLDnaute Junior
Bonjour à tous les codeurs VBA !

Je suis sur un projet personnel utilisant un tableau excel pouvant atteindre plus de 5000 lignes et des Useforms pour une question de convivialité et de praticité dans l’affichage et la modification des données.

Sur l’onglet « Accueil », j’ai créé un bouton pour afficher un Useform ( UF1 ) me permettant de choisir un « nom » et les données ( critères + données ) associées dans un 2nd Useform ( Resultat ). Dans un premier temps, j’avais créé une ComboBox CB1 pour faire le choix du « nom » à afficher mais quand il y a 5000 lignes, cela devient compliqué notamment pour aller chercher un « nom » tout en bas du tableau :)

Je souhaite donc pouvoir faire un filtre selon 1 à 3 critères via le 1er Useform UF1. L’idéal serait d’avoir une liste de choix, à la façon d’un filtre sans doublon, pour chaque critère. Ceci car les critères peuvent être commun à plusieurs « nom » / lignes.
Une fois le ou les critères choisi(s), je souhaite que les lignes correspondant à cette / ces condition(s) s’affiche dans la liste de choix de la ComboBox « nom » CB1. Puis, je fais mon choix dans la liste réduite de la CB1 et la ligne sélectionnée s’affiche dans le Useform « Resultat ».

J’ai codé / configuré quasiment tout le fichier mais il me manque :

- La configuration des listes de choix des ComboBox CB2 à CB4 selon les colonnes C, D et E de l’onglet « BDD » ;
- Le système / la fonction VBA pour avoir sélection réduite une fois le ou les critères sélectionné(s).

J’espère avoir été assez clair et précis pour que vous puissiez m’aider. Puisque qu’un bon fichier .xls parle mieux que des mots, il est ne PJ.

Merci ^_^

Jonathan
 

Pièces jointes

  • Critere tableau et form.xls
    67.5 KB · Affichages: 36

Modeste

XLDnaute Barbatruc
Re : Filtres sans doublons et Combobox // VBA

Bonjour Jonathan,

Pas tout regardé et pas certain de comprendre si l'utilisateur aurait le choix du ComboBox qu'il activerait, mais la gestion des doublons est parfaitement prise en charge par les objets de type "Dictionary". Un exemple ci-dessous, qui te permettrait de créer le contenu de ta CB2, au moment de charger ton USF:
VB:
Private Sub UserForm_Initialize()
    Set liste = CreateObject("scripting.dictionary")
    With Worksheets("BDD")
    For Each d In .Range("C3:C" & .Cells(.Rows.Count, 2).End(xlUp).Row)
        liste(d.Value) = ""
    Next d
    CB2.List = liste.keys
    End With
End Sub

Comme tu as l'air de te débrouiller tout seul, je te laisse le soin d'adapter à tes besoins, mais dis-nous si j'ai compris de travers ou si tu as des questions.
 

jonleboss

XLDnaute Junior
Re : Filtres sans doublons et Combobox // VBA

Merci Modeste ( pseudo sympa ^_^ ),

Ta réponse est très claire, mais je bloque notamment sur la configuration des 3 ComboBox. Quand je répète la fonction en copiant / collant mais en changeant les "For Each", cela ne fonctionne pas.

Ciao.

Jonathna
 

Modeste

XLDnaute Barbatruc
Re : Filtres sans doublons et Combobox // VBA

Re,

Comment ça pseudo sympa ... non, non, c'est pour du vrai :eek:
À part ça, qu'est-ce qui ne fonctionne pas?? Et tu dupliques les bouts de code dans la Sub UserForm_Initialize? (si oui, il te faudra aussi 3 "dictionary"!?)

Pour pouvoir t'aider, il faudrait que tu nous dises comment tu imagines la gestion des 3 ComboBox? L'utilisateur les active l'une après l'autre (et dans l'ordre)??
 

jonleboss

XLDnaute Junior
Re : Filtres sans doublons et Combobox // VBA

Modeste,

C'est justement là que je bloque ...

Je ne maitrise pas le déclaration des 3 "dictionary", comme les enchainer pour configurer les 3 ComboBox, et peut-être pas le vocabulaire pour t'expliquer ce que je souhaite ^_^.

Effectivement, il pourrait être intéressant de faire en sorte qu'elle s'active les unes après les autres pour avoir dans CB suivante une liste réduite de choix en fonction du choix réalisé dans CB précédente.

A la fin, je veux qu'une fois le ( car il faut également pouvoir ne sélectionner qu'un critère ) ou les critères selectionné(s), la CB1 dont celle du nom n'affiche qu'une liste réduite ( surtout avec 5000 lignes dans le tableau ) en fonction des choix dans les CB 2 à 4, c.a.d. celles des critères.

J'espère avoir réussi à t'expliquer ce que je souhaite.

Malheureusement, j'ai beau connaitre un peu car ai beaucoup lu le forum, c'est au dessus de mes compétences.

Merci d'avance.

Jonathan
 

Modeste

XLDnaute Barbatruc
Re : Filtres sans doublons et Combobox // VBA

Re²,

Sous réserve que j'aie bien compris ta demande et ta difficulté, je conserve la Sub Initialize proposée tout à l'heure, pour garnir la CB2. Au changement de valeur dans la CB2, on garnit la CB3 avec les valeurs de la colonne D (uniquement si la colonne C contient un critère identique avec celui de la CB2). En parallèle (tu verras si c'est utile ou non, je garnis déjà la CB1 et elle se met à jour chaque fois qu'on fait une sélection dans une des 3 autres combos)

Je me suis permis de supprimer tes multiples procédures Initialize (il ne peut y en avoir qu'une, je présume que tu en conviendras?)

Attention, à ce stade, il n'y a aucun contrôle sur l'ordre dans lequel les combos sont activés ... un "retour en arrière" aurait des conséquences inconnues. Vois déjà si ça correspond à ce que tu avais imaginé.
 

Pièces jointes

  • jonleboss Critere tableau et form.xls
    67 KB · Affichages: 32
  • jonleboss Critere tableau et form.xls
    67 KB · Affichages: 33
  • jonleboss Critere tableau et form.xls
    67 KB · Affichages: 36

jonleboss

XLDnaute Junior
Re : Filtres sans doublons et Combobox // VBA

Bonsoir Modeste,

Merci pour ton retour, c'est génial.

Ca à l'air de fonctionner et de répondre à ce que je voulais faire. Merci.

Par contre, j'ai fais un test et il y a une erreur :

- Quand je choisi le Filtre 1 pour "C1_2", le filtre 2 me propose bien les choix "C2_2" et "C2_3" ;
- Si je choisi un nom, il me propose bien les bonnes lignes ( cf. 2 critères précédents ) "N2" et "N12". Il ne m'est d'ailleurs pas obligatoire de choisir le critères 3 pour les éditer, c'est une très bonne chose.
- Par contre, si je choisi en Filtre 3 "C3_2", dans la ComboBox CB1 ( celle du nom ), on me propose toujours les lignes "N2" et "N12" alors que je ne devrais avoir plus que la ligne "N2".

Est-ce que la CB4 = critères 3 est bien pris en compte ?

Merci pour ce dernier coup de main je pense, car ta proposition est plus qu'excellente. je te mets le fichier en PJ car j'ai mis des répétitions de critères dans ma BDD, pour réaliser mes essais.

Jonathan
 

Pièces jointes

  • jonleboss Critere tableau et form.xls
    74 KB · Affichages: 30
  • jonleboss Critere tableau et form.xls
    74 KB · Affichages: 33
  • jonleboss Critere tableau et form.xls
    74 KB · Affichages: 34

Modeste

XLDnaute Barbatruc
Re : Filtres sans doublons et Combobox // VBA

Bonsoir,

Pour faire bonne mesure (mais je n'avais pas dit que tout était "ficelé") il manque la gestion du changement dans la CB4, pour l'ultime mise à jour de la liste de noms:
VB:
Private Sub CB4_Change()
    If CB4.ListIndex = -1 Then Exit Sub 'si aucun choix
    CB1.Clear
    With Worksheets("BDD")
    For Each d In .Range("C3:C" & .Cells(.Rows.Count, 2).End(xlUp).Row)
        If d.Value = CB2.Value And d.Offset(0, 1).Value = CB3.Value _
            And d.Offset(0, 2).Value = CB4.Value Then CB1.AddItem (.Cells(d.Row, 2))
    Next d
    End With
End Sub

... à tester encore, avant d'adopter!! Voir s'il ne serait pas prudent de "désactiver" les combos après qu'une sélection ait été opérée, pour éviter les "couacs".
À vérifier aussi, l'absence de noms identiques (ici en colonne B) dans dton fichier réel !
 

jonleboss

XLDnaute Junior
Re : Filtres sans doublons et Combobox // VBA

Bonsoir Dranreb,

La, y a du gros niveau ! Votre solution fonctionne bien mais je serais incapable de faire une modification pour l'adapter sur un autre classeur et / ou dans un autre contexte.

Avec tout le respect que j'ai pour votre réponse, je vais partir sur celle de Modeste en espérant pouvoir "réparer" le bug que j'ai trouvé.

Merci tout de même.

Jonathan
 

jonleboss

XLDnaute Junior
Re : Filtres sans doublons et Combobox // VBA

Bonsoir Modeste,

Merci pour le message de 18h06 qui est passé à travers ma vigilence ... tout fonctionne maintenant :)

Cher Dranreb, merci encore, mais je prends la solution alternative pour une question de niveau ( le mien ) en VBA.

Au plaisir.

Jonathan
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino