Il s’agit d’une solution pure Grist et sans widget.
Cela permet de travailler sur un périmètre donné sans avoir à refiltrer sur chaque page et widget.
L’exemple ci-dessous consiste à filtrer 3 tables (‹ EVENEMENTS ›, ‹ RISQUES ›, ‹ ACTIONS ›) sur un ou des projets facultativement sélectionnés dans la colonne ‹ Projet › de ces 3 tables. Cette colonne ‹ Projet › est une colonne de référence vers la TABLE.colonne : ‹ REF_PROJET.Nom ›.
Etape 1
Ajouter une colonne de données de type booléen (nommée ‹ Afficher ›) dans la table REF_PROJET.
Faire apparaitre cette table et colonne sur une page d’accueil du document facilement accessible dans le menu de gauche pour que l’utilisateur choisisse les filtres à appliquer.
Etape 2
Dans les données sources, sur chacune des 3 tables (‹ EVENEMENTS ›, ‹ RISQUES ›, ‹ ACTIONS ›), ajouter une colonne de formule de type booléen.
- Nom colonne : ‹ Filtre global ›
- Formule:
# Afficher si pas de projet associé
retour = True
# Sinon, l'affichage est choisi dans la table PROJET
if $Projet:
# Code à appliquer si la colonne est une reference simple
# retour = $Projet.Afficher
# Code à appliquer si la colonne est une reference multiple
retour = any(p.Afficher for p in $Projet)
return retour
- Masquer cette colonne dans les widgets car elle ne présente aucun intérêt.
Etape 3
Pour chaque Widget, filtrer sur la colonne ‹ Filtre global › == True et décocher ‹ futures valeurs ›.
Ne pas épingler le filtre pour que le bouton reste invisible.
Limites
Le filtre étant basé sur des données en bases, il s’applique à tous les utilisateurs du Grist et est persistant.
Mais dans le cas où une seul personne utilise le Grist à un instant T, cela fait le boulot ![]()
Si je n’ai pas de meilleur solution, je l’implémenterai sur le template Modèle de gestion de projet
Dans le cas d’un Grist avec accès concurrents, il faut laisser tous les projets en mode ‹ Afficher = True ›.

