XL 2013 Filtrage ListBox multicritères

screewy

XLDnaute Nouveau
Bonjour à tous,

Étant un peu amateur, voir novice sur VBA, j'aurai besoin d'un peu d'aide par rapport à un fichier.

Mon but est de pouvoir filtrer les informations de la ListBox par différentes TextBox, puis d'afficher les informations non présentes dans la ListBox lorsque je sélectionne une ligne.

Mes problèmes sont les suivants :
- Lorsque je fais une recherche par la première TextBox, la ListBox perd les titres des colonnes ainsi que la mise en forme de la ListBox
- Ma recherche mutli critères (multi TextBox) ne fonctionne pas
- Lorsque je fais une recherche et que je sélectionne ensuite une ligne de la TextBox, les informations qui s'affichent en dessous ne sont pas les bonnes

Pourriez-vous m'apporter vos expertises et aides, au moins partiellement ?

En vous remerciant par avance.
 

Pièces jointes

  • Fichier Abonné avec Macro Draft.xlsm
    36.5 KB · Affichages: 35

Dranreb

XLDnaute Barbatruc
Re : Filtrage ListBox multicritères

Bonjour.
Ça ne va pas être possible en gardant les titres. Il faudrait des Label au dessus.
À cette restriction près le tout se fait aisément avec des ComboBox gérées par mon objet de type ComboBoxLiées à la place des TextBox.
Le principe de la solution est de garder trace des numéros des lignes que vous avez ajoutées dans la ListBox.
Or justement, de même qu'un bon professionnel de l'alimentation n’interrompt jamais la chaîne du froid, mon objet ComboBoxLiées n’interrompt jamais la chaîne des listes de numéros de lignes.

D'ailleurs il ne me semble pas certain que vous ayez encore besoin de la ListBox si vous faites la recherche par des ComboBox liées.
Voulez vous que j'équipe votre classeur des modules de service nécessaires ?
 
Dernière édition:

screewy

XLDnaute Nouveau
Re : Filtrage ListBox multicritères

Bonjour.
Ça ne va pas être possible en gardant les titres. Il faudrait des Label au dessus.
À cette restriction près le tout se fait aisément avec des ComboBox gérées par mon objet de type ComboBoxLiées à la place des TextBox.
Le principe de la solution est de garder trace des numéros des lignes que vous avez ajoutées dans la ListBox.
Or justement, de même qu'un bon professionnel de l'alimentation n’interrompt jamais la chaîne du froid, mon objet ComboBoxLiées n’interrompt jamais la chaîne des listes de numéros de lignes.

D'ailleurs il ne me semble pas certain que vous ayez encore besoin de la ListBox si vous faites la recherche par des ComboBox liées.
Voulez vous que j'équipe votre classeur des modules de service nécessaires ?

Bonjour Dranreb,

Merci pour vos informations.

J’accepte volontiers votre aide, car je n'ai jamais utilisé les ComboBoxLiées.
Je suis en train de regarder pour découvrir cette fonctionnalité.

Bien cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Filtrage ListBox multicritères

Je précise que c'est une fonctionnalité que j'ai développée moi même.
Alors puisque ça vous intéresse Je vous retourne votre classeur équipé des modules de service nécessaires. Je les avais mis juste avant de vaquer à d'autres occupations. À part le strict nécessaire à faire tourner l'objet ComboBoxLiées, il n'y a pour l'instant aucun développement derrière adapté à vos besoins. Je vais m'y mettre pour le plaisir, mais ce dernier serait meilleur ça servait de corrigé à ce que vous allez faire vous même…

Mais d'abord voyons si on maintient la ListBox. Parce qu'avec un Nom Prénom on aboutit facilement à une seule ligne.
 

Pièces jointes

  • CbxLiéesScreewy.xlsm
    112.8 KB · Affichages: 37
  • CbxLiéesScreewy.xlsm
    112.8 KB · Affichages: 26
Dernière édition:

screewy

XLDnaute Nouveau
Re : Filtrage ListBox multicritères

