Menu

Fonction LAMBDA Excel : fonctions personnalisées, MAP, BYROW

=LAMBDA(price;price*1,2)(B2) définit une petite fonction avec une entrée, price, et l'appelle sur B2. Enregistrez une LAMBDA dans le Gestionnaire de noms pour l'utiliser comme une fonction intégrée, ou passez-la à MAP, BYROW, SCAN et REDUCE.

Chaque feuille de cette page est interactive : modifiez un nombre ou une formule et elle se recalcule.

=LAMBDA(price;price*1,2)(B2) définit une petite fonction avec une entrée, price, et l'appelle aussitôt sur B2 : les 2,5 du stylo deviennent 3. Seule, ce n'est qu'une version plus longue de =B2*1,2. L'intérêt de LAMBDA est de donner un nom à la fonction dans le Gestionnaire de noms, pour qu'une longue formule devienne =ADDVAT(B2), et de la passer à MAP, BYROW et aux autres fonctions ci-dessous. Ces fonctions gardent leur nom anglais dans un Excel français ; le tableau affiche les formules avec des virgules et un point décimal, mais vous pouvez aussi les taper avec des points-virgules et une virgule décimale, comme ci-dessus.

Une fonction appelée sur chaque prix
C2
ABC
1ItemPriceWith VAT
2Pen2.53
3Bag120144
4Lamp3542
5Mug89.6
6Desk150180
Cliquez sur une cellule pour voir sa formule. Modifiez un nombre ou une formule et la feuille se recalcule.Dans Excel en français : =LAMBDA(price;price*1,2)(B2)

Syntaxe de LAMBDA

=LAMBDA([parameter1, parameter2, ...], calculation)
  • Chaque parameter est le nom d'une entrée, comme les noms de LET. Jusqu'à 253 sont autorisés.
  • Le dernier argument est le calculation, le calcul qui utilise les paramètres.
  • Les valeurs des paramètres se placent entre parenthèses juste après la parenthèse fermante : =LAMBDA(x;y;x*y)(3;4) renvoie 12.

LAMBDA, MAP, BYROW, BYCOL, SCAN, REDUCE et MAKEARRAY exigent Microsoft 365, Excel 2024 ou Excel pour le web. Excel 2021 a LET mais pas celles-ci. Google Sheets a aussi LAMBDA, et en enregistre une sous un nom avec Données > Fonctions nommées.

Enregistrer une LAMBDA comme fonction personnalisée

Une LAMBDA devient réutilisable quand vous lui donnez un nom. Excel n'a besoin pour cela ni de VBA ni de complément :

  1. Allez dans Formules > Gestionnaire de noms et cliquez sur Nouveau (ou Formules > Définir un nom).
  2. Dans Nom, tapez le nom de la fonction, par exemple ADDVAT.
  3. Dans Fait référence à, saisissez la LAMBDA sans entrées : =LAMBDA(price;price*1,2).
  4. Cliquez sur OK. Tapez maintenant =ADDVAT(B2) dans n'importe quelle cellule du classeur.
Name:        ADDVAT
Refers to:   =LAMBDA(price,price*1.2)
In a cell:   =ADDVAT(B2)        returns 3 when B2 is 2.5

La fonction n'existe que dans ce classeur. Copiez une feuille qui l'utilise dans un autre classeur et le nom suit. Modifiez la LAMBDA une seule fois dans le Gestionnaire de noms et chaque cellule qui l'appelle se met à jour. Testez une LAMBDA dans une cellule, avec des entrées entre parenthèses, avant de l'enregistrer ; une erreur s'y voit plus facilement.

MAP : appliquer une LAMBDA à chaque cellule

MAP appelle la LAMBDA une fois pour chaque cellule d'une plage et renvoie une plage de même forme. Ici, chaque prix supérieur à 100 reçoit 10 % de remise :

10 % de remise sur les prix supérieurs à 100
C2
ABC
1ItemPricePrice to pay
2Pen2.52.5
3Bag120108
4Lamp3535
5Mug88
6Desk150135
Cliquez sur une cellule pour voir sa formule. Modifiez un nombre ou une formule et la feuille se recalcule.Dans Excel en français : =MAP(B2:B6;LAMBDA(p;SI(p>100;p*0,9;p)))

Le sac (120) passe à 108 et le bureau (150) à 135 ; les autres prix restent tels quels. Une seule formule en C2 couvre toute la colonne. MAP peut aussi parcourir côte à côte deux plages de même taille : avec des quantités en D2:D6, =MAP(B2:B6;D2:D6;LAMBDA(p;q;p*q)) multiplie chaque prix par sa quantité.

BYROW : un résultat par ligne

BYROW donne à la LAMBDA une ligne entière à la fois, ce qui permet à la LAMBDA d'y appliquer MAX, SOMME ou MOYENNE. La meilleure note et la moyenne de chaque élève :

Meilleure note et moyenne par élève
E2
ABCDEF
1StudentTest 1Test 2Test 3BestAverage
2Ann7285909082.3
3Ben6470587064
4Cara8892959591.7
5Dan7560818172
Cliquez sur une cellule pour voir sa formule. Modifiez un nombre ou une formule et la feuille se recalcule.Dans Excel en français : =BYROW(B2:D5;LAMBDA(r;MAX(r)))

E2 renvoie 90, 70, 95 et 81 ; F2 renvoie 82.3, 64, 91.7 et 72. Un simple =MAX(B2:D5) donnerait un seul nombre pour tout le tableau ; BYROW est ce qui sépare les lignes dans une seule formule. BYCOL fait la même chose par colonne : =BYCOL(B2:D5;LAMBDA(c;MOYENNE(c))) renvoie la moyenne de chaque contrôle.

