Référence Power Query · 5 min de lecture

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.

Syntaxe

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ètreRôle
recordsLa liste des records à convertir en table.
columnsFacultatif. La liste des noms de colonnes de la table, ou son type.
missingFieldFacultatif. 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.

Exemples

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.

En pratique

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.

Questions fréquentes

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.

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.

Réserver un appelou 01 83 64 60 25
01 83 64 60 25 Réserver un appel