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

Excel MAP, REDUCE et BYROW — bouclez sur des tableaux avec les fonctions d'assistance LAMBDA

|

Excel MAP, REDUCE et BYROW — bouclez sur des tableaux avec les fonctions d'assistance LAMBDA

En brefMAP, REDUCE, SCAN, BYROW et BYCOL sont des fonctions d'ordre supérieur : elles prennent un LAMBDA et l'exécutent sur tout un tableau — un For Each sans macro. Le piège n°1 : le LAMBDA de BYROW/BYCOL doit renvoyer une valeur par ligne/colonne, sinon vous obtenez #CALC!. Choisissez la fonction d'assistance selon la forme de la réponse voulue. Excel 365 et 2024+.

=MAP(A2:A100, LAMBDA(v, IF(v<0, 0, v)))          ' transforme chaque cellule
=BYROW(data, LAMBDA(row, SUM(row)))              ' un total par ligne
=REDUCE(0, A2:A100, LAMBDA(acc, v, acc + v))     ' réduit à une valeur unique

LET vous a donné les variables. LAMBDA vous a donné les fonctions. Les fonctions d'assistance vous donnent la dernière pièce d'un langage de programmation : les boucles. Chacune prend un LAMBDA et l'exécute sur un tableau, de sorte que vous n'écrivez jamais For Each — vous décrivez quoi faire à chaque élément, et Excel itère.

Ce que vous allez apprendre

  • Le modèle mental : les boucles — donnez un LAMBDA à un tableau
  • Qui fait quoi : MAP (transformer), REDUCE (réduire), SCAN (totaux cumulés), BYROW/BYCOL (une valeur par ligne/colonne)
  • La règle n°1 : BYROW doit renvoyer une valeur unique — la correction de #CALC! pour « une somme par ligne »
  • Le motif de l'accumulateur de REDUCE — et quand un simple SUMIFS reste gagnant

Le modèle mental : ce sont les boucles

Il y a cinq fonctions d'assistance, et elles se répartissent nettement selon la forme qui sort :

  • MAP — transforme chaque élément → un tableau de même forme (10 cellules en entrée, 10 en sortie).
  • REDUCEréduit tout un tableau à une seule valeur (un accumulateur courant : total, concaténation, maximum).
  • SCAN — comme REDUCE, mais conserve chaque étape intermédiaire → un total cumulé déversé le long de la colonne.
  • BYROW / BYCOL — exécute le LAMBDA sur chaque ligne (ou colonne) entièreune valeur par ligne (ou colonne).

Une fois que vous les triez par forme de sortie — même forme, une valeur, chaque étape, une-par-ligne — choisir la bonne fonction d'assistance cesse d'être un coup de dés.

Modèles à copier-coller

MAP — appliquer une transformation à chaque élément :

=MAP(A2:A100, LAMBDA(v, IF(v<0, 0, v)))

