Case à cocher - liste de choix multiple

Bonsoir à tous,

j'ai créer un fichier excel avec des filtres par colonnes. Ensuite, j'ai créer une boîte de dialogue afin de pouvoir cocher les listes en conséquence. Mon souci est que si je coche par exemple, lundi, mardi et dimanche, au final cela ne fait le tri que sur la dernière case que je coche....

Comment faire pour que cela prenne tous les critères ?

Et comment faire pour que si décoche, le filtre s'enlève ?

55classeur2.xlsm (17.17 Ko)

Bonjour et

Un essai :

tout en haut de la feuille de code de l'Userform :

Dim Jour 'variable accessible de toutes les sub de l'userform

Dans Private Sub UserForm_Initialize() :

Set Jour = CreateObject("Scripting.Dictionary") 'création d'un dictionnaire

pour chaque CheckBox :

Private Sub CheckBox1_Click()  'adapter le N°
If CheckBox1 Then              'adapter le N°
    Jour(Me.ActiveControl.Caption) = ""
Else
    Jour.Remove (Me.ActiveControl.Caption)
End If
FiltreJour

et dans la feuille de code de l'Userform :

Sub FiltreJour()
If Jour.Count > 0 Then
    ActiveSheet.Range("$A$1:$G$8").AutoFilter Field:=2, Criteria1:=Jour.keys, Operator:=xlFilterValues 
Else
    ActiveSheet.Range("$A$1:$G$8").AutoFilter Field:=2
End If
End Sub

A+

C'est vraiment super, ça fonctionne à merveille

Dernier point, j'ai également adopté le même principe pour la colonne groupe. Par contre, pour cette colonne, je souhaiterais que dans tous les cas, le mot "tous" soit toujours filtré, dans le sens qu'il soit toujours affiché. Ainsi, si je coche 1 pour la colonne groupe, le tous soit également affiché...

Et enfin, pour terminer, je souhaiterais qu'à l'ouverture du fichier, tous les filtres soient réinitialisé, car si on enregistre entre deux c'est embêtant...

Pour remettre les filtres à zéro, je crois que j'ai réussi avec ceci :

Private Sub Workbook_Open()
With ThisWorkbook.Worksheets("Feuil1")
        If .FilterMode Then .ShowAllData
    End With
UserForm1.Show
End Sub

pour cette colonne, je souhaiterais que dans tous les cas, le mot "tous" soit toujours filtré,

Si pour cette nouvelle colonne, le dictionnaire utilisé s'appelle Dico :

Dans Private Sub UserForm_Initialize() :

Set Jour = CreateObject("Scripting.Dictionary") 'création d'un dictionnaire pour les jour de la semaine
Set Dico = CreateObject("Scripting.Dictionary") 'création d'un dictionnaire pour la nouvelle colonne
Dico("tous") = "" 'le dictionnaire contiendra toujours le mot "tous"
Faire appel à la sub qui lance le tri de la nouvelle colonne

J'ai ajouté cela et en effet cela sélectionne "Tous". Par contre, si je décoche, le filtre ne se remet pas à zéro et reste bloqué sur tous

J'ai ceci pour une coche :

Private Sub CheckBox15_Click()
If CheckBox15 Then
    Groupe(Me.ActiveControl.Caption) = ""
Else
    Groupe.Remove (Me.ActiveControl.Caption)
End If
FiltreGroupe

End Sub Private Sub UserForm_Initialize() :

et pour Private Sub :

Private Sub UserForm_Initialize()
Set Jour = CreateObject("Scripting.Dictionary")
Set Groupe = CreateObject("Scripting.Dictionary")
Groupe("tous") = ""
End Sub

a priori, en adaptant Field:=2 au N° de colonne :

Sub FiltreGroupe()
If Groupe.Count > 1 Then 's'il n'y a pas  que "tous"
    ActiveSheet.Range("$A$1:$G$8").AutoFilter Field:=2, Criteria1:=Groupe.keys, Operator:=xlFilterValues 
Else  's'il n'y a que "tous"
    ActiveSheet.Range("$A$1:$G$8").AutoFilter Field:=2 'suppression filtrage
End If
End Sub

sinon joignez le classeur

Merci infiniment !!! Tout fonctionne à merveille

Rechercher des sujets similaires à "case cocher liste choix multiple"