Bonjour.
À la lecture de ton code je pense que la solution la plus simple est de créer une procédure et de l'appeler après leur mise à jour.
Et je pense que tu as des listes déroulantes, pas des listes (tout-court) car elles ne peuvent pas être null.
Ça donne quelque chose comme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| private sub AppliquerFiltre()
If IsNull(me.ListHeure) And IsNull(me.[ListJour]) Then
me.EMARG.SourceObject = "Query.R_Choix_Niveau"
ElseIf IsNull(me.[ListHeure]) Then
me.EMARG.SourceObject = "Query.R_Choix_Jour_Niveau"
ElseIf IsNull(me.[ListJour]) Then
me.EMARG.SourceObject = "Query.R_Choix_Heure_Niveau"
Else
me.EMARG.SourceObject = "Query.R_Choix_Jour_Heure_Niveau"
End If
me.EMARG.Requery
end sub |
Me. réfère au formulaire en cours et j'ai enlevé les parenthèses supplémentaires qui ne changeaient rien aux expressions.
Ici un exemple pour la liste des niveaux à répéter pour les 2 autres.
1 2 3
| Private Sub ListNiveau_AfterUpdate()
call appliquerFiltre
end sub |
Là dés que tu vas faire un choix (une valeur ou pas de valeur) tes filtres seront appliqués en conséquence.
Cela t'évite d'avoir un bouton exprès pour effacer.
Note que le sujet a été TRÈS couvert ici :
- Les meilleurs cours et tutoriels pour apprendre Microsoft Access
- Interface : les formulaires dans Microsoft Access
- Formulaires de recherche
https://access.developpez.com/cours/...#interfaceform
Il y a des recherches pour tous les goûts et tous les niveaux de complexité.
Enfin pour répondre à ta question, il suffit de faire un bouton dont le code est :
me.ListeNiveau=null 'À adapter pour chaque liste.
puis de demander l'application du filtre.
Partager