Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 ComboBox Liés pour Filtre ListView

TCHIS

XLDnaute Occasionnel
Bonjour le forum

J'ai besoin d'aide pour élaborer une macro de filtre d'une ListView en fonction des critères choisis dans mes combobox le point particulier est que ces ComboBox doivent liées entre elles je veux dire par là que lorsqu'on applique un filtre sur un Critère les Critères restant présenteront leurs données de filtres en fonctions du filtre précédant ainsi de suite.

La particularité c'est que j'ai 9 critères de filtres (9ComboBox) et le filtre ne suit pas un ordre quelconque je veux dire par là qu'on est libre de commencer à filtrer à partir de n'importe quel critère(Voilà pourquoi je me demande si la méthode de filtre en cascade avec les différents Combobox) peut passer ?

Voici un extrait du la ListView et des Contrôles
 
Solution
Bonjour à tous,
Je me permets de proposer une solution via un module de classe.
Ici il est possible de revenir en arrière pour chaque choix en sélectionnant l'entête dans la liste déroulante. Il y a également un reset pour l'ensemble des filtres.

Le code principal est contenu dans le module de classe, + quelques lignes à ajouter dans le code de l'usf.
En PJ, 2 versions avec ou sans listview (usf simplifié pour ne montrer que la fonction filtre)

Nb : pour ce code, on renseigne le tag des combobox avec le n° de la colonne correspondante. Le code est alors fonctionnel sans modif quelque soit le nombre de combobox.

P.

Dranreb

XLDnaute Barbatruc
Bonjour.
C'est surtout pour la page d'aide. En général j'équipe les classeurs joints des modules de service nécessaires.
 

TCHIS

XLDnaute Occasionnel
Vous verez que j'ai une macro dans le module renommer ModulerNatifs pour les Filtres
VB:
Sub Filtre_Lvw_NATIFS(P As Byte)
'C = Feuil1.Range("A2:P2" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Value
'With UserForm1.Lvw_NATIFS
'            .ListItems.Clear
'For i = 2 To UBound(C, 1)
'If CStr(C(i, P)) = UserForm1.Controls("CbxDatasGo" & P) Then
'.ListItems.Add , , C(i, 1)
'lg = .ListItems.Count
'.ListItems(lg).ListSubItems.Add , , C(i, 2)
'.ListItems(lg).ListSubItems.Add , , C(i, 3)
'.ListItems(lg).ListSubItems.Add , , C(i, 4)
'.ListItems(lg).ListSubItems.Add , , C(i, 5)
'.ListItems(lg).ListSubItems.Add , , C(i, 6)
'.ListItems(lg).ListSubItems.Add , , C(i, 7)
'.ListItems(lg).ListSubItems.Add , , C(i, 10)
'.ListItems(lg).ListSubItems.Add , , C(i, 16)
'End If
'Next i
'End With
   
End Sub
Macro que j'ai inhiber car elle bien qu'elle marche le fait que mes Combobox ne soit pas liées ne donne pas pas le résultat attendu
Il y a moyen de faire quelque chose s'il vous plait
 

Dranreb

XLDnaute Barbatruc
La ressource est disponible en téléchargement pour installation d'un programme complémentaire .xlam de projet VBA CLsCAs à cocher dans les références du projet utilisateur, à partir d'un précurseur .xlsm. Mais son principal intérêt est plutôt sa feuille d'aide, parce que le plus souvent les utilisateurs préfèrent que les modules de services soit installés à même le projet VBA utilisateur.
 

TCHIS

XLDnaute Occasionnel
Waouh dois je comprendre qu'il s'agit là de la procédure
 

Dranreb

XLDnaute Barbatruc
Non, c'est la page d'aide de la fourniture. Elle décrit les évènements, méthodes et propriétés des deux types d'objets telles qu'elle sont utilisables dans un UserForm.
 

TCHIS

XLDnaute Occasionnel
Re
je dois reconnaitre bien que le fichier semble être très riche après en avoir ^ris connaissance l'exploité et le mettre en application est une autre tache car je ne sais pas par où débuter en toute sincérité
 

Dranreb

XLDnaute Barbatruc
Par la Sub UserForm_Initialize, c'est là que quasiment tout est défini. Le reste ne sont que de petites procédures de quelques lignes. Je m'en occuperai si vous ne savez pas comment les écrire.
Je joins un exemple que je montre souvent.
 

Pièces jointes

  • CLsCAsContacts.xlsm
    149.4 KB · Affichages: 22

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…