Filtrer une partie déjà filtrée

Bonjour le forum,

Je vous écris aujourd'hui pour vous demander de l'aide au sujet des filtres.

En effet, j'ai un tableau de 5 colonnes.

J'aimerai créer un userform, qui me permette de filtrer sur les 5 colonnes. Je m'explique, j'aimerai sélectionner un critère de la première colonne et filtrer le tableau.

J'aimerai ensuite sélectionner un critère de la 2e colonne, qui va uniquement filtrer le tableau obtenu après le filtre de la colonne 1.

Et ainsi de suite, jusqu'à arriver à filtrer l'ensemble de mes 5 colonnes et isoler des lignes dont les critères des 5 colonnes sont correctes.

Est-ce possible de réaliser cela? Peut-on "travailler" directement sur un tableau déjà filtré pour y appliquer un autre filtre?

Je vous remercie d'avance pour votre aide!

Bonjour,

Une piste. Il te faut définir tes différents critères de filtrage dans le code (ici j'ai mis Critere1, Critere2, etc...) et la plage est définie de A1 à Ex :

Sub Filtre()

    Dim Plage As Range

    With Worksheets("Feuil1")

        Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 5).End(xlUp))

    End With

    'il te faut définir tes différents critères...
    With Plage

        .AutoFilter 1, Critere1 & "*" 'l'astérisque si tu veux filtrer seulement sur une partie du mot

        .AutoFilter 2, Critere2 & "*"

        .AutoFilter 3, Critere3 & "*"

        .AutoFilter 4, Critere4 & "*"

        .AutoFilter 5, Critere5 & "*"

    End With

End Sub

Hervé.

Bonjour Hervé,

Merci pour votre réponse.

En effet, c'est un bon début de solution.

Je m'y suis penché, mais je constate que je passe par un userform pour filtrer. Je m'explique: je clique sur des Checkbox pour sélectionner les critères de filtres. Je dois donc utiliser des boucle IF Checkbox1.Value=true then... et la je veux filtrer.

Le problème, c'est que je suis en multichoix et que j'ai jusqu'à 20 choix par colonnes et je ne souhaites vraiment pas écrire toutes les lignes correspondantes avec des If. Sinon j'ai une combinaison qui correspond à la multiplication du nombre de possibilités de chaque colonne ensemble soit plus de 300 chez moi.

Ta solution m'avait l'air bien. Y aurait-il un moyen d'adapter cela avec la sélection des Checkbox par exemple?

Encore merci pour le début de solution.

Y aurait-il un moyen d'adapter cela avec la sélection des Checkbox par exemple?

sans problème de prime abord mais il faudrait que tu poste un fichier exemple pour faciliter la chose.

Hervé.

Bonjour Hervé,

Désolé pour le retard, mais voici un fichier que j'ai crée pour l'occasion.

J'ai expliqué ce que j'aimerai dans le fichier et j'ai déjà mis en place l'userfom auquel je pensais.

Je souhaiterai donc pouvoir filtrer comme dit deux colonnes (dans mon exemple, mais plus en réalité), par l'intermédiaire de la sélection des checkbox dans mon userform.

Je vous remercie d'avance.

Bonne journée.

Xcelpowa

Bonjour,

Je ne dispose ici que de la version 2003 d'Excel et cette version ne prend pas les tableaux en critère de tri mais les versions ultérieures je crois que oui donc, teste ceci pour l'instant seulement pour la partie "Catégorie" et dis moi si ça fonctionne :

Private Sub CommandButton2_Click()

    Dim Plage As Range
    Dim Tbl()

    With Worksheets("Feuil1")

        Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 4).End(xlUp))

    End With

   With Plage

        If CheckBox1.Value = True Then
            ReDim Tbl(1 To 1)
            Tbl(1) = CheckBox1.Caption
        End If

        If CheckBox2.Value = True Then
            ReDim Preserve Tbl(1 To 2)
            Tbl(2) = CheckBox2.Caption
        End If

        If CheckBox3.Value = True Then
            ReDim Preserve Tbl(1 To 3)
            Tbl(3) = CheckBox3.Caption
        End If

        If CheckBox4.Value = True Then
            ReDim Preserve Tbl(1 To 4)
            Tbl(4) = CheckBox4.Caption
        End If

        .AutoFilter 2, Tbl, xlFilterValues

    End With

End Sub

Hervé.

Re,

Sinon, il y a le filtre élaboré :

Private Sub CommandButton1_Click()

    ActiveSheet.ShowAllData

End Sub

