Table.FindText : rechercher un texte dans toutes les colonnes d’une table
La fonction qui filtre une table sur une valeur sans avoir à désigner la colonne. Pratique pour explorer, à manier avec précaution en production.
Mis à jour le
Table.FindText renvoie les lignes d’une table qui contiennent un texte donné, quelle que soit la colonne où il se trouve. C’est la seule fonction native de Power Query qui cherche dans toute la largeur d’une table d’un seul coup. Quand le texte n’apparaît nulle part, elle retourne une table vide plutôt qu’une erreur.
Son intérêt tient à ce qu’elle ne demande aucune connaissance préalable de la structure : on cherche une référence client, un code produit ou un identifiant sans savoir dans quelle colonne il a été rangé.
Deux paramètres, tous les deux obligatoires
Table.FindText(table as table, text as text) as table
| Paramètre | Rôle |
|---|---|
table | La table dans laquelle chercher. |
text | La chaîne recherchée. Une sous-chaîne suffit : « Pow » retrouve « Power Query ». |
La sortie garde exactement les mêmes colonnes que l’entrée. C’est un filtre de lignes, pas une transformation.
Retrouver une ligne sans savoir où regarder
Sur une table de quatre clients :
Table.FindText(
Table.FromRecords({
[ClientID = 1, Nom = "Bob", Tel = "123-4567"],
[ClientID = 2, Nom = "Jim", Tel = "987-6543"],
[ClientID = 3, Nom = "Paul", Tel = "543-7890"],
[ClientID = 4, Nom = "Ringo", Tel = "232-1550"]
}),
"Bob"
)
Résultat : la seule ligne de Bob. Si on avait cherché « 543 », deux lignes seraient remontées, celle de Paul par son téléphone et celle de Ringo par le sien. La fonction ne fait pas la différence entre une correspondance sur un nom et une correspondance sur un numéro : c’est sa force pour explorer, et sa faiblesse pour filtrer proprement.
Quand l’utiliser, et quand s’en passer
Sur une mission, on la sort presque toujours au même moment : celui où un utilisateur signale qu’une valeur « traîne quelque part » dans un fichier de trois cents colonnes. En deux minutes, on sait dans quelles lignes elle apparaît. C’est un outil de diagnostic remarquable.
En revanche, dans une requête destinée à tourner tous les matins, elle pose trois problèmes. Elle cherche partout, donc elle attrape des faux positifs qu’un filtre de colonne n’aurait jamais ramenés. Elle ne dit pas où la correspondance a été trouvée, ce qui rend le débogage pénible six mois plus tard. Et elle balaie l’intégralité de la table, ce qui coûte cher sur des volumes importants.
La règle que nous appliquons : Table.FindText pour explorer, un filtre explicite pour produire.
Chercher sur des colonnes choisies, ou sans tenir compte de la casse
Table.FindText n’offre aucune option. Dès qu’il faut du contrôle, on repasse par Table.SelectRows. Pour chercher dans une seule colonne en ignorant les majuscules :
Table.SelectRows(
Source,
each Text.Contains([Nom], "bob", Comparer.OrdinalIgnoreCase)
)
Et pour reproduire le comportement multi-colonnes tout en gardant la main sur la casse et sur les valeurs nulles :
Table.SelectRows(
Source,
each List.AnyTrue(
List.Transform(
Record.FieldValues(_),
(v) => v <> null and Text.Contains(Text.From(v), "bob", Comparer.OrdinalIgnoreCase)
)
)
)
C’est plus verbeux, mais lisible dans six mois et modifiable sans tout réécrire. Sur les requêtes qui comptent, ça vaut les trois lignes supplémentaires.
Ce qu’on nous demande sur Table.FindText
Table.FindText cherche-t-elle dans toutes les colonnes ?
Oui. Elle parcourt la largeur entière de la table et retourne toute ligne où le texte apparaît, sans indiquer dans quelle colonne. Pour cibler une colonne précise, il faut passer par Table.SelectRows avec Text.Contains.
Table.FindText demande-t-elle une correspondance exacte ?
Non, la recherche porte sur une sous-chaîne. Chercher 543 remonte aussi bien 543-7890 qu’un autre numéro contenant ce fragment. C’est ce qui la rend utile en exploration et risquée en filtre de production.
Que renvoie Table.FindText si le texte est introuvable ?
Une table vide qui conserve les colonnes d’origine. Aucune erreur n’est levée, ce qui permet de l’enchaîner sans protection particulière.
Table.FindText convient-elle à une grande table ?
Techniquement oui, mais elle évalue chaque valeur de chaque colonne. Sur plusieurs millions de lignes, un filtre explicite sur la colonne concernée reste nettement plus rapide et peut être renvoyé à la source de données.
Les fonctions qu’on utilise avec
Table.RemoveRows: supprimer une plage de lignes par position.Date.Year,Date.Month,Date.Day: décomposer une date.- La référence complète Power Query et DAX, avec les autres fonctions de table et de texte.
Sources — documentation officielle de l’éditeur, consultée le 22 août 2026 : Table.FindText, Table.SelectRows.
Vos requêtes Power Query méritent un second regard ?
Nous auditons les modèles Power BI existants : requêtes lentes, transformations empilées, actualisations qui échouent. Premier retour sous cinq jours ouvrés.