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

Table.Combine : empiler plusieurs tables dans Power Query

Mettre douze fichiers mensuels bout à bout en une seule table. Avec le malentendu de vocabulaire qui envoie la moitié des gens vers la mauvaise fonction.

Mis à jour le

Table.Combine prend une liste de tables et les empile les unes sous les autres. Les colonnes de même nom se rejoignent, celles qui n’existent que dans certaines tables sont créées et remplies de null ailleurs.

Attention au mot

« Fusionner » désigne autre chose dans Power Query

C’est la confusion la plus fréquente sur ce sujet, et elle vient de l’interface française elle-même.

Ce que vous voulezLe boutonLa fonction
Empiler des lignes, plus de lignes en sortieAjouter des requêtesTable.Combine
Rapprocher sur une clé, plus de colonnes en sortieFusionner des requêtesTable.NestedJoin

Autrement dit, si vous cherchez à « fusionner plusieurs tables » au sens de mettre douze mois de ventes bout à bout, le bouton à cliquer s’appelle Ajouter, pas Fusionner. Le repère simple : est-ce que je veux des lignes en plus, ou des colonnes en plus ?

Syntaxe

Une liste de tables, et rien d’autre en général

Table.Combine(tables as list, optional columns as any) as table

Les accolades comptent : le premier paramètre est une liste, donc les tables s’écrivent entre { }.

Table.Combine({Janvier, Février, Mars})

Sans le second paramètre, la table de sortie porte l’union des colonnes rencontrées. Trois tables aux structures différentes donnent donc :

Table.Combine({
    Table.FromRecords({[Nom = "Bob", Tel = "123-4567"]}),
    Table.FromRecords({[Fax = "987-6543", Tel = "838-7171"]}),
    Table.FromRecords({[Mobile = "543-7890"]})
})

// Nom  | Tel      | Fax      | Mobile
// Bob  | 123-4567 | null     | null
// null | 838-7171 | 987-6543 | null
// null | null     | null     | 543-7890
Le piège

Une colonne renommée à la source, et personne ne voit rien

C’est exactement ce comportement tolérant qui rend la fonction dangereuse en production. Si le fichier de mars arrive avec « Montant HT » là où les autres avaient « Montant », rien ne casse. Vous obtenez deux colonnes à moitié vides, un total qui ignore un mois entier, et aucun message d’erreur.

La parade tient en une ligne : au lieu de faire confiance, on impose la structure attendue. Le second paramètre projette le résultat sur une liste de colonnes fixée à l’avance.

Table.Combine({Janvier, Février, Mars}, {"Date", "Client", "Montant"})

Attention toutefois : ce paramètre ne vérifie rien, il projette. Une colonne demandée qui n’existe nulle part sort remplie de null sans le moindre avertissement. Il fige la structure, il ne contrôle pas la donnée.

Pour un vrai contrôle, mieux vaut compter avant et après. Si le nombre de lignes du résultat ne correspond pas à la somme des lignes d’entrée, quelque chose s’est perdu en route.

En pratique

Empiler tous les fichiers d’un dossier

C’est le cas d’usage qui revient le plus souvent : un dossier qui reçoit un export par mois, et un rapport qui doit les consolider sans intervention.

let
    Dossier   = Folder.Files("C:\Exports\Ventes"),
    Fichiers  = Table.SelectRows(Dossier, each Text.EndsWith([Name], ".csv")),
    Contenus  = Table.AddColumn(Fichiers, "Table", each Csv.Document([Content], [Delimiter = ";", Encoding = 65001])),
    Empilees  = Table.Combine(Contenus[Table]),
    Entetes   = Table.PromoteHeaders(Empilees)
in
    Entetes

Contenus[Table] extrait la colonne sous forme de liste de tables, ce qui est précisément ce qu’attend Table.Combine. Un nouveau fichier déposé dans le dossier est pris en compte à l’actualisation suivante, sans toucher à la requête.

Un conseil de méthode : conservez le nom du fichier dans une colonne avant d’empiler. Le jour où un chiffre paraît suspect, savoir de quel export il provient fait gagner une demi-journée.

Questions fréquentes

Ce qu’on nous demande sur Table.Combine

Les tables doivent-elles avoir les mêmes colonnes ?

Non, et c’est justement le risque. Les colonnes absentes d’une table sont créées et remplies de null, sans avertissement. La fonction ne se plaint jamais d’une structure différente.

Table.Combine supprime-t-elle les doublons ?

Non. Elle empile telles quelles, y compris les lignes identiques. Pour dédoublonner ensuite, utilisez Table.Distinct, éventuellement en lui précisant les colonnes qui définissent un doublon.

L’ordre des tables est-il conservé ?

Les tables sont empilées dans l’ordre de la liste. Cela dit, ne construisez jamais un calcul qui dépende de l’ordre des lignes : ajoutez une colonne de date ou d’index et triez explicitement.

Quelle différence entre Table.Combine et Table.NestedJoin ?

Table.Combine ajoute des lignes, Table.NestedJoin ajoute des colonnes en rapprochant sur une clé. Dans l’interface française, la première correspond à Ajouter des requêtes et la seconde à Fusionner des requêtes.

À côté

Les fonctions qu’on utilise avec

Sources — documentation officielle de l’éditeur, consultée le 22 août 2026 : Table.Combine, Table.NestedJoin.

Une consolidation de fichiers qui se casse tous les mois ?

Nous reprenons les chaînes d’agrégation fragiles pour qu’elles tiennent sans surveillance, et qu’un fichier mal formé se signale au lieu de passer inaperçu.

Demander un audit ou 01 83 64 60 25
01 83 64 60 25 Réserver un appel