Private Sub CommandButton2_Click()

    Dim Plage As Range
    Dim Tbl()
    Dim PosCritere As Range

    ReDim Tbl(1 To 1)
    Tbl(1) = "Catégorie"

    If CheckBox1.Value = True Then
        ReDim Preserve Tbl(1 To UBound(Tbl) + 1)
        Tbl(UBound(Tbl)) = CheckBox1.Caption
    End If

    If CheckBox2.Value = True Then
        ReDim Preserve Tbl(1 To UBound(Tbl) + 1)
        Tbl(UBound(Tbl)) = CheckBox2.Caption
    End If

    If CheckBox3.Value = True Then
        ReDim Preserve Tbl(1 To UBound(Tbl) + 1)
        Tbl(UBound(Tbl)) = CheckBox3.Caption
    End If

    If CheckBox4.Value = True Then
        ReDim Preserve Tbl(1 To UBound(Tbl) + 1)
        Tbl(UBound(Tbl)) = CheckBox4.Caption
    End If

    With Worksheets("Feuil1")

        Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 4).End(xlUp))
        Set PosCritere = .Cells(.Rows.Count, 4).End(xlUp).Offset(3, 0).Resize(UBound(Tbl), 1)

    End With

    'positionne le range de critère sous la plage
    PosCritere.Value = Application.WorksheetFunction.Transpose(Tbl)

    'filtre
    Plage.AdvancedFilter xlFilterInPlace, PosCritere, , False

    'supprime la plage de critères
    PosCritere.Clear

End Sub

Hervé.

Bonjour Hervé,

Je viens de tester vos deux versions.

La première version est vraiment impeccable, je la trouve vraiment nickel pour les catégories, cela me filtre parfaitement comme je souhaite en cliquant sur les checkbox.

La deuxième avec le filtre élaboré a plus de mal (surtout que cela copie-colle? mes données un peu n'importe où si je modifie mon choix a chaque fois.

Je partirai donc plus sur la première méthode proposée qui fait très bien le travail pour les catégories.

Maintenant la question est de savoir comment filtrer par chef de projet en même temps.

En tout cas je vous remercie vraiment pour l'aide et l'avancée.

Bonne journée!

Bonjour,

Comme la première version semble te convenir, je te la re-poste avec le filtrage sur le chef de projet. J'ai ici Excel 2003 donc, je ne peux pas tester le code. Fais des tests et dis moi. Si j'ai le temps, je testerai chez moi car j'ai Excel 2007

Pour ce qui est du filtre élaboré, l'argument "Action" a la valeur "xlFilterInPlace" pour un filtrage en place donc, il ne devrait pas y avoir de collage des valeurs ailleurs ???

Private Sub CommandButton2_Click()

    Dim Plage As Range
    Dim Tbl()

    With Worksheets("Feuil1")

        Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 4).End(xlUp))

    End With

        'c'est le Caption des CheckBox qui définissent
        'les différents critères de la colonne "Catégorie"
        If CheckBox1.Value = True Then
            ReDim Tbl(1 To 1)
            Tbl(1) = CheckBox1.Caption
        End If

        If CheckBox2.Value = True Then
            ReDim Preserve Tbl(1 To 2)
            Tbl(2) = CheckBox2.Caption
        End If

        If CheckBox3.Value = True Then
            ReDim Preserve Tbl(1 To 3)
            Tbl(3) = CheckBox3.Caption
        End If

        If CheckBox4.Value = True Then
            ReDim Preserve Tbl(1 To 4)
            Tbl(4) = CheckBox4.Caption
        End If

        'applique le filtrage sur "Catégorie"
        Plage.AutoFilter 2, Tbl, xlFilterValues

        'vide le tableau
        Erase Tbl

        'Critères pour le chef de projet
        If CheckBox5.Value = True Then
            ReDim Tbl(1 To 1)
            Tbl(1) = CheckBox5.Caption
        End If

        If CheckBox6.Value = True Then
            ReDim Preserve Tbl(1 To 2)
            Tbl(2) = CheckBox6.Caption
        End If

        If CheckBox7.Value = True Then
            ReDim Preserve Tbl(1 To 3)
            Tbl(3) = CheckBox7.Caption
        End If

        If CheckBox8.Value = True Then
            ReDim Preserve Tbl(1 To 4)
            Tbl(4) = CheckBox8.Caption
        End If

        If CheckBox9.Value = True Then
            ReDim Preserve Tbl(1 To 5)
            Tbl(5) = CheckBox9.Caption
        End If

        'applique le filtrage sur "Chef de projet"
        'et ce, sur le filtrage précédent
        Plage.AutoFilter 3, Tbl, xlFilterValues

End Sub

Hervé.

Bonjour Hervé,

Merci beaucoup pour les lignes de code.

Cela fonctionne parfaitement , je viens de le tester.

Je vais adapter cela maintenant à mon problème et cela devrait aller .

Juste encore le fait de ne rien sélectionner, qui produit une erreur, mais je devrais trouver comment régler cela.

Merci beaucoup à toi pour ton aide tout au long de ces derniers jour et une très bonne journée!

Xcelpowa

Bonsoir,

Juste encore le fait de ne rien sélectionner, qui produit une erreur, mais je devrais trouver comment régler cela.

Tu peux faire une test sur Ubound(Tbl) :

    Dim Test As Integer
    '...
    '...
        Test = UBound(Tbl, 2)

        If Err.Number <> 0 Then

            MsgBox "Vous devez sélectinner au moins une catégorie !"
            Exit Sub

        End If
    '...
    '...

Hervé.

Bonjour Hervé,

Super, merci beaucoup!

Tu m'as bien sauvé le coup avec tous tes bons bouts de codes.

Je te remercie encore et une bonne journée.

xcelpowa

Rechercher des sujets similaires à "filtrer partie deja filtree"