Table.AddIndexColumn : numéroter les lignes d’une table dans Power Query
Ajouter un numéro de ligne, choisir où il commence et de combien il avance. Avec le piège de l’index posé trop tôt dans la requête.
Table.AddIndexColumn ajoute à une table une nouvelle colonne qui contient la position de chaque ligne. Par défaut, la numérotation part de 0 et avance de 1. On s’en sert pour donner un numéro d’ordre à des factures, pour classer des clients une fois la table triée, ou pour aller chercher la valeur de la ligne précédente, par exemple le chiffre d’affaires du mois d’avant.
C’est la fonction qui correspond à la commande Colonne d’index de l’onglet Ajouter une colonne. L’option Personnalisée de cette commande règle l’index de départ et l’incrément, c’est-à-dire les deux paramètres facultatifs décrits ci-dessous.
Seul le nom de la colonne est obligatoire
Table.AddIndexColumn(
table as table,
newColumnName as text,
optional initialValue as nullable number,
optional increment as nullable number,
optional columnType as nullable type
) as table
| Paramètre | Rôle |
|---|---|
table | La table à numéroter. |
newColumnName | Le nom de la nouvelle colonne, par exemple "Index". |
initialValue | Valeur du premier index. Facultatif : sans lui, la numérotation commence à 0. |
increment | Écart entre deux numéros consécutifs. Facultatif : sans lui, l’index avance de 1. |
columnType | Type de la colonne créée, par exemple Int64.Type pour un nombre entier. Facultatif. |
Le départ à 0 surprend souvent. Pour une numérotation lisible par un humain, qui commence à 1, il faut le demander explicitement.
Trois usages courants
Sur une table de quatre clients, dans l’ordre Bob, Jim, Paul, Ringo.
Numéroter à partir de 0
Table.AddIndexColumn(Source, "Index")
Bob reçoit 0, Jim 1, Paul 2 et Ringo 3. Les trois paramètres facultatifs sont omis, donc départ à 0 et pas de 1.
Numéroter à partir de 1, en nombre entier
Table.AddIndexColumn(Source, "Rang", 1, 1, Int64.Type)
Bob reçoit 1 et Ringo 4. Le cinquième paramètre type directement la colonne en nombre entier, sans étape de changement de type à ajouter ensuite.
Récupérer la valeur du mois précédent
let
Source = Table.FromRecords({
[Mois = "Janvier", CA = 100],
[Mois = "Février", CA = 120],
[Mois = "Mars", CA = 90]
}),
AvecIndex = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
AvecPrecedent = Table.AddColumn(AvecIndex, "CA mois précédent",
each if [Index] = 0 then null else AvecIndex{[Index] - 1}[CA])
in
AvecPrecedent
Janvier n’a pas de mois précédent et reçoit null, février reçoit 100, mars reçoit 120. L’index sert ici d’adresse : AvecIndex{[Index] - 1} désigne la ligne juste au-dessus, puisque l’index part de 0 comme la position des lignes.
Le piège de l’index posé trop tôt
L’index enregistre la position des lignes au moment précis de l’étape où il est ajouté. Ensuite, c’est une colonne comme une autre : ses valeurs suivent les lignes. Si l’on trie la table après l’avoir numérotée, les numéros partent avec leurs lignes et ne se suivent plus. Si l’on filtre, les numéros des lignes retirées manquent et la série a des trous.
Le cas typique : on numérote des factures, puis on ajoute plus bas un filtre sur les montants positifs et un tri par date. Le numéro 1 n’est plus la première facture, et les calculs qui s’appuient sur la ligne précédente comparent des lignes qui ne sont pas voisines.
La parade est simple : filtrer et trier d’abord, numéroter en dernier.
let
Source = ...,
Filtree = Table.SelectRows(Source, each [Montant] > 0),
Triee = Table.Sort(Filtree, {{"Date", Order.Ascending}}),
Numerotee = Table.AddIndexColumn(Triee, "Rang", 1, 1, Int64.Type)
in
Numerotee
Quand une étape ajoutée plus tard dans la requête modifie l’ordre ou le nombre de lignes, il faut redescendre l’étape d’index après elle.
Ce qu’on nous demande sur Table.AddIndexColumn
La colonne d’index commence-t-elle à 0 ou à 1 ?
À 0, avec un pas de 1, si l’on ne précise rien. Pour commencer à 1, on renseigne le troisième paramètre : Table.AddIndexColumn(Source, "Index", 1).
Peut-on numéroter de 10 en 10 ?
Oui, avec le quatrième paramètre, qui fixe l’incrément. Table.AddIndexColumn(Source, "Index", 10, 10) donne 10, 20, 30, et ainsi de suite.
Pourquoi mes numéros ne se suivent-ils plus ?
Parce qu’un tri ou un filtre a été appliqué après l’ajout de l’index. Les numéros restent attachés à leurs lignes. Placez l’étape d’index après le tri et les filtres.
À quoi sert le paramètre columnType ?
Il fixe le type de la colonne créée, par exemple Int64.Type pour un nombre entier. Il est facultatif, mais il évite d’ajouter une étape de changement de type juste après.
Les fonctions qu’on utilise avec
Table.DuplicateColumn- Calculer une colonne cumulée dans Power BI.
Table.RemoveRows: supprimer des lignes par position.- Les fonctions de table de Power Query.
- La référence complète Power Query et DAX.
Sources. Documentation officielle de l’éditeur, consultée le 13 octobre 2026 : Table.AddIndexColumn, Ajouter une colonne d’index.
Des numérotations qui changent à chaque actualisation ?
Nous relisons vos requêtes Power Query pour que l’ordre et la numérotation des lignes restent stables d’une actualisation à l’autre.