Je précise que c'est une fonctionnalité que j'ai développée moi même.
Alors puisque ça vous intéresse Je vous retourne votre classeur équipé des modules de service nécessaires. Je les avais mis juste avant de vaquer à d'autres occupations. À part le strict nécessaire à faire tourner l'objet ComboBoxLiées, il n'y a pour l'instant aucun développement derrière adapté à vos besoins. Je vais m'y mettre pour le plaisir, mais ce dernier serait meilleur ça servait de corrigé à ce que vous allez faire vous même…

Mais d'abord voyons si on maintient la ListBox. Parce qu'avec un Nom Prénom on aboutit facilement à une seule ligne.

Bonjour Dranreb,

Merci pour les modules.
Je pense, en effet, qu'avec cette solution, il n'est plus nécessaire d'avoir une ListBox.

J'ai peu accès à mon PC aujourd'hui, je regarde ces éléments dès demain matin pour comprendre et essayer d'avancer avec les ComboBoxLiées et les TexBox à remplir.

Merci

Bien cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Filtrage ListBox multicritères

Bonjour.
De mon coté j'ai néanmoins terminé, hier soir, au cas où ce serait quand même utile de consulter tous les abonnée d'un certain type, une version qui alimente la ListBox.
J'y ai supprimé la TextBox pour le type d'abonné et les paires de TextBox pour les Nom et Prénom, et renvoyé plus bas, dans la fiche, les ComboBox qui leur sont dédiées.
Je la tiens à votre disposition pour le jour où vous la voudrez.
 

screewy

XLDnaute Nouveau
Re : Filtrage ListBox multicritères

Bonjour.
De mon coté j'ai néanmoins terminé, hier soir, au cas où ce serait quand même utile de consulter tous les abonnée d'un certain type, une version qui alimente la ListBox.
J'y ai supprimé la TextBox pour le type d'abonné et les paires de TextBox pour les Nom et Prénom, et renvoyé plus bas, dans la fiche, les ComboBox qui leur sont dédiées.
Je la tiens à votre disposition pour le jour où vous la voudrez.

Bonjour Dranreb,

Je n'ai pas trouvé de solution utilisant la ListBox.
J'ai pu trouver comment remplir les TextBox une fois la sélection faite sur les ComboBox.

Voici le résultat.
J'ai laissé la ListeBox, mais dans cette configuration, elle m'est inutile.

Qu'en pensez-vous ?

Merci

Bien cordialement
 

Pièces jointes

  • CbxLiéesScreewy v2.xlsm
    113.3 KB · Affichages: 42

Dranreb

XLDnaute Barbatruc
Re : Filtrage ListBox multicritères

Bonsoir.
Ça a le mérite de marcher, du moins à condition de taper un prénom unique dans liste, mais ça refait un travail déjà fait par CL, l'objet ComboBoxLiées. J'aimerais qu'il n'y ait pas de bouton "Recherche" et que les contrôles soient garnis automatiquement dès que CL a trouvé quelque chose, et pour ça je ne veux pas que soit programmé dans l'UserForm de test par rapport à une valeur de ComboBox. Je vous donne un indice : Sélectionnez CL dans la liste de gauche qui surmonte la fenêtre de code: il y apparaît en dessous de CBxTypeAbo et chez vous avant CommandBouton3 (parce que chez moi je l'ai renommé BtnQuitter pour que ce soit plus clair).

Je souhaiterais aussi qu'il n'y ait aucune expression Range de la forme Sheets("Liste").Range( etc. pour éviter tout risque d'erreur. (citation d'un bout de commentaire de recommandation dans le module de classe ComboBoxLiées)
Et aussi qu'il n'y ait pas plus d'un seul accès à un nombre quelconque de cellules dans chaque procédure.
Vous pouvez partir du principe que 10 chargements de valeur d'une seule cellule dans un contrôle durent 10 fois plus longtemps qu'un seul chargement de quelques dizaines de milliers de cellules dans un tableau VBA, tandis que le versement d'un élément de tableau dans un contrôle, lui, est instantané. En pratique c'est presque vrai…

