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
1683544379625.png
 
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.
Démo_.gif

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.

cp4

XLDnaute Barbatruc
Rhôô! 2010 n'aime pas les Application.machin, on dirait!

Alors pareil, on copie-colle la Function Td_cl (ici équivalent à Application.index) dans le module de classe
puis on remplace la ligne surlignée plus haut par :
Code:
.Range("TTK1").Resize(UBound(Td, 1), 1) = Td_cl(Td, cl)

VB:
Function Td_cl(Td As Variant, cl As Integer)
Dim T As Variant, i As Long

    ReDim T(1 To UBound(Td, 1), 1 To 1)
    For i = 1 To UBound(T)
        T(i, 1) = Td(i, cl)
    Next i
     Td_cl = T
End Function
P.
Merci beaucoup, ça fonctionne.:cool:
 

TCHIS

XLDnaute Occasionnel
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.
Regarde la pièce jointe 1170025
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.
Bonjour c'est effectivement ce que je recherchais depuis merci @p56 🙏 🙏
par contre quand je lance le formulaire le souci que je rencontre est que la ListView ne se rempli pas pour je ne sais quelle raison pourtant la macro remplir est bien la même tu pourrais m'aider stp
VB:
Sub Remplir_Lvw_NATIFS(C As Variant)
' Macro permettant de charger le contenu des cellules se trouvant dans le tableau de feuille source dans la ListView1

'C = Feuil1.Range("A2:P2" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Value
Dim lg As Long
With UserForm1.Lvw_NATIFS
For lg = 2 To UBound(C)
Set Lst = .ListItems.Add(, , Format(C(lg, 1), ""))
With Lst
.ListSubItems.Add , , C(lg, 2)
.ListSubItems.Add , , C(lg, 3)
.ListSubItems.Add , , C(lg, 4)
.ListSubItems.Add , , C(lg, 5)
.ListSubItems.Add , , C(lg, 6)
.ListSubItems.Add , , C(lg, 7)
.ListSubItems.Add , , C(lg, 10)
.ListSubItems.Add , , C(lg, 11)
.ListSubItems.Add , , C(lg, 12)
.ListSubItems.Add , , C(lg, 13)
.ListSubItems.Add , , C(lg, 14)
.ListSubItems.Add , , C(lg, 15)
.ListSubItems.Add , , C(lg, 16)
End With
Next lg
End With
End Sub

Je t'ai joint le fichier il a un peu plus évoluer depuis mais il n'est pas encore au point pourrais tu jeter un coup d'œil stp 🙏🙏
 

Pièces jointes

  • Projet TCHIS.xlsm
    957 KB · Affichages: 4
Dernière édition:

p56

XLDnaute Occasionnel
Bonjour à tous,

@TCHIS : alors plusieurs points d'attention :

* code de la Sub En_tetes_Lvw_NATIFS et de la Sub Remplir_Lvw_NATIFS : il y a quelques changements dans le code "nettoyé"

* à ce sujet il est plus simple de fixer les diverses propriétés de la Lvw_Natifs en dur

* dans le code du module de classe : le type "CbxDatasGo" n'existe pas, à remplacer par "ComboBox" (c'est un terme générique qui n'a rien à voir avec le nom qui a été donné)

* comme indiqué dans mes explications d'utilisation, chaque combobox doit voir sa propriété Tag renseignée avec le n° de colonne correspondant (ex : site=1, plateforme=2, etc ...)

Et dernier point : quand il y a dans le code une mention du nom de l'auteur qui propose une solution, il est d'usage de laisser cette mention. Il n'y a aucun problème à se faire aider par d'autres, même vis à vis de son patron.

Le code du module de classe : c'est MON code et je le revendique. Merci.

En Pj le fichier corrigé avec mon code signé.
Bonne journée :)
P.
 

Pièces jointes

  • Projet TCHIS(2).xlsm
    969.8 KB · Affichages: 6

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous ne m'avez toujours pas expliqué clairement et sur un exemple concret ce qui ne va pas selon vous dans le filtrage effectué par mon objet ComboBoxLiées, car ce que vous dites vouloir c'est exactement ce qu'il fait pour les ComboBox non renseignées et pour la liste de numéros de lignes finalement couverte.
 

