IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Filtre automatique dans combobox VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 55
    Par défaut Filtre automatique dans combobox VBA
    Bonjour,

    J'ai codé une petite application en VBA qui me permet de réaliser des filtres automatique mais sans un aspect "feuille Excel".

    ouskel'n'or m'a aidé à résoudre pas mal de petits soucis (ici).

    Mais il me reste une problématique:
    J'ai un tableau et dans un userform 10 combobox qui correspondent chacune à une colonne de mon tableau. C'est combobox sont alimentées de telle façon qu'il n'y ait pas de doublon et classé par ordre alphabétiques.

    Toutes ces combobox fonctionne très bien indépendamment (le résultat du filtre s'affiche dans une listebox) mais je souhaiterais qu'elle fonctionne comme un filtre automatique sous Excel. C'est à dire que dès que je sélectionne une combobox, les autres se recalcule en fonction du résultat.

    Je met le programme en pièce jointe et le code de la fonction qui remplit ses combobox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub UserForm_Initialize()
        Dim Plage As Range
        Set Plage = Range("A1").CurrentRegion
        RemplirListe RechercheC1, Plage, 1
        RemplirListe RechercheC2, Plage, 2
        RemplirListe RechercheC3, Plage, 4
        RemplirListe RechercheC4, Plage, 5
        RemplirListe RechercheC5, Plage, 6
        RemplirListe RechercheC6, Plage, 7
        RemplirListe RechercheC7, Plage, 8
        RemplirListe RechercheC8, Plage, 9
        RemplirListe RechercheC9, Plage, 10
        RemplirListe RechercheC10, Plage, 13
        Call Rechercher
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub RemplirListe(Liste As ComboBox, Plage As Range, Colonne As Long)
        Dim j As Long
        With Plage
            'Tri sur la colonne
            .Sort key1:=.Cells(1, Colonne), order1:=xlAscending, Header:=xlYes
            'Ajoute la 1ere entree (2eme ligne)
            Liste.AddItem .Cells(2, Colonne)
            For j = 3 To .Rows.Count - 1
                'Ne charge pas les cellules vides
                If IsEmpty(.Cells(j, Colonne)) Then Exit For
                'Filtre les doublons
                If .Cells(j, Colonne) <> .Cells(j - 1, Colonne) Then Liste.AddItem .Cells(j, Colonne)
            Next
        End With
    End Sub
    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello fabien, peux-tu donner un exemple ?
    Je sélectionne quoi dans quelle liste et je veux obtenir quoi dans les autres liste ?... Par exemple

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 55
    Par défaut
    Par exemple je sélectionne largeur = 90

    Donc dans la liste box on voit le résultat de la recherche:

    Il n'y a que du "contrecollé" (type), que du "CLIC" (type de pose), qu'un fournisseur, etc

    Et quand on regarde les autres combobx, et bien elle sont restés avec les valeurs de départ. Et donc, d'une c'est pas très pratique pour appliquer un autre filtre en plus du premier, et de deux ça fait planter l'application si je choisit un autre 2e critère non présent dans la listebox, par exemple "R+L" (type de pose)

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Donc, si tu sélectionnes dans une liste, l'item correspond à un N° de ligne dans la base de données et, sur la même ligne, tu as les renseignements qui vont bien... Si c'est ça, je ne comprends pas l'usage des listeBox. Que dois-tu avoir dans les autres listes ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 55
    Par défaut
    -Mon tableau de donnée fait 1000 lignes
    -Je sélectionne dans la combobox 1 le critère "CLIC" (correspondant à la colonne 1 de mon tableau)
    -Il y a 500 ligne de mon tableau qui répondent à ce critère. Elles sont affichées dans la listebox
    -Ma liste box est remplie de ses 500 lignes
    -Je sélectionne dans la combobox 2 le critère "20" (correspondant à la colonne 2 de mon tableau)
    -Il y a 100 lignes de mon tableau qui répondent à ces critères.
    -Elles sont affichées dans la listebox
    Ainsi de suite

    Le souci est que mes combobox s'alimentent au début de l'application sur les 3000lignes du départ et non sur le résultat des recherches.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ton problème est assez tordu puisque dans un filtre tu ne peux entrer que deux critères. Dans Contribuez, tu as une méthode pour obtenir un filtre sans t'occuper du nombre de critères mais je ne vois pas encore comment l'adapter. Jète toujours un oeil, juste pour le principe mais ne t'y attarde pas.
    Ce qu'il faudrait faire est un appel à une fonction filtre qui fonctionnerait en cascade en partant de la première sélection. Reste à écrire la mécanique...
    Dès que j'ai un moment, je regarde mais ne te promets rien...
    En attendant je laisse donc la place à ceux qui ont de l'imagination
    A+ quand même, la question reste intéressante

  7. #7
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors voilà ! Après mure réflexion et un mal de tête carabiné, j'ai pensé à une solution.
    On part du combo1
    Tu sélectionnes un item.
    Cet item devient le critère 1
    Tu places ce critère dans un tableau (avec Redim Preserve)
    Dans le combo 2, tu te contentes de la liste obtenue avec un filtre sur le critère 1
    Dans Combo 2, tu sélectionnes un item
    Cet item devient le critère 2
    Tu places ce critère dans un tableau (avec Redim Preserve)
    Dans le combo 3, tu peux encore te contenter de la liste obtenue avec un filtre sur les critères 1 et 2
    On a atteint la limite des critères dans un filtre auto
    Dans Combo 3, tu sélectionnes un item
    Tu places ce critère dans un tableau (avec Redim Preserve)
    Là, avec ton tableau, tu peux utiliser la procédure dont je t'ai donné le lien
    Tu obtiendras ainsi la liste à utiliser pour renseigner le Combo 4
    Dans Combo 4, tu sélectionnes un item
    Tu continues à placer ce critère dans le tableau
    etc.

    Maintenant, si on veut uniformiser tout ça, au lieu de varier les plaisirs, pour chaque sélection dans un combo, tu utilises la même procédure en mettant ton tableau en paramètre.
    Avec un seul item dans ton tableau, ça fonctionnera aussi bien qu'avec plusieurs et ça simplifiera l'écriture.
    Si j'ai bien compris (!)

    Still to do...

    Tu crois que tu pourras t'en sortir ?
    A+

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 55
    Par défaut
    ouahh....

    Je vais tentes de coder tout ça. A tête reposé bien sur

    Est ce que c'est gênant si l'ordre des critères varie. Une personne peu très bien commencer par le critère 5, puis le 2, puis le 4 etc ?

    Merci à toi ouskel'n'or. Tu veux un aspirine

    Merci pour la piste delphi

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par fabien114 Voir le message
    Est ce que c'est gênant si l'ordre des critères varie. Une personne peu très bien commencer par le critère 5, puis le 2, puis le 4 etc ?
    En principe, non. Tu crées le tableau de critères au fur et à mesure.
    Il faudrait tout de même prévoir un bouton pour ré-initialiser tes combos afin de saisir une nouvelle "combinaison" et donc placer le code que tu as mis dans Userform_Initialise dans une procédure que tu puisses appeler depuis Userform_Initialise et depuis ce bouton.
    Si tu ne tu as un pb, tu dis

    Tu veux un aspirine
    Merci, c'est fait

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je crois que j'ai mal compris ta question : Tu veux que chaque donnée de ton combo ListBoxParquet soit reporté dans chaque combo RechercheC ?
    Si c'est ça, j'ai effectivement mal compris.
    Tu peux préciser ?
    A+

Discussions similaires

  1. [XL-2010] Filtre automatique dans userform
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 20/07/2011, 00h42
  2. [AC-2007] Filtres automatiques dans un formulaire
    Par vandrie dans le forum IHM
    Réponses: 1
    Dernier message: 06/09/2010, 17h23
  3. [XL-2003] Filtre Automatique dans tableau
    Par Tintou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/03/2010, 18h15
  4. Saisie semi-automatique dans combobox
    Par method_man dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/04/2007, 16h11
  5. [Excel] Récupération d'un filtre automatique dans une cellule
    Par billy123 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/03/2007, 15h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo