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 :

Faire un filtre dans un tableau à l'aide d'une multi-select listbox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyste d'affaires
    Inscrit en
    Mai 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'affaires
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 34
    Points : 33
    Points
    33
    Par défaut Faire un filtre dans un tableau à l'aide d'une multi-select listbox
    Bonjour à tous,

    Je cherche présentement comment effectuer un filtre dans un tableau à l'aide d'une sélection faite dans une ListBox qui peut détenir plusieurs valeurs.
    Voici ce que j'ai en ce moment pour les combobox avec une seule valeur (ça fonctionne bien):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveSheet.ListObjects("RefinedData_tb").Range.AutoFilter Field:=3, _
            Criteria1:=ChoixMois.Value
    J'ai essayé la même chose pour la listbox et j'ai aussi essayé avec un array(ChoixDSM), car le nouveau champ s'appel ainsi et ça ne fonctionne pas.

    Voici les champs qui peuvent être sélectionnés dans la ListBox : A10 A20 AS1 AS2 C01 C05 C06 E01 L01 L02 L03.
    Ils peuvent être tous sélectionnés à la fois au même titre qu'une seule option peut l'être.

    Quelqu'un à déjà fait ceci ou sait comment faire?

    Merci d'avance!
    Nomorerulz

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Il faudrait passer par un tableau
    Si tu utilises un bouton pour lancer le filtrage, essaie comme ceci en changeant les noms des contrôles...

    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
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub CommandButton1_Click()
        Dim I As Long, Idx As Long
        Dim Tablo
     
        ReDim Tablo(Idx)
        Idx = -1
        For I = 0 To Me.ListBox1.ListCount - 1
            If Me.ListBox1.Selected(I) Then
                Idx = Idx + 1
                ReDim Preserve Tablo(Idx)
                Tablo(Idx) = CStr(Me.ListBox1.List(I))
            End If
        Next
     
        If Idx >= 0 Then
            FiltrerTableau Tablo
        End If
    End Sub
     
    Sub FiltrerTableau(Tablo)
        ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:=Tablo, Operator:=xlFilterValues
     
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Analyste d'affaires
    Inscrit en
    Mai 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'affaires
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    Merci Parmi,

    Je sens que je ne suis pas loin.
    Je vois que les données sont entrées dans le tablo, mais je reçois l'erreur suivante lorsque je fais une sélection et ça bloque à la ligne 41
    Nom : 2016-06-17 10-10-36.jpg
Affichages : 348
Taille : 15,3 Ko

    Voici le code que j'ai en place :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Sub btOK_Click()
     
        Dim I As Long, Idx As Long
        Dim Tablo
     
        ReDim Tablo(Idx)
        Idx = -1
        For I = 0 To Me.ChoixDSM.ListCount - 1
            If Me.ChoixDSM.Selected(I) Then
                Idx = Idx + 1
                ReDim Preserve Tablo(Idx)
                Tablo(Idx) = CStr(Me.ChoixDSM.List(I))
            End If
        Next
     
        If Idx >= 0 Then
            FiltrerTableau Tablo
        End If
    'End Sub
     
     
     
    '----------Filtrer les données choisient dans le formulaire-----------------------------------------
        Worksheets("Refined_Data").Activate
        ActiveSheet.ListObjects("RefinedData_tb").Range.AutoFilter Field:=2, _
            Criteria1:="2016"       'Création du faux filtre
         ActiveSheet.ShowAllData     'Retirer les filtres
        ActiveSheet.ListObjects("RefinedData_tb").Range.AutoFilter Field:=2, _
            Criteria1:=ChoixAn.Value
        ActiveSheet.ListObjects("RefinedData_tb").Range.AutoFilter Field:=3, _
            Criteria1:=ChoixMois.Value
    '    ActiveSheet.ListObjects("RefinedData_tb").Range.AutoFilter Field:=5, _
    '        Criteria1:=Array(ChoixDSM.Value), Operator:=xlFilterValues
     
    ' Sheets("Refined_Data").Range("b50") = ChoixDSM.Value
     
    Unload Me
     
    End Sub
    Sub FiltrerTableau(Tablo)
        ActiveSheet.ListObjects("RefinedData_tb").Range.AutoFilter Field:=5, Criteria1:=Tablo, Operator:=xlFilterValues
     
    End Sub
    Un conseil?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Analyste d'affaires
    Inscrit en
    Mai 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'affaires
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    TOUT FONCTIONNE!!

    J'ai simplement ajouté un worksheet().Activate avec la bonne feuille avant d'effectuer le filtre et tout marche à merveille.

    Merci encore!

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 127
    Points : 9 956
    Points
    9 956
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    au lieu de faire un Worksheets("Refined_Data").Activate, remplace tout tes ActiveSheet par Worksheets("Refined_Data") et (mieux encore) passe par un bloc With pour ne pas répéter, ou utilise une variable Worksheet.

    Pour gérer ton activesheet de la procédure FiltrerTableau, il te suffit d'ajouter un paramètre pour passer la feuille dans la procédure

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-Excel] Faire un filtre dans un tableau croisé dynamique
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/11/2006, 15h05
  2. [C#][Débutant] Comment faire un filtre dans un datagriview
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/05/2006, 18h13
  3. [Struts layout] comment faire un ascenseur dans un tableau
    Par chouchou93 dans le forum Struts 1
    Réponses: 4
    Dernier message: 21/02/2006, 09h08

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