Ok, alors voici comment procéder…
Quel que soit le nombre de champ sur lequel on souhaite filtrer des données, la logique est à peu près toujours la même.
Imaginons que sur ton écran tu aies :
- une liste déroulante pour les sites : cbxSites
- une liste déroulante pour les types : cbxTypes
- une zone de saisie pour la recherche sur le titre : txtTitre
Filtrer ta source de données en fonction de ces critères peut se faire ainsi :
Filter(
TaSourceDeDonnées;
(IsBlank(cbxSites.Selected) || TaColonneSite = cbxSites.Selected.Value)
&& (IsBlank(cbxTypes.Selected) || TaColonneType = cbxTypes.Selected.Value)
&& (IsBlank(txtTitre.Value) || StartsWith(TaColonneTitre; txtTitre.Value))
)
- Avantage : tu peux filtrer sur la base de plusieurs critères en entrée
- Inconvénient : pour la colonne de titre, tu ne filtreras que ce qui COMMENCE PAR le texte saisi (pas de recherche au milieu du titre)
Maintenant, imaginons que sur ton écran tu aies une seule zone de saisie “Rechercher un document” qui s’appelle txtSearch, tu peux filtrer tes données ainsi :
Search(TaSourceDeDonnées; txtSearch.Value; TaColonneTitre; TaColonneType; TaColonneSite)
- Avantage : pour une seule saisie tu peux rechercher dans plusieurs colonnes + le texte saisi peut se situer n’importe où dans les valeurs de colonnes (début, milieu, fin)
- Inconvénient : tu n’as qu’un seul critère de recherche en entrée
Dans ton cas de figure, comme tu cumules à la fois des listes déroulantes et de la recherche de texte, je combinerais les deux techniques ainsi :
Search(
Filter(
TaSourceDeDonnées;
(IsBlank(cbxSites.Selected) || TaColonneSite = cbxSites.Selected.Value)
&& (IsBlank(cbxTypes.Selected) || TaColonneType = cbxTypes.Selected.Value)
);
txtSearch.Value;
"TaColonneTitre"
)
Voici la doc officielle de ces fonctions : https://learn.microsoft.com/en-us/power-platform/power-fx/reference/function-filter-lookup
Voilou…