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

Fonctions ROWS & COLUMNS (LIGNES & COLONNES) Excel — Compter la taille d'une plage (pas sa position)

|

Fonctions ROWS & COLUMNS (LIGNES & COLONNES) Excel — Compter la taille d'une plage (pas sa position)

En brefROWS(matrice) renvoie combien de lignes possède une plage ou un tableau, et COLUMNS(matrice) renvoie combien de colonnes. ROWS(A1:A10) vaut 10 ; COLUMNS(A1:C1) vaut 3. Les formes plurielles mesurent une taille ; les singuliers ROW et COLUMN rapportent une position — une différence d'une seule lettre qui change complètement la réponse. Le bénéfice, ce sont des formules qui se redimensionnent toutes seules : un index de colonne VLOOKUP qui reste correct quand vous insérez une colonne, un décompte des lignes qu'un FILTER a renvoyées, et « la dernière ligne » sans coder de nombre en dur.

=ROWS(A1:A10)                 ' -> 10    combien de lignes dans la plage
=COLUMNS(A1:C1)               ' -> 3     combien de colonnes dans la plage
=ROWS(A1:C10)                 ' -> 10    toujours 10 — il compte les lignes, ignore la largeur
=COLUMNS($A$1:C$1)            ' -> 3     tirer l'extrémité fait croître ceci : 1, 2, 3, ...
=ROWS(FILTER(data, keep))     ' -> 42    combien de lignes le filtre a renvoyées
=ROWS(A:A)                    ' -> 1048576   une colonne entière — le décompte physique des lignes

Remarque pour Excel en français : dans une version française d'Excel, ces fonctions s'affichent sous des noms traduits — ROWS → LIGNES, COLUMNS → COLONNES, ROW → LIGNE, COLUMN → COLONNE, VLOOKUP → RECHERCHEV, XLOOKUP → RECHERCHEX, INDEX → INDEX, MATCH → EQUIV, FILTER → FILTRE, UNIQUE → UNIQUE, COUNTA → NBVAL, SEQUENCE → SEQUENCE, SUMPRODUCT → SOMMEPROD. 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.

ROWS et COLUMNS ressemblent à des broutilles jusqu'à ce que vous réalisiez la quantité de logique fragile, codée en dur — « il y a 3 colonnes / les données s'arrêtent à la ligne 200 » — qu'elles remplacent. Elles transforment un nombre fixe qu'un collègue finira par casser en une valeur qu'Excel recalcule à partir de la plage elle-même. L'astuce est de ne pas les confondre avec leurs cousines au singulier.

Ce que vous allez apprendre

  • Le modèle mental : ROWS/COLUMNS mesurent une taille, pas une position
  • Le piège d'une seule lettre : pourquoi ROW(A1:A10) et ROWS(A1:A10) renvoient des choses différentes
  • L'usage phare : un index de colonne VLOOKUP qui survit aux colonnes insérées
  • Compter les lignes qu'un tableau dynamique ou un FILTER a produites
  • Trouver la dernière ligne / le milieu d'une plage sans le coder en dur
  • Le piège de la colonne entière où ROWS(A:A) dépasse le million

Le modèle mental : une taille, pas une position

Le pluriel dit tout. ROW et COLUMN répondent à où est cette cellule ? — ils rendent une coordonnée. ROWS et COLUMNS répondent à une autre question : quelle est la taille de ce bloc ? — ils rendent un décompte. ROWS(A1:A10) se moque de ce que contient la plage ou de l'endroit où elle se trouve ; il rapporte que la plage s'étend sur 10 lignes. COLUMNS(A1:C1) rapporte 3 colonnes.

C'est pourquoi ROWS(A1:C10) vaut 10, pas 30 : il compte des lignes, et la plage fait dix lignes de haut, peu importe qu'elle soit large de trois colonnes. Les deux fonctions sont un mètre ruban pour un rectangle — l'une donne la hauteur, l'autre la largeur. Comme leurs cousines au singulier, elles ne sont pas volatiles, et elles mesurent aussi bien une référence de plage *qu'*un tableau littéral (ROWS({1;2;3}) vaut 3), ce qui en fait un moyen économique et stable de transmettre une taille à une autre fonction.

Le piège d'une seule lettre : ROW contre ROWS

Voici la confusion qui mérite d'être gravée dans votre mémoire, car elle échoue silencieusement à l'intérieur des formules matricielles :

=ROW(A1:A10)      ' -> {1;2;3;4;5;6;7;8;9;10}   un TABLEAU de positions (singulier)
=ROWS(A1:A10)     ' -> 10                         un unique DÉCOMPTE (pluriel)

