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

  • Initiateur de la discussion Initiateur de la discussion TCHIS
  • Date de début Date de début
  • Mots-clés Mots-clés
    combobox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
Avec le fichier que j'ai envoyé la macro de filtre marche mais les ComboBox ne sont pas liés en plus du fait qu'à l'initialisation j'ai comme l'impression qu'il y le filtre je veux dire parle que la liste présente les lignes vide de la feuille de données
 
Avez
est-ce que ceci est censé pouvoir se produire ?
Pas si on a effacé la saisie précédente. Mais si on avait commencé par saisir le prénom la ComboBox garde sa liste d'avant le choix.
A l'aide svp je suis censé rendre compte bientôt et là je panique comme jamais
Ne paniquez pas. Contentez vous de mettre les CLs.Add et CAs.Add (c'est précisément ce que j'ai la flemme de faire), joignez tout ça et je ferai le reste.
 
Bonjour
Ne paniquez pas. Contentez vous de mettre les CLs.Add et CAs.Add (c'est précisément ce que j'ai la flemme de faire), joignez tout ça et je ferai le reste.
@Dranreb en toute sincérité je ne comprends rien de ce que vous me demandez

Bien que la procédure soit bien détaillée le fait qu'elle soit aussi longue la rend complexe
de plus mon souci est que cela demande d'enregistrer le fichier Complément en local tandis que le fichier lui doit être utilisé en réseau est ce que n'est pas déjà un problème je me demande ?

Vraiment je ne comprend rien
 
Bonjour.
Bravo ! Il n'y avait guère d'erreur dans ce que vous aviez mis.
Après ajout des modules de service, les réactions normales du ComboBoxLiées se sont manifestées.
Puis-je mettre en tête la Sub UserForm_Initialize (c'est toujours ce qui s'exécute en premier) ?
La suite ça va être de sélectionner "CLs" dans la liste de gauche qui surmonte la fenêtre de code: ça va implanter d'office un modèle de prise en charge de son évènement Change, puis de sélectionner "Résultat" dans celle de droite, ce qui va ajouter la prise en charge de celui-ci.
Un tableau Lignes de Long est transmis à cette dernière. Ce sont les numéros des lignes correspondant simultanément à toutes les valeurs qui auront été mises dans les ComboBox prise en charge par CLs.
 

Pièces jointes

Dernière édition:
Ceci a l'air de pas mal marcher :
VB:
Private Sub CLs_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
   If NbrLgn = 0 Then
' Faire en sorte que la ListView affiche tout, ou pour moi se serait plutôt rien …
' Parce que dans ce cas la Sub CLs_Résultat ne sera pas invoquée.
      End If
   End Sub
Private Sub CLs_Résultat(Lignes() As Long)
   Dim TDon(), LLVw As Long, LDon As Long, C As Integer
   TDon = CLs.PlgTablo.Value
   Lvw_NATIFS.ListItems.Clear
   For LLVw = 1 To UBound(Lignes)
      LDon = Lignes(LLVw)
      With Lvw_NATIFS.ListItems.Add(, , Format(TDon(LDon, 1), ""))
         For C = 2 To 16
            .ListSubItems.Add , , TDon(LDon, C)
            Next C
         End With
      Next LLVw
   End Sub
 

Pièces jointes

Bonjour
Alors je viens de consulter le fichier je me doute bien que tu as du bien bossé mais sauf je n'y comprend pas combobox sont liés mais pas ce à quoi je m'attendais
j'ai la macro filtre élaboré encore heureux mais ça serait plus efficace si les Combobox était liées je veux dire par là:
Que le filtre (La macro s'applique en cascade ) quand un filtre est appliqué sur un Critère les autres critères restant (ComboBox) affiche les données en fonction du filtres précédant

C'est-à-dire sur le site si le critère de filtre choisis est "DJENO" et que toutes les lignes affichées après filtres si il ne reste comme métier INST & ELEC et le combobox métier ne présentera que les CHOIX INST & ELEC ainsi de suite sachant qu'on est libre de commencer le filtre sur n'importe quel autre critère
 
Pourquoi ?
Il y a bien aussi des Metier MECA avec Site DJENO. D'ailleurs si vous sélectionnez ce Metier MECA il ne vous affiche plus que ceux là dans la ListView (DJENO et MECA).
Voulez-vous dire qu'il faudrait aussi tenir compte du filtre du tableau dans la feuille ? Ce n'est guère faisable …

Ah je viens de voir qu'il y avait un bouton Réinitialiser. Très simple :
VB:
Private Sub Btn_Réinitialized_Click()
   CLs.Nettoyer
   End Sub
Remarque : J'évite le blanc souligné dans les noms: je ne le réserve que comme séparateur dans les noms des procédures de prise en charge d'évènements entre le nom de l'objet et celui de l'évènement.
 
Dernière édition:
Je pense que ne demande qu'à être adapter par rapport à mon besoin sauf que comme je ne comprend rien de ce que vous avez fait je suis bloqué c'est trop complexe votre méthode
Je vous remercie du temps que vous m'accorder
 
Mais qu'est ce qui ne va pas ? Vous semblez dire qu'avec le site DJENO il n'existe que les métiers INST et ELEC dans votre base. C'est faux: Pour DJENO, MECA y est aussi, alors pourquoi ne devrait-il pas être proposé ? Les réactions du ComboBoxLiées sont bien telles que vous les décrivez: il ne propose dans les liste des ComboBox non renseignée que les possibilités compatibles avec celles qui le sont. S'il n'y a qu'une seule possibilité, elle est assumée.
 
Oui, c'est ce que, perso, j'ai compris : les ComboBox ne doivent contenir que ce qu'il reste dans la colonne correspondante de la ListView après filtrage avec le contenu des 9 ComboBox.
 
Remarquez si vous effacez une ComboBox qui n'a pas été renseignée en dernier, sa liste est corrigée en fonction de celles qu'il l'avaient été. Mais la liste d'une ComboBox ne change plus après qu'un choix y a été fait.
Il vaut souvent mieux réinitialiser d'abord.
 
Ce serait sans doute faisable mais on perdrait en quelque sorte une notion d'historique de l'orde dans lequel ont été effectués les choix, sans que cela n'apporte rien d'utile. Il suffit de le savoir. La liste contient ce qu'elle contenait quand on y a choisi quelque chose. On ne va quand même pas effacer complètement les listes de toutes les ComboBox sous prétexte que dans l'une d'elle on y a tapé quelque chose qui n'existait pas dans sa seule propre liste ! Le truc est en effet conçu aussi pour de possibles créations.
 
les ComboBox ne doivent contenir que ce qu'il reste dans la colonne correspondante de la ListView après filtrage avec le contenu des 9 ComboBox.
Alors c'est idiot, réfléchissez, parce que toute ComboBox renseignée n'aura plus qu'une liste d'un seul élément qui sera sa valeur. Je ne vois vraiment pas à quoi ça servirait de changer les listes des ComboBox dans lesquelles on a déjà fait un choix. Et comme dit plus haut, si vous voulez changer ce choix mais en tenant compte d'autres ComboBox renseignées entre temps, vous avez toujours la ressource de l'effacer: ça recalculera bien sa liste puisqu'elle ne sera plus renseignée.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
28
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…