🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Fonctions ROW & COLUMN (LIGNE & COLONNE) Excel — Obtenir la position d'une cellule, pas sa valeur

|

Fonctions ROW & COLUMN (LIGNE & COLONNE) Excel — Obtenir la position d'une cellule, pas sa valeur

En brefROW([référence]) renvoie le numéro de ligne d'une cellule, et COLUMN([référence]) son numéro de colonne — une position, pas la valeur qui y est stockée. ROW(A10) vaut 10 ; COLUMN(C1) vaut 3. Omettez l'argument et chacune renvoie la coordonnée de la cellule qui contient la formule : =ROW() dans la cellule A5 vaut 5. 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 avec MOD(ROW(),2), et l'alimentation en positions à l'intérieur d'INDEX et 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/A restent 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 : 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) vaut 10, 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'INDEXINDEX 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 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