TCHIS

XLDnaute Occasionnel
Bonjour.
Vous ne m'avez toujours pas expliqué clairement et sur un exemple concret ce qui ne va pas selon vous dans le filtrage effectué par mon objet ComboBoxLiées, car ce que vous dites vouloir c'est exactement ce qu'il fait pour les ComboBox non renseignées et pour la liste de numéros de lignes finalement couverte.
Bonjour
en fait ce que j'ai dit c'est que ton code à toi aussi était une solution par contre la complexité de celui ne permet pas de l'adapter à mon besoin.

Tandis que celui de @p56 en plus de répondre à mon besoin le sien il est plus compréhensible.
Les Combobox sont liés et quand on filtre c'est exactement comme sur un tableau Excel
D'ailleurs merci à vous tous 🙏 🙏 🙏 🙏

@Dranreb comprends tu mon point bloquant par rapport à ta proposition ?

Je ne dis pas qu'elle est fausse mais plutôt qu'elle est trop complexe pour que la comprenne et l'adapte par la suite.
 

Dranreb

XLDnaute Barbatruc
Mais il n'y a pas d'adaptation à effectuer dans les modules de service, seulement des CLs.Add à ajouter ou supprimer dans la Sub UserForm_Initialize. Ce que je visais c'est justement une grande simplification seulement dans la programmation du UserForm.
 

TCHIS

XLDnaute Occasionnel
Bonjour à tous,

@TCHIS : alors plusieurs points d'attention :

* code de la Sub En_tetes_Lvw_NATIFS et de la Sub Remplir_Lvw_NATIFS : il y a quelques changements dans le code "nettoyé"

* à ce sujet il est plus simple de fixer les diverses propriétés de la Lvw_Natifs en dur

* dans le code du module de classe : le type "CbxDatasGo" n'existe pas, à remplacer par "ComboBox" (c'est un terme générique qui n'a rien à voir avec le nom qui a été donné)

* comme indiqué dans mes explications d'utilisation, chaque combobox doit voir sa propriété Tag renseignée avec le n° de colonne correspondant (ex : site=1, plateforme=2, etc ...)

Et dernier point : quand il y a dans le code une mention du nom de l'auteur qui propose une solution, il est d'usage de laisser cette mention. Il n'y a aucun problème à se faire aider par d'autres, même vis à vis de son patron.

Le code du module de classe : c'est MON code et je le revendique. Merci.

En Pj le fichier corrigé avec mon code signé.
Bonne journée :)
P.
Bonsoir
Besoin d'aide toujours dans le meme cadre je vous prie 🙏 🙏 🙏 .
@p56 j'ai appliqué ton code en respectant la procédure sauf que je suis confronté à un souci à savoir quand je lance le formulaire il me ressort une erreur 91 comme quoi l'objet n'est pas défini
1685027167351.png

En plus de cela tu remarqueras qu'il ne s'agit pas d'un tableau mais que les données de ma ListView se trouvent sur la feuille. les tableaux ont du être supprimés car c'est ce qui convient le mieux pour la suite pour la suite de ce fichier.

Autre souci je tente de faire à ce que lors du double clique sur une ligne de la ListView on se positionne automatiquement sur la ligne correspondante sur la feuille Excel car de cette action dépend d'autres macros comme celles dédiées à l'ouverture des fichiers Word ou Pdf.

L'ouverture des fichiers Word marche parfaitement bien sauf quand il y a le filtre(je l'ai fait avec la version tableau)
Si vous pouvez y accorder de votre temps cela m'aiderai énormement
Merci d'avance🙏🙏
 

Pièces jointes

  • Projet TCHIS.xlsm
    115.1 KB · Affichages: 3

ChTi160