Je vous livre, de ma version, les déclarations de début et une procédure :
VB:
Option Explicit
Dim WithEvents CL As ComboBoxLiées
Dim TLgn() As Long, LCou As Long, VLgn()
VB:
Private Sub GarnirChamps()
Me.TBxCivilité = VLgn(1, 2)
Me.TBxCatég = VLgn(1, 5)
Me.TBxVille = VLgn(1, 6)
Me.TBxAdresse = VLgn(1, 7)
Me.TBxCodPost = VLgn(1, 8)
Me.TBxEMail = VLgn(1, 9)
Me.TBxDatInscr = VLgn(1, 10)
End Sub
Vous remarquez qu'il n'y a plus de TextBox pour Nom et Prénom. Ils feraient en effet double emploi avec CBxNom et CBxPrénom.
 
Dernière édition:

screewy

XLDnaute Nouveau
Re : Filtrage ListBox multicritères

Bonjour Dranreb,

Merci pour le temps que tu passes.

Je pense être sur la bonne voie, mais ce que j'ai essayé n'est pas encore totalement fonctionnel.
La solution que j'ai n'affiche pas le résultat dans les TextBox s'il y a plusieurs ligne dans la ListBox. Je pense qu'il y a quelque chose que je n'ai pas encore compris.

Voici le fichier

Bien cordialement
 

Pièces jointes

  • CbxLiéesScreewy v3.xlsm
    117.6 KB · Affichages: 28

Dranreb

XLDnaute Barbatruc
Re : Filtrage ListBox multicritères

Bonsoir.
Vous avez bien avancé, c'est très bien !
Juste un premier truc curieux que je vois: les Redim , 1 To 200 et Resize(, 200), Je n'ai compté quant à moi que 10 colonnes et non 200.
Un 2ième (mais ce sont des broutilles): le TBxCivilité.Text = "" au début de la CL_Change. Il ne sert à rien, car soit NbrLgn = 1 et dans ce cas CL_Résultat sera exécuté et la fin de celle ci GarnirChamps y mettra la valeur trouvées dans VLgn, soit NbrLgn <> 1 et c'est dans cette CL_Change qu'on prépare un VLgn vide également à l'intention de GarnirChamps.

C'est plutôt une bonne chose que rien ne s'affiche dans les TextBox s'il reste plusieurs lignes correspondant aux choix incomplets effectués, non ? Maintenant pour l'exercice il manquait juste encore cette procédure :
VB:
Private Sub ListBox1_Click()
LCou = TLgn(ListBox1.ListIndex + 1)
VLgn = CL.PlgTablo.Rows(LCou).Resize(, 10).Value
CL.ValeursDepuis VLgn
GarnirChamps
End Sub
Allez, vous êtes largement allé assez loin pour mériter le corrigé que je tenais sous le coude. Bon boulot !
 

Pièces jointes

  • CbxLiéesScreewy.xlsm
    117.5 KB · Affichages: 54
  • CbxLiéesScreewy.xlsm
    117.5 KB · Affichages: 48

screewy

XLDnaute Nouveau
Re : Filtrage ListBox multicritères

Bonjour Dranreb,

Encore merci pour la formation, les explications et le fichier corrigé.
C'est vraiment très agréable d'voir pris le temps de me montrer ainsi que de m'avoir fourni vos modules explicatifs.

Concernant les Redim , 1 To 200 et Resize(, 200), j'avai mal compris l'utilisation. J'ai confondu avec le nombre de ligne. C'est pour cela que j'ai pris de la marge en mettant 200. Erreur de compréhension et donc d'utilisation de ma part.

Le fichier de correction est superbe.
Je vais étudier les erreurs pour faire mieux la prochaine fois.

Un très grand merci pour votre aide.

Bien cordialement
 
Dernière édition:

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 018
dernier inscrit
brahimkhder