Défiltrer second clic sur case à cocher
Bonjour le forum!
J'aimerai comme le titre l'indique, "défiltrer" au second clic sur une checkbox (donc quand checkbox décochée).
En effet lors du premier clic cela exécute ma macro liée mais quand je décoche cela ne me supprime pas le filtrage qui a été effectué lors du premier clic.
Voici le fichier test, toutes les checkbox fonctionne mais un exemple sur une me suffira à reproduire, je pense, la chose sur les autres.
http://www.cjoint.com/15fe/EBjjMUZITiF.htm
En espérant trouver de l'aide! Merci d'avance et à très vite!
Bonjour
Zayx a écrit :un exemple sur une me suffira à reproduire, je pense, la chose sur les autres.
Alors voilà :
Private Sub CheckBox1_Click()
If CheckBox1 = False Then
ActiveSheet.ShowAllData
Else
Call Genre_Amnésie
End If
End SubBon courage !
Bye !
Bonjour Zayx, gmb
Sinon une procédure générique, plutôt qu'une multitude de procédures
' Procédure générale
Sub FiltrerGenre(sGenre As String, Actif As Boolean)
Dim Obj As Object
Application.ScreenUpdating = False
For i = 1 To 10
nom = Choose(i, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
Cells(17, i) = nom
Cells(4, i + 10) = nom
Cells(4 + i, i + 10) = sGenre & "*" '"Amnésie*"
Next i
If Actif Then
Range("A17:J" & Range("A" & Rows.Count).End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("K4:T14"), Unique:=False
Else
ActiveSheet.ShowAllData
End If
Range("A17:A10").ClearContents
Range("k4:T14").ClearContents
End SubEt derrière chaque Checkbox, tu appelles la procédure générique avec le genre et la valeur du checkbox
Private Sub CheckBox1_Click()
Call FiltrerGenre("Amnésie*", Me.CheckBox1.Value)
End SubA+
Bonjour gmb, Bruno!
Alors si j'ai bien compris, vos deux macro activent Showalldata si la case à cocher est décochée, c'est bien ça?
Or moi j'aimerai que seul le filtre, par exemple le premier, "Amnésie" soit défiltré.
Je serai amené plus tard à cumuler des filtres (par exemple afficher tous les titres qui font partie des genres "Amnésie" et "Android") et donc quand je "défiltrerai" une case ("Amnésie") à cocher sur les deux et bien l'autre ("Android") restera filtré tant que je n'y toucherai pas.
Vous voyez la subtilité?
Pour ce qui est de ta procédure générique Bruno j'ai compris comment elle fonctionne, je la garde de côté et metterai ça à jour.
En tout cas merci pour vos réponses et j'espère que la "subtilité" sera saisie et qu'on pourra y faire quelque chose
A très vite!
Re,
Zayx a écrit :Alors si j'ai bien compris, vos deux macro activent Showalldata si la case à cocher est décochée, c'est bien ça?
Or moi j'aimerai que seul le filtre, par exemple le premier, "Amnésie" soit défiltré.
Je serai amené plus tard à cumuler des filtres (par exemple afficher tous les titres qui font partie des genres "Amnésie" et "Android") et donc quand je "défiltrerai" une case ("Amnésie") à cocher sur les deux et bien l'autre ("Android") restera filtré tant que je n'y toucherai pas.
C'est tout le code qu'il faut revoir alors, car actuellement le filtrage sur critères cumulés n'existe pas
Donc on ne peut que supprimer le filtre
A+
BrunoM45 a écrit :Re,
C'est tout le code qu'il faut revoir alors, car actuellement le filtrage sur critères cumulés n'existe pas
Donc mon désir de faire des filtres cumulés est impossible à réaliser?
Salut Zayx,
Zayx a écrit :Donc mon désir de faire des filtres cumulés est impossible à réaliser?
Non, il fallait juste se pencher un peu plus sur le sujet
Voici ton fichier avec les modifications
https://www.cjoint.com/c/EBms1JShT3O
Dis nous
Bonjour Bruno, le forum!
Alors j'ai DL le fichier mais je ne vois aucune modif. Le défiltrage lorsqu'on décoche une case non effectif ni même le filtrage cumulé...
Pas de code différente de mon fichier d'origine non plus, un fail ou alors moi qui ne vois pas ce qu'il faut?
Bonsoir Zayx
Oups vraiment désolé, je n'ai pas mis le bon fichier
Je change le lien du précédent message
A+
Bonsoir Bruno, le forum!
Encore une fois, je ne sais pas si tu as déjà remplacé le lien ou pas mais c'est toujours le même fichier
Dans l'attente je te souhaite une bonne soirée et à très vite
Bonsoir Zayx
Je n'y comprend rien
J'ai l'impressions que le site n'a pas su remplacer le fichier téléchargé
Cette fois-ci j'ai récupéré le fichier une fois mis sur le site et c'est le bon
Sinon le code de la Feuille de Genres
'Call FiltrerGenre("*", Me.CheckBox??.Value)
Private Sub CheckBox1_Click()
Call FiltrerGenre("Amnésie*", Me.CheckBox1.Value)
End Sub
Private Sub CheckBox10_Click()
Call FiltrerGenre("Basket-ball*", Me.CheckBox10.Value)
End Sub
Private Sub CheckBox11_Click()
Call FiltrerGenre("Bro.com*", Me.CheckBox11.Value)
End Sub
Private Sub CheckBox12_Click()
Call FiltrerGenre("Comédie*", Me.CheckBox12.Value)
End Sub
Private Sub CheckBox13_Click()
Call FiltrerGenre("Combat*", Me.CheckBox13.Value)
End Sub
Private Sub CheckBox14_Click()
Call FiltrerGenre("Cyclisme*", Me.CheckBox14.Value)
End Sub
Private Sub CheckBox15_Click()
Call FiltrerGenre("Ecchi*", Me.CheckBox15.Value)
End Sub
Private Sub CheckBox16_Click()
Call FiltrerGenre("Fantastique*", Me.CheckBox16.Value)
End Sub
Private Sub CheckBox17_Click()
Call FiltrerGenre("Fantasy*", Me.CheckBox17.Value)
End Sub
Private Sub CheckBox18_Click()
Call FiltrerGenre("Cuisine*", Me.CheckBox18.Value)
End Sub
Private Sub CheckBox19_Click()
Call FiltrerGenre("Drame*", Me.CheckBox19.Value)
End Sub
Private Sub CheckBox2_Click()
Call FiltrerGenre("Android*", Me.CheckBox2.Value)
End Sub
Private Sub CheckBox20_Click()
Call FiltrerGenre("Equitation*", Me.CheckBox20.Value)
End Sub
Private Sub CheckBox21_Click()
Call FiltrerGenre("Foot-ball*", Me.CheckBox21.Value)
End Sub
Private Sub CheckBox22_Click()
Call FiltrerGenre("Foot-ball Américain*", Me.CheckBox22.Value)
End Sub
Private Sub CheckBox23_Click()
Call FiltrerGenre("Film d'animation*", Me.CheckBox23.Value)
End Sub
Private Sub CheckBox24_Click()
Call FiltrerGenre("Guerre*", Me.CheckBox24.Value)
End Sub
Private Sub CheckBox25_Click()
Call FiltrerGenre("Gun-fight*", Me.CheckBox25.Value)
End Sub
Private Sub CheckBox26_Click()
Call FiltrerGenre("Harem*", Me.CheckBox26.Value)
End Sub
Private Sub CheckBox27_Click()
Call FiltrerGenre("Histoire courte*", Me.CheckBox27.Value)
End Sub
Private Sub CheckBox28_Click()
Call FiltrerGenre("Héroïc-Fantasy*", Me.CheckBox28.Value)
End Sub
Private Sub CheckBox29_Click()
Call FiltrerGenre("Horreur", Me.CheckBox29.Value)
End Sub
Private Sub CheckBox3_Click()
Call FiltrerGenre("Androphobie*", Me.CheckBox3.Value)
End Sub
Private Sub CheckBox30_Click()
Call FiltrerGenre("Historique*", Me.CheckBox30.Value)
End Sub
Private Sub CheckBox31_Click()
Call FiltrerGenre("Idole*", Me.CheckBox31.Value)
End Sub
Private Sub CheckBox32_Click()
Call FiltrerGenre("Jeu de cartes*", Me.CheckBox32.Value)
End Sub
Private Sub CheckBox33_Click()
Call FiltrerGenre("Jeu de table*", Me.CheckBox33.Value)
End Sub
Private Sub CheckBox34_Click()
Call FiltrerGenre("Loli*", Me.CheckBox34.Value)
End Sub
Private Sub CheckBox35_Click()
Call FiltrerGenre("Magical Girl*", Me.CheckBox35.Value)
End Sub
Private Sub CheckBox36_Click()
Call FiltrerGenre("Meccha*", Me.CheckBox36.Value)
End Sub
Private Sub CheckBox37_Click()
Call FiltrerGenre("Monde virtuel*", Me.CheckBox37.Value)
End Sub
Private Sub CheckBox38_Click()
Call FiltrerGenre("Monde parallèle*", Me.CheckBox38.Value)
End Sub
Private Sub CheckBox39_Click()
Call FiltrerGenre("Natation*", Me.CheckBox39.Value)
End Sub
Private Sub CheckBox4_Click()
Call FiltrerGenre("Art.Martiaux*", Me.CheckBox4.Value)
End Sub
Private Sub CheckBox40_Click()
Call FiltrerGenre("Musique*", Me.CheckBox40.Value)
End Sub
Private Sub CheckBox41_Click()
Call FiltrerGenre("Ninja*", Me.CheckBox41.Value)
End Sub
Private Sub CheckBox42_Click()
Call FiltrerGenre("Parodique*", Me.CheckBox42.Value)
End Sub
Private Sub CheckBox43_Click()
Call FiltrerGenre("Patinage Artistique*", Me.CheckBox43.Value)
End Sub
Private Sub CheckBox44_Click()
Call FiltrerGenre("Policier*", Me.CheckBox44.Value)
End Sub
Private Sub CheckBox45_Click()
Call FiltrerGenre("Post-apocalyptique*", Me.CheckBox45.Value)
End Sub
Private Sub CheckBox46_Click()
Call FiltrerGenre("Psycho*", Me.CheckBox46.Value)
End Sub
Private Sub CheckBox47_Click()
Call FiltrerGenre("Romance*", Me.CheckBox47.Value)
End Sub
Private Sub CheckBox48_Click()
Call FiltrerGenre("Roller*", Me.CheckBox48.Value)
End Sub
Private Sub CheckBox49_Click()
Call FiltrerGenre("School-life*", Me.CheckBox49.Value)
End Sub
Private Sub CheckBox5_Click()
Call FiltrerGenre("Athlétisme*", Me.CheckBox5.Value)
End Sub
Private Sub CheckBox50_Click()
Call FiltrerGenre("Samouraï*", Me.CheckBox50.Value)
End Sub
Private Sub CheckBox51_Click()
Call FiltrerGenre("Sci.Fi*", Me.CheckBox51.Value)
End Sub
Private Sub CheckBox52_Click()
Call FiltrerGenre("Sexe*", Me.CheckBox52.Value)
End Sub
Private Sub CheckBox53_Click()
Call FiltrerGenre("Sis.com*", Me.CheckBox53.Value)
End Sub
Private Sub CheckBox54_Click()
Call FiltrerGenre("Space Opéra*", Me.CheckBox54.Value)
End Sub
Private Sub CheckBox55_Click()
Call FiltrerGenre("Sport*", Me.CheckBox55.Value)
End Sub
Private Sub CheckBox56_Click()
Call FiltrerGenre("Super-pouvoirs*", Me.CheckBox56.Value)
End Sub
Private Sub CheckBox57_Click()
Call FiltrerGenre("Survival-game*", Me.CheckBox57.Value)
End Sub
Private Sub CheckBox58_Click()
Call FiltrerGenre("Surnaturel*", Me.CheckBox58.Value)
End Sub
Private Sub CheckBox59_Click()
Call FiltrerGenre("Terroriste*", Me.CheckBox59.Value)
End Sub
Private Sub CheckBox6_Click()
Call FiltrerGenre("Automobile*", Me.CheckBox6.Value)
End Sub
Private Sub CheckBox60_Click()
Call FiltrerGenre("Tennis*", Me.CheckBox60.Value)
End Sub
Private Sub CheckBox61_Click()
Call FiltrerGenre("Tranche de vie*", Me.CheckBox61.Value)
End Sub
Private Sub CheckBox62_Click()
Call FiltrerGenre("Volley-ball*", Me.CheckBox62.Value)
End Sub
Private Sub CheckBox63_Click()
Call FiltrerGenre("Voyage temporel*", Me.CheckBox63.Value)
End Sub
Private Sub CheckBox7_Click()
Call FiltrerGenre("Base-ball*", Me.CheckBox7.Value)
End Sub
Private Sub CheckBox8_Click()
Call FiltrerGenre("Aventure*", Me.CheckBox8.Value)
End Sub
Private Sub CheckBox9_Click()
Call FiltrerGenre("Boxe", Me.CheckBox9.Value)
End Sub
Private Sub TextBox1_Change()
TextBox1.Value = Application.Proper(TextBox1.Value)
Dim Ws As Worksheet
For Each Ws In Sheets(Array("Feuille de Genres"))
Dim sCritere As String
sCritere = "=" & TextBox1.Text & "*"
Ws.Range("$A$18:$J$100000").AutoFilter Field:=1, Criteria1:=sCritere, _
Operator:=xlAnd 'colonne à filtrer 1 = A, 2 = B etc...'
Next Ws
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A18:A" & Range("A18").End(xlDown).Row)) Is Nothing Then
Set Cel = Sheets("Feuille de Genres").Range(Target.Address)
Cel.Offset(0, 1).Formula = "='" & Cel.Value & "'!H8"
Cel.Offset(0, 2).Formula = "='" & Cel.Value & "'!H9"
Cel.Offset(0, 3).Formula = "='" & Cel.Value & "'!J8"
Cel.Offset(0, 4).Formula = "='" & Cel.Value & "'!J9"
Cel.Offset(0, 5).Formula = "='" & Cel.Value & "'!L8"
Cel.Offset(0, 6).Formula = "='" & Cel.Value & "'!L9"
Cel.Offset(0, 7).Formula = "='" & Cel.Value & "'!N8"
Cel.Offset(0, 8).Formula = "='" & Cel.Value & "'!N9"
End If
End Sub
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
Sheets(Target.Value).Activate
End SubLa procédure générale
' Procédure générale
Sub FiltrerGenre(sGenre As String, Actif As Boolean)
Dim Obj As Object, DLig As Long, LigF As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
' Pour 10 colonnes
For i = 1 To 10
nom = Choose(i, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
Cells(17, i) = nom
' Avec la feuille de critères
With Sheets("Critères")
' Inscrire la lettre de la colonne
.Cells(1, i) = nom
' Si le FLAG est actif
If Actif Then
If i = 1 Then
DLig = .Cells(Rows.Count, 1).End(xlUp).Row
.Cells(DLig + 1, 1) = sGenre
Else
DLig = .Cells(Rows.Count, i - 1).End(xlUp).Offset(1, 0).Row
.Range(.Cells(2, i), .Cells(DLig, i)).ClearContents
.Range(.Cells(2, 1), .Cells(DLig, 1)).Copy _
Destination:=.Cells(DLig, i)
End If
Else
' Sinon supprimer le critère
If i = 1 Then
LigF = .Range("A:A").Find(what:=sGenre).Row
.Range("A" & LigF).Delete Shift:=xlUp
Else
DLig = .Cells(Rows.Count, i).End(xlUp).Offset(1, 0).Row
.Range(.Cells(2, i), .Cells(DLig, i)).ClearContents
DLig = .Cells(Rows.Count, i - 1).End(xlUp).Offset(1, 0).Row
.Range(.Cells(2, 1), .Cells(DLig, 1)).Copy _
Destination:=.Cells(DLig, i)
End If
End If
End With
Next i
Range("A17:J" & Range("A" & Rows.Count).End(xlUp).Row).AdvancedFilter _
Action:=xlFilterInPlace, CriteriaRange:=Range("TabCrit"), Unique:=False
Range("A17:A10").ClearContents
Application.EnableEvents = True
End SubA+
Bonsoir Bruno!
Code installé et fonctionnel sur mon fichier, mais bizarrement il met plus de temps à défiltrer sur mon fichier que sur le fichier test alors qu'il y a le même nombre de lignes...
Normal? En tout cas merci, et je compte ouvrir un sujet pour le filtre cumulé dans quelque temps donc si jamais tu as des connaissance pour je te dis à très vite
Bonne soirée!
Bonjour Zayx
Zayx a écrit :Code installé et fonctionnel sur mon fichier, mais bizarrement il met plus de temps à défiltrer sur mon fichier que sur le fichier test alors qu'il y a le même nombre de lignes... Normal?
Je dirais, étrange
Il n'y a pas de raison, il faut lancer le code en pas à pas (F8) pour voir ce qui se passe
Zayx a écrit :je compte ouvrir un sujet pour le filtre cumulé dans quelque temps donc si jamais tu as des connaissance pour je te dis à très vite
Heeuuuu, c'est ce que j'ai fait dans le fichier que tu as
Mais le filtre cumulé se fait par la condition "ou" à voir le résultat que tu veux obtenir
A+
Bonjour Bruno, le forum!
BrunoM45 a écrit :Bonjour Zayx
Je dirais, étrange
Il n'y a pas de raison, il faut lancer le code en pas à pas (F8) pour voir ce qui se passe
Pas compris
Pour ma part j'aimerai que si je coche deux checkbox et bien qu'il m'affiche les lignes ou il y a ces deux critères et non pas l'un OU l'autre.
Voila voila, j'attends de tes nouvelles
Re up pour Bruno en espérant que tu refasse présence sur ce sujet pour peaufiner ce qui doit l'être car pas encore réussi à faire ce que j'ai demandé dans mon dernier message.
A très vite j'espère!