XLDnaute Barbatruc
Bonjour TCHIS
je me permets en attendant que Bernard ne vienne te visiter Lol
tu dis :
BD_NATIFS Est la plage de données concernées sur la feuille de calcul Excel
Tu dois savoir que tu n'as pas de LIstObjet ("BD_NATIFS") dans ta feuille "BD_NATIFS"
il serait bien aussi que tu rajoute par exemple un t devant le Nom du ListObject que tu vas créer soit "t_BD_NATIFS"
Car il n'est pas recommandé de Nommer ton ListObjet avec le Même nom que ta Feuille soit : BD_NATIFS Lol
une fois que tu auras fait le réglage tu pourras utiliser le ListObject t_BD_NATIFS"
Pour ce qui est de la collecte des Données !
Bonne Continuation
Jean marie
 

TooFatBoy

XLDnaute Barbatruc
Autre souci je tente de faire à ce que lors du double clique sur une ligne de la ListView on se positionne automatiquement sur la ligne correspondante sur la feuille Excel car de cette action dépend d'autres macros comme celles dédiées à l'ouverture des fichiers Word ou Pdf.
Au mois de mars je t'avais signalé que le filtrage de ta ListView poserait sûrement problème et je t'avais proposé une solution, mais tu m'avais répondu "Et en effet tu pourrais avoir vu juste. De mon coté j'aessai d'avancer avec ce que tu m'a apporter jusque là".

Ma boule de cristal avait donc vu juste. ;)
 
Dernière édition:

TCHIS

XLDnaute Occasionnel
Bonjour TCHIS
je me permets en attendant que Bernard ne vienne te visiter Lol
tu dis :

Tu dois savoir que tu n'as pas de LIstObjet ("BD_NATIFS") dans ta feuille "BD_NATIFS"
il serait bien aussi que tu rajoute par exemple un t devant le Nom du ListObject que tu vas créer soit "t_BD_NATIFS"
Car il n'est pas recommandé de Nommer ton ListObjet avec le Même nom que ta Feuille soit : BD_NATIFS Lol
une fois que tu auras fait le réglage tu pourras utiliser le ListObject t_BD_NATIFS"
Pour ce qui est de la collecte des Données !
Bonne Continuation
Jean marie
l'objet ListObject n'est ce pas pour la création des tableaux 🤔 🤔
 

ChTi160

XLDnaute Barbatruc
re
Bonsoir @TooFatBoy
Pour créer Un ListObject tu sélectionnes une cellule du tableau que tu veux transformer en ListObject et Tu Fais "CTRL+ L" tu valides si Entêtes dans ton Tableau .
ensuite sur la Feuille ou se trouve ton ListObject , tu sélectionnes une de ses Cellules et Tu as en Haut "Création de tableau" tu Click dessus, à partir de là tu peux Donner un Nom en Haut a Gauche "Nom du Tableau" etc etc
jean marie
 

TCHIS

XLDnaute Occasionnel
re
Bonsoir @TooFatBoy
Pour créer Un ListObject tu sélectionnes une cellule du tableau que tu veux transformer en ListObject et Tu Fais "CTRL+ L" tu valides si Entêtes dans ton Tableau .
ensuite sur la Feuille ou se trouve ton ListObject , tu sélectionnes une de ses Cellules et Tu as en Haut "Création de tableau" tu Click dessus, à partir de là tu peux Donner un Nom en Haut a Gauche "Nom du Tableau" etc etc
jean marie

Sauf que vois tu pour la suite les tableaux font défauts j'ai un dashboard que je monte sur formulaire et un tableau rien que seul en plus d'alourdir le fichier entraine aussi des bugs une grande lenteur dans l'exécution voilà pourquoi je dis qu'ils sont à bannir
 

TooFatBoy

XLDnaute Barbatruc
Sauf que vois tu pour la suite les tableaux font défauts j'ai un dashboard que je monte sur formulaire et un tableau rien que seul en plus d'alourdir le fichier entraine aussi des bugs une grande lenteur dans l'exécution voilà pourquoi je dis qu'ils sont à bannir
Au début de ton projet, je t'avais aussi dit que l'utilisation de TS serait probablement souhaitable.

Moi non plus je ne comprends pas ce que tu veux dire, ni pourquoi tu dis qu'ils sont à bannir, ni en quoi ils ralentissent le programme. :(

Peux-tu nous expliquer un peu plus précisément le(s) problème(s) que des TS te poseraient, stp ?
 

Discussions similaires