REDUCE — réduire un tableau à une valeur unique (l'accumulateur acc reporte le résultat) :

=REDUCE(0, A2:A100, LAMBDA(acc, v, acc + v))

SCAN — même idée, mais en déversant chaque étape (un total cumulé) :

=SCAN(0, A2:A100, LAMBDA(acc, v, acc + v))

BYROW — une valeur par ligne (ici, le maximum de chaque ligne) :

=BYROW(A2:D100, LAMBDA(row, MAX(row)))

La règle qui casse BYROW : renvoyer une valeur par ligne

C'est la fonction d'assistance que les gens ratent, et le symptôme est #CALC!. Le LAMBDA que vous passez à BYROW (ou BYCOL) doit renvoyer une valeur unique pour chaque ligne — un nombre, une chaîne de texte, une seule cellule. S'il renvoie un tableau, BYROW ne peut pas le faire entrer et lève #CALC!.

=BYROW(data, LAMBDA(row, SUM(row)))      ' un nombre par ligne -> fonctionne
=BYROW(data, LAMBDA(row, row*2))         ' #CALC!  — row*2 est un tableau, pas une valeur

Ce second cas est en réalité un travail pour MAP (transformer chaque élément), pas pour BYROW. L'erreur va aussi dans l'autre sens : les gens sortent MAP pour obtenir « une somme par ligne » et n'arrivent à rien — parce que MAP agit élément par élément et n'agrège jamais une ligne. Si vous voulez une valeur par ligne, c'est BYROW. Si vous voulez transformer chaque cellule, c'est MAP. C'est la forme de sortie qui tranche.

L'accumulateur de REDUCE : le seul motif à intérioriser

REDUCE est la plus puissante et la moins intuitive, à cause de acc — l'accumulateur qui reporte le résultat courant d'un élément au suivant. Lisez LAMBDA(acc, v, …) comme « voici le résultat jusqu'ici (acc) et la valeur suivante (v) ; renvoie le nouveau résultat-jusqu'ici. »

  • Somme : LAMBDA(acc, v, acc + v) en partant de 0
  • Concaténation : LAMBDA(acc, v, acc & ", " & v) en partant de ""
  • Comptage conditionnel : LAMBDA(acc, v, acc + (v>100)) en partant de 0

Une fois que acc fait tilt, REDUCE gère les tâches du type « parcourir la liste et construire quelque chose » qui vous forçaient autrefois à passer par VBA — soldes courants avec règles, agrégations personnalisées, boucles d'analyse.

Le verdict : quand un simple agrégat reste gagnant

Ces fonctions d'assistance itèrent dans le moteur de calcul et peuvent être lentes sur de très grands tableaux. Pour une simple somme, SUM/SUMPRODUCT/SUMIFS (SOMME / SOMMEPROD / SOMME.SI.ENS) sont plus rapides et plus simples — réservez les fonctions d'assistance aux cas où la logique par élément est vraiment sur mesure, pas quand un agrégat intégré fait déjà le travail.

Vous voulez… Fonction d'assistance Forme de sortie
Transformer chaque élément MAP Même forme que l'entrée
Une valeur par ligne BYROW Une colonne de résultats
Une valeur par colonne BYCOL Une ligne de résultats
Réduire à une valeur unique REDUCE Une cellule
Un total cumulé le long des lignes SCAN Même forme, cumulatif

Si vous étirez une formule de total cumulé sur 10 000 lignes, c'est un SCAN ; si vous ajoutez une colonne d'aide juste pour calculer une valeur par ligne, c'est un BYROW. Mais si un SUMIFS répond déjà à la question, utilisez-le — les fonctions d'assistance sont faites pour la logique sur mesure, pas pour réimplémenter des agrégats.

Comment ExcelMaster vous aide

Les fonctions d'ordre supérieur sont la partie la plus ardue de l'Excel moderne — acc, formes de sortie, MAP-contre-BYROW — et exactement là où un copilote IA fait gagner le plus de temps. ExcelMaster transforme « donne-moi le maximum de chaque ligne » ou « un solde courant qui se remet à zéro chaque mois » en la bonne formule MAP/REDUCE/BYROW, choisit la fonction d'assistance adaptée à la forme de sortie voulue, et explique l'accumulateur étape par étape. Quand une fonction d'assistance lève #CALC!, il vous dit s'il fallait BYROW au lieu de MAP — et la réécrit. Essayez-le sur vos propres données.

Foire aux questions

Quelles sont les fonctions d'assistance LAMBDA dans Excel ?

MAP, REDUCE, SCAN, BYROW et BYCOL sont des fonctions d'ordre supérieur : chacune prend un LAMBDA et l'exécute sur tout un tableau. Elles vous permettent de boucler sur des données dans une formule — transformer, agréger ou accumuler — sans écrire de macro VBA.

Pourquoi BYROW renvoie-t-il #CALC! ?

Le LAMBDA que vous avez passé renvoie un tableau au lieu d'une valeur unique. BYROW a besoin d'une valeur par ligne — agrégez la ligne avec SUM(row), MAX(row), etc. Si vous voulez en fait transformer chaque élément, utilisez MAP, pas BYROW.

Quelle est la différence entre MAP et BYROW ?

MAP agit élément par élément et renvoie un tableau de même forme que l'entrée. BYROW agit sur des lignes entières et renvoie une valeur par ligne. Utilisez MAP pour transformer chaque cellule ; utilisez BYROW pour obtenir un total, un maximum ou un comptage par ligne.

Comment fonctionne REDUCE dans Excel ?

REDUCE(initial, tableau, LAMBDA(acc, v, …)) parcourt le tableau en reportant un accumulateur acc. Pour chaque valeur v, il calcule un nouveau acc. =REDUCE(0, A2:A100, LAMBDA(acc, v, acc+v)) additionne la plage ; en partant de "" avec acc & v, il la concatène.

Quelles versions d'Excel disposent de MAP, REDUCE et BYROW ?

Les fonctions d'assistance LAMBDA sont disponibles dans Excel 2024 et Microsoft 365 pour Windows et Mac. Elles ne sont pas dans Excel 2021, 2019 ni 2016.

Testé dans

Testé dans : Excel 365 (Windows 11) – dernière vérification le 22/06/2026.

Guides associés : Excel LAMBDA · Excel LET · Excel SORT · Excel SEQUENCE