Retour au blog

Maîtriser les formules matricielles dans Google Sheets

ARRAYFORMULA, plages dynamiques et fonctions matricielles expliquées — comment appliquer une formule à toute une colonne sans la recopier.

24 juil. 2026SheetFX

Maîtriser les formules matricielles dans Google Sheets

24 juillet 2026

La plupart des utilisateurs de Sheets apprennent les formules cellule par cellule : on écrit une formule en ligne 2, on tire la poignée de recopie jusqu'à la ligne 500, et on espère que personne n'insérera une ligne au-dessus plus tard. Les formules matricielles cassent cette habitude. Une seule formule peut calculer une colonne entière, construire une table de correspondance à la volée, ou générer une liste de nombres sans en taper aucun — sans recopie, sans référence cassée quand les lignes bougent. Cet article passe en revue cinq outils matriciels parmi les plus utiles — ARRAYFORMULA, OFFSET, SORTN, RANK et SEQUENCE — avec des exemples concrets pour chacun.

ARRAYFORMULA : une formule, toute une colonne

ARRAYFORMULA force une formule qui opère normalement sur une seule valeur à s'appliquer sur une plage entière d'un coup, en répandant le résultat sur toutes les lignes couvertes.

=ARRAYFORMULA(C2:C1000 * D2:D1000)

Placez ceci en E2 et la formule remplit E2:E1000 avec C*D pour chaque ligne contenant des données — sans recopie, et sans trou quand de nouvelles lignes sont ajoutées dans la plage. Comparez avec l'approche classique : taper =C2*D2 en E2, puis tirer vers le bas. La version recopiée reste silencieusement fausse si quelqu'un insère une ligne en haut de la feuille et oublie de re-recopier ; la version ARRAYFORMULA continue de fonctionner car elle vit à un seul endroit et couvre toute la plage par construction.

ARRAYFORMULA devient vraiment indispensable avec les fonctions qui ne s'appliquent pas naturellement à des tableaux. IF, les fonctions de texte comme CONCATENATE ou LEN, et les opérations arithmétiques attendent normalement une seule cellule — donnez-leur une plage sans ARRAYFORMULA et vous n'obtiendrez un résultat que pour la première ligne :

=ARRAYFORMULA(IF(B2:B1000="", "", B2:B1000 & " - " & C2:C1000))

Cette formule concatène deux colonnes ligne par ligne, mais seulement pour les lignes où B n'est pas vide — évitant un " - " en trop sur chaque ligne vide en dessous des données. Les fonctions qui se répandent déjà d'elles-mêmes, comme FILTER, SORT ou SEQUENCE, n'ont pas besoin d'être enveloppées — les envelopper dans ARRAYFORMULA reste inoffensif mais redondant.

OFFSET : construire des plages qui se déplacent

OFFSET renvoie une plage décalée et redimensionnée par rapport à une cellule de départ :

=OFFSET(A1, lignes, colonnes, [hauteur], [largeur])

C'est très utile pour des plages qui doivent se déplacer à mesure que les données grandissent, sans réécrire la formule à chaque fois. Un cas fréquent : une fenêtre "30 derniers jours" qui pointe toujours vers les lignes les plus récentes :

=SUM(OFFSET(A1, COUNTA(A:A)-30, 0, 30, 1))

COUNTA(A:A) compte le nombre de lignes remplies dans la colonne A ; en soustrayant 30, on atterrit sur la ligne 30 entrées avant la fin, et l'appel OFFSET découpe exactement ces 30 lignes, sur 1 colonne de large. Quand de nouvelles lignes sont ajoutées, la fenêtre glisse automatiquement vers le bas avec elles.

OFFSET se combine bien avec ARRAYFORMULA quand on veut appliquer la même fenêtre dynamique sur plusieurs cellules de sortie, mais utilisée seule c'est déjà une brique pour construire des tables de correspondance : combinez-la avec MATCH pour récupérer une valeur située un certain nombre de colonnes à droite d'une ligne trouvée, sans passer par un montage VLOOKUP/INDEX classique.

Attention cependant : OFFSET est une fonction volatile — elle se recalcule à chaque modification de la feuille, pas seulement quand ses arguments changent. Sur de grandes feuilles avec de nombreuses formules OFFSET, cela peut ralentir sensiblement le calcul ; préférez INDEX quand vous n'avez pas réellement besoin d'une référence mobile.

SORTN : le top N par groupe

SORTN renvoie les N premières lignes d'une plage, triées, et surtout elle sait grouper — ce qui permet d'obtenir le top N par catégorie en une seule formule :

=SORTN(A2:C500, 2, 2, 3, FALSE)

En détaillant les arguments : renvoyer 2 lignes (n = 2), avec le mode de gestion des ex æquo 2 (inclure les égalités), groupé par la colonne 3 relative à la plage (donc "top 2 par valeur distincte en colonne C"), trié selon cette même colonne en ordre croissant (FALSE = croissant).

