Microsoft 365 Filtrer une ListView sur un intervalle de valeurs avec ComboBox

Lyrix

XLDnaute Nouveau
Bonjour,

Je souhaite réaliser une sorte de guide interactif à partir d'une base de données de produits. En naviguant à travers les forums j'ai trouvé une solution de l'utilisateur p56 (merci beaucoup) sur une ListView avec filtre en cascade à partir de Combobox. Tout ceci fonctionne à merveille sur l'utilisation prévue.

J'aimerai aller plus loin sur deux points :
- faire filtrer les données de la ListView sur des tranches de valeurs présentes dans ma base
Dans le fichier ci-joint, l'objectif est d'afficher la valeur de la colonne M dans ma ListView si la valeur de la ComboBox "Dosage" (que l'on remplacerait par une TextBox idéalement) est dans la tranche de valeur comprise entre la colonne N et O (non affichées)

- remplacer le système de ComboBox actuel par des TextBox permettant aux utilisateurs de rentrer des données manuellement pour filtrer par étape la ListView et voir si un produit correspond à leurs besoins

J'ai essayé plusieurs approches pour filtrer la ListView mais seule cette méthode permet efficacement de faire des filtres en cascade. Ainsi des boucles sont créées et je ne m'en sors plus. C'est la première fois qu'en dix ans de travaux Excel je m'avoue vaincu et m'en remets à vous directement.

Voici mon fichier avec juste ce qu'il faut de données pour travailler avec le code dedans.

Quelqu'un peut m'aider ?

PS : j'en profite pour remercier l'ensemble des utilisateurs du forum pour leurs posts de ces dernières années, comme ça
 

Pièces jointes

  • Pour question forum.xlsm
    35 KB · Affichages: 7
Solution
Bonjour Lyrix,
Si on remplace les combobox par des textbox, on a plus besoin de lier de liste.
Le code peut alors être simplifié, voir démo
Est-ce que j'ai bien compris la demande?
P56 (du site tatiak.canalblog.com)

p56

XLDnaute Occasionnel
Bonjour Lyrix,
Si on remplace les combobox par des textbox, on a plus besoin de lier de liste.
Le code peut alors être simplifié, voir démo
Est-ce que j'ai bien compris la demande?
P56 (du site tatiak.canalblog.com)
 

Pièces jointes

  • Pour question forum.xlsm
    40.4 KB · Affichages: 8

Lyrix

XLDnaute Nouveau
Bonjour p56,

Merci beaucoup c'est incroyable c'est exactement ce que je souhaitais avoir comme résultat.

Je vais avoir deux autres comparaisons à faire comme pour le dosage, je n'ai qu'à ajouter des blocs à la suite de celui-ci en ajustant le nom de la TextBox et les numéros de colonnes dans le Clng(Tkt(i, 14)) j'imagine ?

VB:
If Not Usf.TextBox10.Value = "" Then     ' dosage compris entre min et max (col N & O)
     Cnd = Cnd And Usf.TextBox10.Value >= CLng(Ttk(i, 14)) And Usf.TextBox10.Value <= CLng(Ttk(i, 15))
End If

Enfin si un jour je souhaite combiner des ComboBox et des TextBox, puis-je reprendre les deux codes mis bout à bout en évitant les doublons de variables ?

En te souhaitant une bonne journée, car tu as changé la mienne !
 

p56

XLDnaute Occasionnel
Ok, c'est bien si ça convient.

* pour une autre comparaison on peut effectivement ajouter au dessous des lignes citées un if-then similaire et adapté.
Et si les valeurs de comparaisons ne sont pas que des entiers un Csng sera mieux que le Clng (avec décodage du séparateur de décimales FR-US)

* pour combiner textbox et combobox, un copier/coller simple ne va peut être pas suffire.
Il faudra plutôt voir selon le cas de figure, mais on pourra garder possiblement le même principe.

Et si on complexifie le filtrage, peut être qu'une solution autre pourrait être plus pertinente.
Un autre fichier "question" serait peut être alors utile ...

Autre détail : ici le code fait appel à Application.Transpose. C'est une fonction Excel qui a ses limites.
En fonction de la quantité de données, on pourrait être amené à utiliser une alternative - à voir en fonction du besoin.

p56
 

Discussions similaires

Réponses
69
Affichages
4 K