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.
« 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 voulez | Le bouton | La fonction |
|---|---|---|
| Empiler des lignes, plus de lignes en sortie | Ajouter des requêtes | Table.Combine |
| Rapprocher sur une clé, plus de colonnes en sortie | Fusionner des requêtes | Table.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 ?
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
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.
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.
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.
Les fonctions qu’on utilise avec
Table.RowCount: vérifier qu’aucune ligne ne s’est perdue à l’empilement.Table.RemoveRows: nettoyer les en-têtes parasites de chaque export.- La référence complète Power Query et DAX.
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.