Un cas concret : un tableau Région | Représentant | Chiffre d'affaires où l'on veut les 2 meilleurs représentants par région. On trie d'abord la source par chiffre d'affaires décroissant (ou on l'enveloppe dans SORT), puis :

=SORTN(SORT(A2:C500, 3, FALSE), 2, 0, 1, TRUE)

Ici, SORT(A2:C500, 3, FALSE) ordonne tout le tableau par chiffre d'affaires décroissant, et SORTN(..., 2, 0, 1, TRUE) garde les 2 premières lignes par valeur distincte en colonne 1 (Région), avec le mode d'égalité 0 (pas d'ex æquo, exactement n par groupe). Le résultat est un classement compact sans colonne intermédiaire et sans copier-coller manuel région par région — quand de nouveaux représentants ou régions sont ajoutés à la source, le résultat se met à jour tout seul.

Sans SORTN, l'équivalent nécessite habituellement une colonne intermédiaire avec RANK ou COUNTIFS par groupe, plus un FILTER par-dessus ; SORTN condense tout ça en un seul appel.

RANK : classer des valeurs sans trier la feuille

RANK renvoie la position d'une valeur au sein d'une plage, sans perturber l'ordre des lignes — utile quand on veut une colonne de rang à côté de données non triées :

=RANK(valeur, données, [ordre_croissant])
=RANK(C2, $C$2:$C$500, 0)

Placée en D2 puis recopiée vers le bas (ou enveloppée dans ARRAYFORMULA pour éviter la recopie), cette formule attribue à chaque ligne son rang selon la colonne C, la valeur la plus haute en premier (0 = décroissant). Ancrer la plage avec $ est essentiel ici — chaque appel de RANK d'une ligne à l'autre doit comparer par rapport à la même plage complète, pas une plage qui se décale avec la ligne.

Pour classer une colonne entière en une seule fois plutôt que de recopier cellule par cellule :

=ARRAYFORMULA(RANK(C2:C500, C2:C500, 0))

C'est l'un des cas les plus nets où envelopper dans ARRAYFORMULA est nécessaire et non simplement optionnel : RANK recevant deux plages de même taille ne compare chaque valeur à la plage complète que lorsque le moteur matriciel est invoqué — sans l'enveloppe, seule la première ligne se calcule et le reste revient vide.

SEQUENCE : générer des séries de nombres et des colonnes intermédiaires

SEQUENCE génère une liste — ou une grille — de nombres sans les taper ni tirer une poignée de recopie :

=SEQUENCE(lignes, [colonnes], [début], [pas])
=SEQUENCE(12)

produit une colonne unique avec les nombres de 1 à 12 — immédiatement utile comme colonne d'index de ligne qui ne casse pas quand les lignes sont triées ou filtrées, contrairement à un motif =ROW()-1 recopié manuellement.

L'usage le plus puissant est la génération de plages de dates dynamiques. Pour construire 12 dates de début de mois à partir d'une date de départ donnée, sans taper chaque date une par une :

=ARRAYFORMULA(EDATE(DATE(2026,1,1), SEQUENCE(12,1,0,1)))

SEQUENCE(12,1,0,1) produit 0, 1, 2 ... 11 en colonne ; EDATE décale la date de départ de ce nombre de mois, et ARRAYFORMULA fait en sorte qu'EDATE s'applique à chaque élément de la séquence plutôt qu'au premier seulement. Le résultat est une liste de 12 dates de début de mois qui se met à jour toute seule — changez la date de départ à un seul endroit et toute la liste se recalcule.

SEQUENCE combinée à OFFSET ou INDEX est aussi une façon courante de construire une grille de positions relatives pour répandre des formules sur un bloc de taille fixe, sans poser manuellement des numéros de ligne et de colonne statiques.

Quand les formules matricielles valent mieux que les colonnes intermédiaires

Les colonnes intermédiaires sont plus faciles à déboguer — on voit chaque étape — mais elles encombrent la feuille, cassent quand des lignes sont insérées ou supprimées au milieu, et multiplient le travail de maintenance à chaque changement de logique sous-jacente. Les formules matricielles valent le coup quand :

  • Le même calcul doit s'exécuter sur de nombreuses lignes et que ce nombre de lignes va continuer à croître.
  • Vous voulez qu'une seule formule fasse office de source de vérité, plutôt qu'une formule copiée-collée (et potentiellement modifiée de façon incohérente) sur des centaines de lignes.
  • Vous produisez déjà un résultat qui se répand (via FILTER, SORT, SEQUENCE) et voulez le transformer davantage sans le réancrer à des cellules précises.

Les colonnes intermédiaires restent préférables quand un calcul est vraiment ponctuel, quand des collaborateurs non techniques doivent voir et ajuster les valeurs intermédiaires, ou quand la logique matricielle nécessiterait d'imbriquer plusieurs fonctions matricielles au point de devenir illisible.

Pièges courants

  • Tailles de tableaux non concordantes. ARRAYFORMULA(C2:C1000 * D2:D5) renverra une erreur ou un résultat inattendu car les deux plages ne s'alignent pas ligne par ligne. Gardez des arguments matriciels de même forme.
  • Oublier d'envelopper les fonctions qui ne se répandent pas naturellement. IF, les opérations arithmétiques et la plupart des fonctions de texte renvoient silencieusement une seule valeur au lieu d'un tableau si elles ne sont pas enveloppées dans ARRAYFORMULA — la formule ne renverra pas d'erreur, elle donnera simplement l'impression de n'avoir "fonctionné que pour la première ligne".
  • Référencer des colonnes entières (C:C) à l'intérieur d'ARRAYFORMULA. Cela force la formule à évaluer des centaines de milliers de lignes vides, ce qui est lent et peut produire un résultat parasite en ligne 1 à cause de l'en-tête. Bornez la plage explicitement (C2:C1000) à la place.
  • Abuser des fonctions volatiles comme OFFSET dans des formules matricielles. Chaque recalcul à chaque modification s'accumule vite sur de grandes plages ; utilisez INDEX pour des plages de forme fixe quand vous n'avez pas besoin que la plage elle-même se déplace.
  • Oublier les ancrages dans les plages de comparaison, comme dans l'exemple RANK — une plage sans $ se décale lors d'une recopie matricielle, ce qui fausse la comparaison.

Fonctions associées

Newsletter

Recevez des astuces Sheets chaque semaine dans votre boîte mail.

Des mises à jour courtes et pratiques sur Google Sheets et Apps Script — sans bruit, juste des formules qui fonctionnent.