Cases à cocher - Filtres - Plusieurs cases

Bonjour à tous.

J'essaye d'appliquer un filtre en fonction de cases à cocher qui vont chercher le texte correspondant dans une colonne et n'affiche que les éléments correspondants.

J'ai trouvé une formule macro qui marche ( attention dans mon tableau A2 n'indique pas la cellule A2, mais bien un texte A2 )

Sub cocheA2()
If Range("B2") <> VRAI Then
ActiveSheet.Range("E:E").AutoFilter Field:=1, Criteria1:="A2"
Else
ActiveSheet.Range("E:E").AutoFilter Field:=1
End If
End Sub

Sub cocheG2()
If Range("C2") <> VRAI Then
ActiveSheet.Range("E:E").AutoFilter Field:=1, Criteria1:="G2"
Else
ActiveSheet.Range("E:E").AutoFilter Field:=1
End If
End Sub

Cela marche bien quand je coche une case, mais pas si j'en coche plusieurs. Les résultats ne s'additionnent pas, mais effacent le filtre précédent.

C'est très logique en ce qui concerne le code actuel. Néanmoins, ce n'est pas le résultat que je souhaite ^^

J'aimerais pouvoir cumuler les filtres en cochant une ou plusieurs cases. J'avais peut-être dans l'idée d'ajouter les informations cochées dans une variable, et que le contenu de la variable soit récupérée dans le criteria de filtre. Mais je ne vois pas trop comment faire ( y'a peut-être plus simple... )

Avez-vous des idées ?

Merci beaucoup

142questioncheckbox.xlsm (209.76 Ko)

Bonjour,

J'aimerais pouvoir cumuler les filtres en cochant une ou plusieurs cases.

Lorsque vous voulez filtrer A2, dans la colonne E, il y a des cellules, qui combinent plusieurs valeurs incluant notamment A2 et G2. Quelles sont les valeurs à montrer ? A2 seul ou G2 seul ou les deux ?

Voici un code à essayer pour les cases à cocher A2, G2. Le code montre A2 et G2 mais pas les cellules qui combinent A2 et G2 dans une seule cellule

Sub Coche()
With ActiveSheet

    Select Case UCase(.Range("B2"))
        Case Is = "VRAI"
            Select Case UCase(.Range("C2"))
                Case Is = "VRAI": .Range("E:E").AutoFilter Field:=1, Criteria1:="=A2", Operator:=xlOr, Criteria2:="=G2"
                Case Is = "FAUX": .Range("E:E").AutoFilter Field:=1, Criteria1:="A2"
            End Select

        Case Is = "FAUX"
            Select Case UCase(.Range("C2"))
                Case Is = "VRAI": .Range("E:E").AutoFilter Field:=1, Criteria1:="=G2"
                Case Is = "FAUX": .Range("E:E").AutoFilter Field:=1
            End Select
    End Select

End With
End Sub

Je pense qu'il serait préférable de fonctionne autrement.Par exemple vous supprimez toutes les cases à cocher et vous faites une liste de toutes les valeurs à filtrer en colonne A. Colonne B vous la laissez vide. Colonne C et suivante votre tableau Prof etc...

Votre avis ?

Cordialement

Bonjour Dan et merci pour votre retour.

Pa rapport à votre réponse, non il faudrait que ça puisse aussi afficher une cellule qui contiendrait A2 et G2. Et concernant votre proposition, je ne suis pas sûr de saisir la finalité, même si de ce que je comprends ça pourrait marcher, mais malheureusement ça m'embête un peu de déplacer le tableau en C.
J'avoue que je galère un peu... mais je vais continuer à fouiller avec vos propositions, merci beaucoup

Bonjour

Pa rapport à votre réponse, non il faudrait que ça puisse aussi afficher une cellule qui contiendrait A2 et G2.

Remplacez le code par celui-ci

Sub Coche()
With ActiveSheet

    Select Case UCase(.Range("B2"))
        Case Is = "VRAI"
            Select Case UCase(.Range("C2"))
                Case Is = "VRAI": .Range("E:E").AutoFilter Field:=1, Criteria1:="=*A2*", Operator:=xlOr, Criteria2:="=*G2*"
                Case Is = "FAUX": .Range("E:E").AutoFilter Field:=1, Criteria1:="*A2*"
            End Select

        Case Is = "FAUX"
            Select Case UCase(.Range("C2"))
                Case Is = "VRAI": .Range("E:E").AutoFilter Field:=1, Criteria1:="=*G2*"
                Case Is = "FAUX": .Range("E:E").AutoFilter Field:=1
            End Select
    End Select

End With
End Sub

mais malheureusement ça m'embête un peu de déplacer le tableau en C.

Pour cette proposition, c'est juste que ce serait plus facile dans le code. Votre idée de variable est bien mais me semble plus compliquée à réaliser d'autant que le code doit se baser sur les mentions vrai ou faux qui suppose aussi que les cases à cocher ne bougent pas (inversion par exemple de G2 et A2..qui ne fait pas bouger le Vrai ou Faux dans les cellule à droite) mais on peut tenter le coup.

Cordialement

C'est super votre code marche parfaitement et filtre bien les cellules selon qu'elles contiennent ou non l'info.

Si je comprends bien, si à présent je veux appliquer la même chose pour toutes mes autres cases à cocher, je suis obligé de venir rajouter des case is pour chacune les unes à l'intérieur des autres ?..

Ca va faire beaucoup de lignes à tiroir mais ok je vois le principe. Je vais tester

Merci encore

Arf j'ai essayé avec des if else comme ca superposés en tiroir mais ca devient vite ingérable je me retrouve vite avec 3000 lignes de code. Je pourrais à la limite le faire une fois, mais si un moment je suis obligé de modifier deux trois éléments ca va devenir compliqué...

Bon effectivement, je me retrouve avec un code à 8000 lignes. Et quand je coche la case pour filtrer, excel me dit " trop de variables mobile"... Je suis bien embêté...

Quelle serait votre solution plus détaillée si je décale le tableau en colonne C ?

Re

Arf j'ai essayé avec des if else comme ca superposés en tiroir mais ca devient vite ingérable je me retrouve vite avec 3000 lignes de code. Je pourrais à la limite le faire une fois, mais si un moment je suis obligé de modifier deux trois éléments ca va devenir compliqué...

Oui mais si je ne me trompe il y a une limite de lignes de code bien en dessous qu'excel VBA est capable de lire. D'où la raison pour laquelle je vous avais parlé de voir les choses autrement. Quoi qu'il en soit essayer le code ci-dessous qui, je pense, donne ce que vous voulez. Il faut relier toutes les cases à cocher à ce code là qui m'a donné du fil à retordre

Sub coche()
Dim i As Integer
Dim item
Dim valeur As New Collection
Dim compt As Byte

Cells.EntireRow.Hidden = False

For i = 1 To 11
    If ActiveSheet.CheckBoxes(i).Value = xlOn Then
        valeur.Add ActiveSheet.CheckBoxes(i).Caption
    End If
Next i

For i = 7 To Range("E" & Rows.Count).End(xlUp).Row
    For Each item In valeur
        If Range("E" & i) Like "*" & item & "*" Then compt = compt + 1
        If compt > 1 Then Exit For
    Next item

    If compt = 0 Then Range("E" & i).EntireRow.Hidden = True

    compt = 0
Next i
End sub

Dans ce code on masque les lignes dont on n'a pas besoin. Tout se passe hors filtre automatique

Cordialement

C'est génial, ça marche ! Merci beaucoup !!

Je me doute que ça a pas du être facile, j'y connais pas grand chose mais même en essayant de comprendre chaque ligne je galère un peu ^^.

Si je peux me permettre de vous demander une dernière chose... Là quand rien n'est coché du coup tout disparaît, alors que j'aimerais que tout apparaisse. Hors si je passe la ligne If compt = 0 Then Range("E" & i).EntireRow.Hidden = True

en False, tout réapparaît mais cela ne filtre plus rien...

Du coup auriez-vous une solution avec ce même code ? Je pourrais aussi rajouter une case ALL pour tout cocher, mais dans ce cas là ce code ne marchera plus, et il faut que je rajoute une valeur ALL dans la colonne filtrée.

Bonjour

essayez comme ceci

Sub coche()
Dim i As Integer
Dim item
Dim valeur As New Collection
Dim compt As Byte

Cells.EntireRow.Hidden = False

For i = 1 To 11
    If ActiveSheet.CheckBoxes(i).Value = xlOn Then
        valeur.Add ActiveSheet.CheckBoxes(i).Caption
    End If
Next i
if valeur.count = 0 then Cells.EntireRow.Hidden = False : exit sub

For i = 7 To Range("E" & Rows.Count).End(xlUp).Row
    For Each item In valeur
        If Range("E" & i) Like "*" & item & "*" Then compt = compt + 1
        If compt > 1 Then Exit For
    Next item

    If compt = 0 Then Range("E" & i).EntireRow.Hidden = True

    compt = 0
Next i
End sub

Cordialement

Très fort...

C'est parfait merci beaucoup pour votre aide Dan !!

PAs de soucis

Edit 04/09 : ok j'ai cloturé

Rechercher des sujets similaires à "cases cocher filtres"