Table.FromRecords : créer une table à partir de records dans Power Query
Construire une table dont chaque ligne porte ses propres noms de champs. Avec le piège du champ manquant qui fait échouer la requête.
En langage M, un record est un ensemble de champs nommés, écrit entre crochets : [Client = "Bob", Mois = "Janvier"]. Table.FromRecords prend une liste de records et la convertit en table : chaque record devient une ligne, les noms des champs deviennent les noms des colonnes.
On l’écrit à la main, dans l’éditeur avancé ou dans une requête vide. Elle sert à construire rapidement une table de test lisible, puisque chaque valeur est accompagnée du nom de sa colonne, et à transformer en table des données qui arrivent déjà sous forme de records. La documentation de Microsoft l’emploie d’ailleurs dans la plupart de ses exemples pour fabriquer les tables de départ.
Le traitement des champs manquants se règle
Table.FromRecords(
records as list,
optional columns as any,
optional missingField as nullable number
) as table
| Paramètre | Rôle |
|---|---|
records | La liste des records à convertir en table. |
columns | Facultatif. La liste des noms de colonnes de la table, ou son type. |
missingField | Facultatif. Ce qu’il faut faire quand un record n’a pas un des champs attendus. MissingField.Error, la valeur par défaut, produit une erreur. MissingField.UseNull remplit le champ absent avec null. |
La documentation précise que MissingField.Ignore, qui existe pour d’autres fonctions, génère une erreur avec celle-ci.
Du plus simple au plus robuste
Une table de deux factures
Table.FromRecords({
[Client = "Bob", Mois = "Janvier", Montant = 1200],
[Client = "Jim", Mois = "Février", Montant = 850]
})
Deux lignes, trois colonnes nommées d’après les champs. Sans autre précision, les colonnes sont de type any.
La même table, typée
Table.FromRecords(
{
[Client = "Bob", Mois = "Janvier", Montant = 1200],
[Client = "Jim", Mois = "Février", Montant = 850]
},
type table [Client = text, Mois = text, Montant = number]
)
Le deuxième paramètre reçoit un type de table : Montant est désormais une colonne numérique, Client et Mois des colonnes de texte.
Le champ manquant qui fait échouer la requête
Les records d’une même liste n’ont pas toujours tous les mêmes champs. Une facture sans montant renseigné, un client sans ville : le champ est simplement absent du record. Avec le comportement par défaut, MissingField.Error, ce champ manquant produit une erreur, et la table n’est pas utilisable telle quelle.
Table.FromRecords({
[Client = "Bob", Mois = "Janvier", Montant = 1200],
[Client = "Paul", Mois = "Mars"]
})
Le record de Paul n’a pas de champ Montant. La parade consiste à lister les colonnes attendues et à demander MissingField.UseNull : le champ absent devient null.
Table.FromRecords(
{
[Client = "Bob", Mois = "Janvier", Montant = 1200],
[Client = "Paul", Mois = "Mars"]
},
type table [Client = text, Mois = text, Montant = nullable number],
MissingField.UseNull
)
La table contient alors deux lignes, avec null dans le montant de Paul. Le type nullable number annonce clairement que cette colonne peut être vide. Reste à décider, dans la suite de la requête, si une ligne sans montant doit être gardée, corrigée ou écartée.
Ce qu’on nous demande sur Table.FromRecords
Que se passe-t-il si un record n’a pas tous les champs ?
Par défaut, le champ manquant produit une erreur. Avec MissingField.UseNull en troisième paramètre, il est rempli avec null.
Pourquoi MissingField.Ignore renvoie-t-il une erreur ?
Parce que cette valeur n’est pas acceptée par Table.FromRecords : la documentation indique qu’elle génère une erreur avec cette fonction. Seules MissingField.Error et MissingField.UseNull s’appliquent.
Les colonnes sont-elles typées automatiquement ?
Non. Sans deuxième paramètre, les colonnes sont de type any. Pour obtenir du texte, des nombres ou des dates, il faut passer un type de table.
Quelle différence avec Table.FromRows ?
Table.FromRecords reçoit des records, dont chacun porte ses noms de champs. Table.FromRows reçoit des listes de valeurs, lues par position, et les noms de colonnes une seule fois.
Pour aller plus loin
Table.FromListTable.FromRows- Comprendre et corriger les erreurs Power Query.
- Les fonctions de table de Power Query.
Table.FindText: retrouver une valeur dans toutes les colonnes.- La référence complète Power Query et DAX.
Sources. Documentation officielle de l’éditeur, consultée le 13 octobre 2026 : Table.FromRecords, MissingField.Type.
Des requêtes qui échouent dès qu’un champ manque ?
Nous reprenons vos requêtes Power Query pour qu’elles acceptent des données incomplètes sans s’arrêter, et signalent ce qui doit l’être.