ROW au singulier, donné à une plage, renvoie un nombre par ligne — une liste déversée de coordonnées. ROWS au pluriel renvoie un total unique. Dans une cellule ordinaire, la différence est évidente, mais glissez le mauvais dans INDEX, SEQUENCE ou un SUMPRODUCT et vous obtiendrez une réponse fausse sans aucune erreur pour vous avertir — SEQUENCE(ROW(data)) tente de bâtir une séquence de mauvaise longueur, tandis que SEQUENCE(ROWS(data)) construit une ligne par ligne de données, comme prévu. Quand vous voulez dire « combien », c'est le pluriel. Quand vous voulez dire « lequel », c'est le singulier.

L'usage phare : un index de colonne VLOOKUP qui ne casse jamais

Ce que COLUMNS fait de plus précieux, c'est de faire survivre VLOOKUP aux modifications. Le troisième argument de VLOOKUP est un nombre en dur — renvoyer la colonne 2, ou 3, ou 4 — et ce nombre est précisément ce qui casse quand quelqu'un insère une colonne dans le tableau. Remplacez-le par COLUMNS et il se recalcule :

=VLOOKUP($A2, Prices, COLUMNS($B$1:B$1), FALSE)   ' 1re colonne de résultat -> index 2
' tiré vers la droite : COLUMNS($B$1:C$1) -> 3,   COLUMNS($B$1:D$1) -> 4, ...