SCAN et REDUCE : des cumuls

REDUCE parcourt une plage en transportant une valeur et ne renvoie que le résultat final. SCAN fait la même chose mais renvoie chaque étape, ce qui en fait un cumul en une seule formule :

Un cumul et un total
C2
ABCD
1ItemPriceRunning totalTotal
2Pen2.52.5315.5
3Bag120122.5
4Lamp35157.5
5Mug8165.5
6Desk150315.5
Cliquez sur une cellule pour voir sa formule. Modifiez un nombre ou une formule et la feuille se recalcule.Dans Excel en français : =SCAN(0;B2:B6;LAMBDA(total;x;total+x))

Le premier argument, 0, est la valeur de départ. Pour chaque prix, la LAMBDA reçoit le total jusque-là et le prix, et renvoie le nouveau total. C2 passe par 2.5, 122.5, 157.5, 165.5, 315.5, et D2 n'affiche que le 315.5 final. Pour un simple total, SOMME est plus simple, mais REDUCE peut transporter n'importe quoi, comme un texte qui s'allonge ou un compte qui n'augmente que sur certaines lignes.

Nommer une LAMBDA dans une seule formule avec LET

Une LAMBDA n'a pas besoin du Gestionnaire de noms si une seule formule l'utilise. Nommez-la avec LET et passez le nom à MAP ou BYROW :

Une LAMBDA nommée passée à MAP
C2
ABC
1ItemPriceSale price
2Pen2.52.25
3Bag120108
4Lamp3531.5
5Mug87.2
6Desk150135
Cliquez sur une cellule pour voir sa formule. Modifiez un nombre ou une formule et la feuille se recalcule.Dans Excel en français : =LET(discount;LAMBDA(p;p*0,9);MAP(B2:B6;discount))

Chaque prix reçoit 10 % de remise : 2.25, 108, 31.5, 7.2 et 135. Dans Excel, vous pouvez aussi appeler la LAMBDA nommée directement dans le LET, =LET(f;LAMBDA(x;x*2);f(5)), qui renvoie 10.

Exercice : un total par ligne avec BYROW

À vous
E2
ABCDE
1StudentTest 1Test 2Test 3Total
2Ann728590
3Ben647058
4Cara889295
5Dan756081
Cliquez sur une cellule pour voir sa formule. Modifiez un nombre ou une formule et la feuille se recalcule.

À vous : En E2, renvoyez le total des trois contrôles de chaque élève, un nombre par ligne, avec une seule formule.

Erreurs fréquentes avec LAMBDA

=LAMBDA(x,x*2)          #CALC!   defined but never called
=LAMBDA(x,x*2)(5)       10
=LAMBDA(x,y,x*y)(3)     #VALUE!  two parameters, one value
=LAMBDA(x,x*2)(3,4)     #VALUE!  one parameter, two values
  • #CALC! signifie qu'une LAMBDA se trouve dans une cellule sans être appelée. Ajoutez les entrées entre parenthèses, ou enregistrez-la dans le Gestionnaire de noms et appelez-la par son nom.
  • #VALEUR! (#VALUE! en anglais) signifie que le nombre de valeurs ne correspond pas au nombre de paramètres. Comptez-les des deux côtés.
  • #NOM? (#NAME? en anglais) signifie que la version d'Excel n'a pas LAMBDA, ou qu'un nom enregistré est mal orthographié. Un nom de paramètre suit les règles de LET : pas d'espace, pas de nom qui ressemble à une adresse de cellule.
  • Une LAMBDA de BYROW qui renvoie plusieurs valeurs par ligne donne #CALC!. Chaque ligne doit produire une seule valeur ; pour renvoyer une ligne de résultats, utilisez plutôt MAKEARRAY ou une simple formule matricielle.

Questions fréquentes

Qu'est-ce que la fonction LAMBDA dans Excel ?

Elle transforme une formule en fonction avec des entrées nommées. =LAMBDA(price;price*1,2) prend une entrée appelée price et renvoie price multiplié par 1,2. Appelez-la en ajoutant l'entrée entre parenthèses, =LAMBDA(price;price*1,2)(B2), ou enregistrez-la sous un nom dans le Gestionnaire de noms.

Comment créer une fonction personnalisée dans Excel sans VBA ?

Ouvrez Formules > Gestionnaire de noms > Nouveau, tapez un nom comme ADDVAT, et dans Fait référence à saisissez =LAMBDA(price;price*1,2). Cliquez sur OK, et =ADDVAT(B2) fonctionne dans n'importe quelle cellule de ce classeur.

Pourquoi ma LAMBDA renvoie-t-elle #CALC! ?

Une LAMBDA tapée dans une cellule sans entrées, comme =LAMBDA(x;x*2), est une fonction jamais appelée, donc Excel affiche #CALC!. Ajoutez l'entrée entre parenthèses après elle, =LAMBDA(x;x*2)(5), ou enregistrez-la dans le Gestionnaire de noms.

Quelles versions d'Excel ont LAMBDA ?

Microsoft 365, Excel 2024 et Excel pour le web, avec MAP, BYROW, BYCOL, SCAN, REDUCE et MAKEARRAY. Excel 2021 a LET mais pas LAMBDA.

À quoi sert BYROW dans Excel ?

Elle exécute une LAMBDA une fois par ligne d'une plage et renvoie un résultat par ligne : =BYROW(B2:D5;LAMBDA(r;MAX(r))) renvoie la plus grande valeur de chaque ligne, répandue vers le bas.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER