=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.
| A | B | C | |
|---|---|---|---|
| 1 | Item | Price | With VAT |
| 2 | Pen | 2.5 | 3 |
| 3 | Bag | 120 | 144 |
| 4 | Lamp | 35 | 42 |
| 5 | Mug | 8 | 9.6 |
| 6 | Desk | 150 | 180 |
=LAMBDA(price;price*1,2)(B2)Syntaxe de LAMBDA
=LAMBDA([parameter1, parameter2, ...], calculation)
- Chaque
parameterest 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 :
- Allez dans Formules > Gestionnaire de noms et cliquez sur Nouveau (ou Formules > Définir un nom).
- Dans Nom, tapez le nom de la fonction, par exemple
ADDVAT. - Dans Fait référence à, saisissez la LAMBDA sans entrées :
=LAMBDA(price;price*1,2). - 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 :
| A | B | C | |
|---|---|---|---|
| 1 | Item | Price | Price to pay |
| 2 | Pen | 2.5 | 2.5 |
| 3 | Bag | 120 | 108 |
| 4 | Lamp | 35 | 35 |
| 5 | Mug | 8 | 8 |
| 6 | Desk | 150 | 135 |
=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 :
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Student | Test 1 | Test 2 | Test 3 | Best | Average |
| 2 | Ann | 72 | 85 | 90 | 90 | 82.3 |
| 3 | Ben | 64 | 70 | 58 | 70 | 64 |
| 4 | Cara | 88 | 92 | 95 | 95 | 91.7 |
| 5 | Dan | 75 | 60 | 81 | 81 | 72 |
=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 :
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Item | Price | Running total | Total |
| 2 | Pen | 2.5 | 2.5 | 315.5 |
| 3 | Bag | 120 | 122.5 | |
| 4 | Lamp | 35 | 157.5 | |
| 5 | Mug | 8 | 165.5 | |
| 6 | Desk | 150 | 315.5 |
=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 :
| A | B | C | |
|---|---|---|---|
| 1 | Item | Price | Sale price |
| 2 | Pen | 2.5 | 2.25 |
| 3 | Bag | 120 | 108 |
| 4 | Lamp | 35 | 31.5 |
| 5 | Mug | 8 | 7.2 |
| 6 | Desk | 150 | 135 |
=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
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Student | Test 1 | Test 2 | Test 3 | Total |
| 2 | Ann | 72 | 85 | 90 | |
| 3 | Ben | 64 | 70 | 58 | |
| 4 | Cara | 88 | 92 | 95 | |
| 5 | Dan | 75 | 60 | 81 |
À 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.