Ancrez le bord gauche ($B$1) et laissez le bord droit suivre à mesure que vous tirez : la plage s'élargit d'une colonne à chaque étape, si bien que COLUMNS compte 2, 3, 4… et fournit à VLOOKUP un index qui grimpe tout seul. Comme l'index est désormais dérivé de la feuille plutôt que saisi, insérer une colonne décale tout de façon cohérente et les recherches continuent de pointer sur les bons champs. C'est toute la raison d'être des fonctions au pluriel : une taille qui s'ajuste vaut mieux qu'un nombre qu'il faut penser à corriger. (Sur Excel 365, INDEX/MATCH ou XLOOKUP contournent complètement l'index — mais pour les millions de VLOOKUP déjà dans la nature, COLUMNS est le renforcement le moins coûteux que vous puissiez ajouter.)

Compter un tableau dynamique ou un résultat filtré

Enveloppez une formule déversée dans ROWS et vous obtenez « combien cela a-t-il renvoyé ? » — souvent plus directement qu'une variante de COUNT :

=ROWS(FILTER(Orders, Region="West"))    ' combien de commandes de l'Ouest correspondent
=ROWS(UNIQUE(Customers))                 ' combien de clients distincts
=COLUMNS(A1#)                            ' la largeur d'une plage déversée (l'opérateur #)

ROWS(FILTER(...)) répond à « combien d'enregistrements satisfont la condition » en mesurant le résultat lui-même — pas de COUNTIFS séparé qu'il faut maintenir synchronisé avec les critères du filtre. Pointer ROWS/COLUMNS sur une référence déversée (A1#) vous donne les dimensions vivantes d'un tableau dynamique à mesure qu'il grandit et rétrécit. Le modèle mental tient bon : vous mesurez la taille de ce que la formule interne a produit.

Dernière ligne, milieu et taille de plage sans coder en dur

Comme ROWS donne la hauteur d'une plage, c'est la façon propre d'atteindre le dernier élément ou le milieu d'une plage dont la taille ne cesse de changer :

=INDEX(data, ROWS(data))            ' la DERNIÈRE valeur d'une plage à une colonne
=INDEX(data, ROWS(data)/2)          ' approximativement le milieu
=INDEX(data, ROWS(data)-1)          ' l'avant-dernière valeur

INDEX(data, ROWS(data)) se lit « l'élément à la position décompte » — c'est-à-dire le dernier — et il reste correct quand la plage grandit, là où un INDEX(data, 200) codé en dur rate silencieusement les nouvelles lignes ou pointe au-delà de la fin. Le mode de défaillance que ROWS prévient, c'est le décompte de lignes tapé en dur que tout le monde oublie de mettre à jour après l'agrandissement des données.

Le piège de la colonne entière : ROWS(A:A) vaut 1 048 576

Un piège à intégrer : ROWS et COLUMNS comptent la taille physique de ce que vous leur donnez, pas la part qui en est remplie.

=ROWS(A:A)        ' -> 1048576   chaque ligne de la colonne existe, remplie ou non
=COLUMNS(A:A)     ' -> 1         la colonne A fait exactement une colonne de large
=COLUMNS(A:C)     ' -> 3

ROWS(A:A) correspond à la hauteur totale de la feuille — plus d'un million — parce que la référence est la colonne entière. Ce n'est presque jamais « combien de lignes de données j'ai » ; pour cela, vous voulez COUNTA (cellules non vides) ou un décompte via déversement/FILTER. Confondre la dimension physique d'une référence de colonne entière avec le décompte des lignes utilisées est la seule façon dont ces fonctions surprennent — gardez « quelle est la taille de cette référence » distinct de « quelle part en est remplie ».

Le jugement à porter

Recourez aux formes plurielles chaque fois que vous êtes sur le point de coder une dimension en dur. Un index VLOOKUP tapé 4, un « les données s'arrêtent à la ligne 500 » qu'un collègue invalidera la semaine prochaine, un « il y a 12 mois en largeur » — chacun est un ROWS/COLUMNS qui s'ignore, et chacun devient auto-ajustable dès que vous le dérivez de la plage au lieu de le taper. Le seul vrai danger est la confusion singulier/pluriel : si votre formule s'est mise à renvoyer un tableau déversé étonnamment long là où vous attendiez un seul nombre, vous avez presque certainement écrit ROW là où vous vouliez ROWS. Mesurez les tailles avec le pluriel, lisez les positions avec le singulier, et les nombres codés en dur disparaissent de vos modèles.

Comment ExcelMaster vous aide

L'index VLOOKUP fondé sur COLUMNS est le genre de renforcement que les gens savent qu'ils devraient faire et se donnent rarement la peine de mettre en place. Demandez à ExcelMaster de « faire survivre ce VLOOKUP aux colonnes insérées » et il réécrit le troisième argument en un COLUMNS($B$1:B$1) ancré qui grimpe à mesure que vous tirez — ou il propose la version INDEX/MATCH si vous êtes sur une version récente. Demandez « combien de lignes mon filtre a-t-il renvoyées » et il enveloppe le résultat dans ROWS(...) plutôt que de greffer un second COUNTIFS qu'il faudrait tenir synchronisé. Et si vous collez une formule qui confond ROW et ROWS, il repère le lapsus singulier-contre-pluriel avant qu'il ne se transforme en une erreur silencieuse de mille lignes.

Questions fréquentes

Que fait la fonction ROWS dans Excel ?

ROWS(matrice) renvoie le nombre de lignes d'une plage ou d'un tableau. =ROWS(A1:A10) renvoie 10, et =ROWS(A1:C10) renvoie également 10 parce que la plage fait dix lignes de haut quelle que soit sa largeur. Il mesure une taille, contrairement à ROW, qui renvoie le numéro de ligne d'une cellule.

Quelle est la différence entre ROW et ROWS (et COLUMN contre COLUMNS) ?

Le pluriel compte, le singulier localise. ROWS(A1:A10) renvoie 10 (combien de lignes) ; ROW(A1:A10) renvoie le tableau {1;2;…;10} (le numéro de chaque ligne). Utilisez ROWS/COLUMNS quand vous avez besoin d'une taille, et ROW/COLUMN quand vous avez besoin d'une position.

Comment compter le nombre de colonnes d'une plage ?

Utilisez =COLUMNS(plage). =COLUMNS(A1:F1) renvoie 6. Pour compter combien de colonnes de données sont réellement remplies sur une ligne, combinez-le avec un COUNTA, mais pour la largeur d'une plage définie, COLUMNS est exact.

Comment COLUMNS rend-il une formule VLOOKUP plus robuste ?

Remplacez le troisième argument codé en dur de VLOOKUP par un COLUMNS($B$1:B$1) ancré. À mesure que vous tirez la formule vers la droite, la plage s'élargit et COLUMNS renvoie 2, 3, 4…, si bien que l'index de colonne grimpe automatiquement et continue de fonctionner lorsque des colonnes sont insérées — sans renumérotation manuelle.

Pourquoi ROWS(A:A) renvoie-t-il 1 048 576 ?

Parce qu'une référence de colonne entière est chaque ligne de la feuille, et les feuilles de calcul Excel comptent 1 048 576 lignes. ROWS/COLUMNS rapportent la taille physique de la référence, pas le nombre de cellules remplies. Pour le décompte des lignes utilisées, utilisez COUNTA(A:A) ou un résultat de FILTER.

Testé dans

Testé dans : Excel 365 (Windows 11) — dernière vérification le 2026-07-13.

Guides associés : Excel ROW & COLUMN · Excel HYPERLINK · Excel VLOOKUP · INDEX & MATCH · Excel FILTER