En bref —
ROW([référence])renvoie le numéro de ligne d'une cellule, etCOLUMN([référence])son numéro de colonne — une position, pas la valeur qui y est stockée.ROW(A10)vaut10;COLUMN(C1)vaut3. Omettez l'argument et chacune renvoie la coordonnée de la cellule qui contient la formule :=ROW()dans la cellule A5 vaut5. Cette seule idée — ces fonctions lisent une adresse, pas une valeur — alimente tout ce qu'elles font d'utile : des numéros d'ordre qui se renumérotent tout seuls quand vous insérez une ligne, le zébrage avecMOD(ROW(),2), et l'alimentation en positions à l'intérieur d'INDEXet des formules matricielles.
=ROW() ' -> 5 la ligne où se trouve cette formule (ici, ligne 5)
=ROW(A10) ' -> 10 le numéro de ligne d'A10 (pas son contenu)
=COLUMN() ' -> 3 la colonne où se trouve cette formule (col. C)
=COLUMN(D1) ' -> 4 D est la 4e colonne
=ROW()-ROW($A$2)+1 ' -> 1,2,3 numéro d'ordre auto-réparateur, ancré en A2
=MOD(ROW(),2)=0 ' -> TRUE/FALSE une ligne sur deux, pour le zébrage
Remarque pour Excel en français : dans une version française d'Excel, ces fonctions s'affichent sous des noms traduits — ROW → LIGNE, COLUMN → COLONNE, ROWS → LIGNES, MATCH → EQUIV, INDEX → INDEX, MOD → MOD, INT → ENT, SMALL → PETITE.VALEUR, IF → SI, ADDRESS → ADRESSE, SUBSTITUTE → SUBSTITUE, FILTER → FILTRE, SEQUENCE → SEQUENCE, OFFSET → DECALER, INDIRECT → INDIRECT. Les codes d'erreur sont eux aussi traduits :
#VALUE!devient #VALEUR!, tandis que#REF!et#N/Arestent identiques. Les formules ci-dessous utilisent délibérément les noms anglais des fonctions : ils fonctionnent dans toutes les versions et ce sont les termes que vous recherchez.
ROW et COLUMN sont les deux fonctions que l'on utilise sans jamais vraiment décider de
les apprendre — vous copiez une formule de numérotation trouvée sur Internet, elle marche,
vous passez à autre chose. Pourtant elles répondent à une question qu'aucune autre fonction
ne pose : où se trouve cette cellule, et quelle taille fait cette plage ? Séparez « la
position d'une cellule » de « la valeur d'une cellule » dans votre tête, et toute une
catégorie de formules dynamiques qui s'ajustent d'elles-mêmes s'ouvre à vous.
Ce que vous allez apprendre
- Le modèle mental : ROW et COLUMN renvoient des coordonnées, pas le contenu des cellules
- Pourquoi
ROW()seul renvoie la propre ligne de la formule — et pourquoi c'est justement ce qui sert - Le malentendu numéro un :
ROW(C10)vaut10, pas la valeur contenue dans C10 - Des numéros d'ordre qui se réparent tout seuls avec
ROW()-ROW(ancre)+1 - Le zébrage et la logique « une ligne sur n » avec
MOD(ROW(), n) - Le piège lettre-contre-numéro de COLUMN, et ROW comme moteur caché à l'intérieur d'
INDEX
Le modèle mental : des coordonnées, pas un contenu
Presque toutes les fonctions d'Excel lisent ce qui se trouve à l'intérieur des cellules —
SUM additionne leurs valeurs, VLOOKUP retrouve une valeur, TEXT en reformate une.
ROW et COLUMN forment le duo atypique qui ignore totalement le contenu et rapporte
l'adresse : quelle ligne, quelle colonne. Voyez-les comme une cellule qui demande « où
suis-je dans la grille ? » plutôt que « qu'est-ce que je contiens ? ».
Toutes deux acceptent une référence optionnelle. ROW(A10) renvoie 10 parce qu'A10 est
sur la ligne 10 ; COLUMN(C1) renvoie 3 parce que C est la troisième colonne. Omettez
l'argument et la fonction rapporte sa propre position — =ROW() saisi dans A5 renvoie
5, et il renverra 6 dès que vous le tirez d'une cellule vers le bas. Cette autoréférence
n'est pas une bizarrerie à contourner ; c'est tout l'intérêt, et c'est ce qui rend ROW utile
comme compteur.
Une bonne nouvelle d'emblée : contrairement à OFFSET et à INDIRECT, ROW et COLUMN ne sont pas volatiles. Elles ne se recalculent pas à chaque frappe, si bien que vous pouvez en parsemer des milliers dans un modèle sans le ralentissement qu'apportent ces deux fonctions de référence.
ROW() seul renvoie la propre ligne de la formule
Saisissez =ROW() dans n'importe quelle cellule et vous obtenez le numéro de la ligne où
elle se trouve. Tirez-la vers le bas et les résultats s'incrémentent — 2, 3, 4, … — parce
que chaque copie rapporte sa propre nouvelle ligne. C'est le mécanisme derrière presque
toutes les recettes « numérote mes lignes automatiquement ».
=ROW() ' dans A2 -> 2, dans A3 -> 3, dans A4 -> 4 (chaque copie rapporte sa propre ligne)
=COLUMN() ' dans B1 -> 2, dans C1 -> 3, dans D1 -> 4 (COLUMN compte en largeur)
Le hic que vous rencontrerez aussitôt : si vos données commencent à la ligne 2 (parce que la
ligne 1 est un en-tête), =ROW() vous donne 2, 3, 4 — décalé de un. Ce n'est pas un bug
de ROW ; c'est ROW qui vous dit la stricte vérité sur l'endroit où il se trouve. La solution
est de l'ancrer, ce qui fait l'objet de la section suivante.
Le malentendu n°1 : ROW(référence) est une position, pas une valeur
Voici l'erreur qui envoie les gens vers les moteurs de recherche : ils écrivent =ROW(C10)
en attendant le contenu de C10 et obtiennent 10 à la place.
=ROW(C10) ' -> 10 le NUMÉRO DE LIGNE de C10, jamais ce qui est stocké dans C10
On a demandé à ROW « sur quelle ligne est C10 ? » et il a répondu honnêtement : ligne 10.
Il ne regarde jamais à l'intérieur de la cellule. Si vous voulez la valeur à une position
calculée, c'est le travail d'INDEX — INDEX prend un numéro de
ligne (souvent produit par ROW ou MATCH) et renvoie le contenu.
Gardez la distinction nette : ROW/COLUMN trouvent la coordonnée ; INDEX transforme une
coordonnée en valeur. Presque toutes les questions du type « ROW ne renvoie pas ce que
j'attendais » se dissipent dès que vous tenez cette ligne.
Des numéros d'ordre qui se réparent tout seuls : ROW() moins une ancre
L'usage le plus précieux de ROW est un numéro d'ordre qui survit à l'insertion et à la
suppression de lignes. Un 1, 2, 3 saisi en dur se casse à l'instant où quelqu'un insère
une ligne au milieu ; un numéro fondé sur ROW se renumérote tout simplement.
=ROW()-ROW($A$2)+1 ' sur la ligne où débutent les données (A2), vaut 1 ; A3 -> 2 ; A4 -> 3
=ROW()-1 ' raccourci quand votre en-tête est exactement la ligne 1
Relisez-le à travers le modèle mental : ROW() est cette ligne, ROW($A$2) est la ligne
fixe où commence votre liste, et la soustraction donne le décalage depuis le début ; le +1
le rend base 1. Comme l'ancre est une référence absolue ($A$2), elle reste en place quand
vous recopiez vers le bas, et comme ROW relit la position vivante, insérer une ligne
n'importe où dans la liste renumérote automatiquement tout ce qui suit. C'est le mode de
défaillance qu'il existe pour éliminer : les numérotations manuelles qui glissent
discrètement en 1, 2, 3, 3, 4 après une insertion, et que personne ne remarque avant un
audit.
Zébrage et regroupement : MOD(ROW(), n)
Injectez ROW dans MOD et il devient un générateur de rythme — une façon de faire quelque chose une ligne sur n. Le grand classique est le zébrage en mise en forme conditionnelle :
=MOD(ROW(),2)=0 ' TRUE sur les lignes paires -> ombre une ligne sur deux
=MOD(ROW()-2,3)=0 ' TRUE sur chaque 3e ligne, en comptant depuis le début des données (ligne 2)
=INT((ROW()-2)/3)+1 ' -> 1,1,1,2,2,2,3,3,3 numéro de groupe, 3 lignes par groupe
MOD(ROW(),2) alterne 1,0,1,0… ; le tester =0 vous donne une ligne sur deux pour le
bandage. Le mode de défaillance est ici le même décalage de un que pour les numéros
d'ordre : si votre tableau ne commence pas sur la ligne que vous supposiez, soustrayez une
ancre (ROW()-2) pour que le motif débute là où débutent vos données, pas là où débute la
feuille. Réglez bien l'ancre et une seule formule zèbre ou regroupe un tableau de n'importe
quelle longueur.
COLUMN : le jumeau horizontal, et le piège lettre-contre-numéro
Tout ce qui précède vaut pour COLUMN, pivoté de 90°. COLUMN() rapporte la propre colonne
de la formule ; COLUMN(D1) vaut 4. Son usage phare est une numérotation qui compte en
largeur à mesure que vous tirez vers la droite — pour bâtir des séquences horizontales ou
alimenter un index qui s'incrémente :
=COLUMN()-COLUMN($B$1)+1 ' tiré vers la droite depuis B : 1, 2, 3, 4 ...
Le piège qui attrape tout le monde : COLUMN renvoie un numéro, pas une lettre. La
colonne C vaut 3, pas "C". Si vous avez réellement besoin de la lettre (pour construire
une adresse textuelle, par exemple), COLUMN seul n'y suffit pas — recourez à
ADDRESS, qui peut vous rendre $C$1, et retirez-en les
parties voulues. Confondre le numéro de colonne avec la lettre de colonne est la source
de la plupart des frustrations avec COLUMN ; ce sont des types de données différents pour des
tâches différentes.
ROW comme moteur matriciel pour INDEX et SMALL(IF())
Donnez à ROW une plage au lieu d'une seule cellule et il renvoie un tableau de
numéros de ligne, un par ligne — ROW(A1:A5) vaut {1;2;3;4;5}. Ce tableau déversé est le
moteur discret au cœur de beaucoup de formules avancées.
=INDEX($D$2:$D$100, ROW()-1) ' extrait le Nième élément de la liste, ligne par ligne
=SMALL(IF(status="Open", ROW(status)), k) ' le numéro de ligne du k-ième enregistrement "Open"
=SEQUENCE(ROWS(data)) ' l'équivalent moderne, compatible avec le déversement
L'idiome SMALL(IF(condition, ROW(plage)), k) — collecter les numéros de ligne où une
condition est vraie, puis choisir le k-ième plus petit — a été pendant des années la
méthode pour « renvoyer chaque correspondance, pas seulement la première » avant les tableaux
dynamiques. Sur Excel 365, vous recourriez plutôt à FILTER
ou à SEQUENCE, mais vous croiserez encore le motif
tableau-ROW dans les classeurs hérités, et savoir que ROW(plage) génère une liste de
positions est ce qui rend ces formules lisibles plutôt que magiques.
Le jugement à porter
La syntaxe est triviale — ROW pour un numéro de ligne, COLUMN pour un numéro de colonne,
omettez l'argument pour dire « ici ». Le jugement, c'est de reconnaître que vous êtes face à
un problème de position, pas de valeur. L'indice : chaque fois que vous êtes sur le
point de taper en dur une séquence (1, 2, 3…), une règle « ombre une ligne sur deux », ou
un index croissant qu'un collègue cassera immanquablement en insérant une ligne — c'est un
travail pour ROW/COLUMN, et l'ancrer à une référence absolue le rend auto-réparateur. Et dès
que vous vous surprenez à attendre de ROW(C10) qu'il vous donne le contenu de C10,
arrêtez-vous : c'est INDEX que vous voulez, pour transformer cette position en valeur. Tenez
la distinction position-contre-valeur et ces deux petites fonctions rendent discrètement vos
feuilles robustes.
Comment ExcelMaster vous aide
L'ancrage est précisément le détail délicat que les formules ROW ratent. Demandez à
ExcelMaster « une colonne de numéros de ligne qui reste correcte quand j'insère des
lignes » et il écrit =ROW()-ROW($A$2)+1 ancré à votre vraie ligne d'en-tête, pas à une
version copiée-collée décalée du mauvais nombre. Demandez-lui « ombre une ligne sur trois »
et il vous rend la bonne règle MOD(ROW()-ancre, 3) pour une plage de mise en forme
conditionnelle qui commence là où commencent vos données. Et quand vous décrivez un problème
de valeur dans un langage de position — « donne-moi la valeur 5 lignes plus bas » — il
reconnaît que c'est un travail pour INDEX et ne vous refile pas un ROW qui renvoie un numéro
dont vous ne vouliez pas.
Questions fréquentes
Que fait la fonction ROW dans Excel ?
ROW([référence]) renvoie le numéro de ligne d'une cellule. =ROW(A10) renvoie 10. Si
vous omettez la référence, il renvoie le numéro de ligne de la cellule qui contient la
formule ; ainsi =ROW() dans la cellule B7 renvoie 7. Il rapporte une position dans la
grille — il ne renvoie jamais la valeur stockée dans la cellule.
Comment obtenir le numéro de ligne de la cellule active ?
Saisissez =ROW() sans argument dans la cellule ; il renvoie le numéro de ligne de cette
cellule même. De même, =COLUMN() renvoie son propre numéro de colonne. Pour numéroter une
liste à partir de 1 quel que soit son point de départ, soustrayez une ancre :
=ROW()-ROW($A$2)+1 renvoie 1 sur la ligne qui contient A2, 2 sur la ligne suivante, et
ainsi de suite.
Pourquoi ROW renvoie-t-il un numéro plutôt que la valeur de la cellule ?
Parce que c'est son rôle — ROW indique où se trouve une cellule, pas ce qu'elle
contient. =ROW(C10) renvoie 10 (C10 est sur la ligne 10). Pour récupérer la valeur à
une position calculée, passez le numéro de ligne à INDEX ; par exemple,
=INDEX(D:D, ROW(C10)) renvoie le contenu de D10.
Quelle est la différence entre ROW et ROWS ?
ROW (singulier) renvoie une position — le numéro de ligne d'une cellule. ROWS (pluriel)
renvoie un décompte — combien de lignes contient une plage : ROWS(A1:A10) vaut 10. Le
singulier est une coordonnée ; le pluriel, une taille. Voir
Excel ROWS & COLUMNS.
Comment faire pour que COLUMN renvoie une lettre plutôt qu'un numéro ?
Il ne le fait pas — COLUMN renvoie toujours un numéro (la colonne C vaut 3, pas "C").
Pour obtenir la lettre de colonne, utilisez ADDRESS ; par exemple,
=SUBSTITUTE(ADDRESS(1, COLUMN(), 4), "1", "") en extrait la partie lettre. Voir
Excel ADDRESS.
Testé dans
Testé dans : Excel 365 (Windows 11) — dernière vérification le 2026-07-13.
Guides associés : Excel ROWS & COLUMNS · Excel HYPERLINK · INDEX & MATCH · Excel ADDRESS · Excel OFFSET
