Qu'est-ce que la fonction MAP ?
Tu t'en sers pour éviter une colonne de calcul intermédiaire ou une même formule recopiée des dizaines de fois. La transformation s'écrit une seule fois, dans une LAMBDA, et s'applique à tout le tableau d'un coup, même quand la logique se complique avec plusieurs conditions imbriquées.
C'est la version Excel de la fonction « map » connue en programmation : parcourir chaque élément, appliquer une transformation, renvoyer le résultat. Disponible depuis Excel 365, MAP est particulièrement puissante combinée avec FILTRE, TRIER ou UNIQUE pour enchaîner des transformations complexes sur des données dynamiques.
Syntaxe
=MAP(tableau1; [tableau2]; ...; lambda)Clique sur un argument pour aller à son explication.
MAP est disponible uniquement dans Excel 365. Sur une version antérieure, la formule retourne #NOM?. Si LAMBDA n'est pas disponible non plus, utilise des formules matricielles classiques confirmées avec Ctrl+Maj+Entrée.

Comprendre chaque paramètre de la fonction MAP
Tu donnes d'abord un ou plusieurs tableaux, et tu termines TOUJOURS par la LAMBDA : c'est elle qui décrit le calcul à appliquer. Seul tableau1 et la LAMBDA sont obligatoires ; les tableaux supplémentaires sont facultatifs, mais dès que tu en ajoutes un, ta LAMBDA doit gagner un paramètre de plus, sinon Excel te renvoie #CALC!.
tableau1
: le premier tableau à transformerCe peut être une plage de cellules (A2:A10), un tableau nommé, ou le résultat d'une autre fonction dynamique comme FILTRE ou UNIQUE.
MAP parcourt chaque cellule de ce tableau dans l'ordre et passe sa valeur à la fonction LAMBDA comme premier paramètre.
tableau2, ...
: tableaux supplémentaires à combiner élément par élément avec `tableau1`(facultatif)Chaque tableau supplémentaire ajoute un paramètre à ta fonction LAMBDA.
Si tu passes deux tableaux, LAMBDA reçoit deux valeurs à chaque itération (une de chaque tableau). Tous les tableaux fournis doivent avoir la même taille ou être extensibles à la même taille.
lambda
: la fonction LAMBDA qui définit la transformation à appliquer à chaque élémentElle doit avoir autant de paramètres qu'il y a de tableaux fournis à MAP.
Le dernier argument de MAP est toujours LAMBDA. Si tu passes deux tableaux, ta LAMBDA s'écrit LAMBDA(x; y; calcul_avec_x_et_y). Les paramètres peuvent porter n'importe quel nom : préfère des noms explicites comme prix, quantite plutôt que x, y.
Attention : Si le nombre de paramètres dans LAMBDA ne correspond pas au nombre de tableaux fournis à MAP, Excel retourne #CALC!. Compte bien : un tableau = un paramètre LAMBDA.

Exemples pratiques pas à pas
Comment transformer toute une colonne avec les fonctions MAP et LAMBDA
Un client te réclame le catalogue en prix TTC et tu n'as jamais saisi que les prix hors taxes. Tes huit produits sont listés avec leur prix HT, et tu veux la colonne TTC juste à côté (le prix HT plus les 20 % de TVA) sans toucher aux tarifs d'origine. La fonction MAP applique le même calcul à chaque prix et remplit toute la colonne depuis une seule cellule.
- 1Dans une cellule, écris
=MAP(. - 2En 1er argument : sélectionne la plage à transformer,
B2:B9. Ce sont les huit prix hors taxes, que la fonction MAP parcourt cellule par cellule pour passer chacun à la LAMBDA. - 3En 2ᵉ argument : écris la fonction LAMBDA qui décrit le calcul et referme-la,
LAMBDA(prix; prix*1,2). Elle nommeprixla valeur reçue à chaque tour et la multiplie par1,2pour ajouter les 20 % de TVA. Comme tu ne passes qu'un seul tableau, la LAMBDA n'a droit qu'à un seul paramètre, sinon Excel renvoie#CALC!. - 4Ferme la parenthèse de la fonction MAP et appuie sur Entrée.
=MAP(B2:B9; LAMBDA(prix; prix*1,2))prix de la LAMBDA, applique la multiplication et range les résultats dans leur ordre d'arrivée. Le clavier à 29 € donne 34,80 € TTC, affiché 35 € parce que la colonne est mise en forme sans décimale, et les huit valeurs se déversent sous D4 sans que tu recopies quoi que ce soit.Comment combiner deux colonnes ligne par ligne avec la fonction MAP
La facture du mois part demain et il te manque encore le montant de chaque ligne de commande. Ton tableau donne la quantité et le prix unitaire côte à côte, et tu veux les montants ligne par ligne sans ajouter une colonne de calcul qui alourdirait le fichier. La fonction MAP accepte plusieurs tableaux à la fois et les parcourt en parallèle, ligne après ligne.
- 1Dans une cellule, écris
=MAP(. - 2En 1er argument : sélectionne la colonne Quantité,
B2:B7. C'est la valeur qui arrivera en premier dans la LAMBDA à chaque tour. - 3En 2ᵉ argument : sélectionne la colonne Prix unitaire,
C2:C7. Les deux plages doivent couvrir exactement le même nombre de lignes, sinon la fonction MAP allonge la plus courte en répétant sa dernière valeur et te sort des montants faux sans afficher la moindre erreur. - 4En 3ᵉ argument : écris la fonction LAMBDA qui combine les deux valeurs et referme-la,
LAMBDA(quantite; prix; quantite*prix). Comme tu passes maintenant deux tableaux, elle gagne un paramètre de plus. Elle reçoit la quantité et le prix de la même ligne, puis les multiplie. Deux tableaux et un seul paramètre donneraient#CALC!. - 5Ferme la parenthèse de la fonction MAP et appuie sur Entrée.
=MAP(B2:B7; C2:C7; LAMBDA(quantite; prix; quantite*prix))5 dans la colonne Quantité et 10,00 € dans la colonne Prix unitaire, et la LAMBDA multiplie les deux. Les six montants sortent d'un coup, sans colonne de calcul intermédiaire à créer ni à recopier.Comment classer chaque valeur d'une colonne avec les fonctions MAP et SI
Le bilan de la session part au client vendredi et personne n'a envie de classer les scores un par un. Ton tableau liste chaque stagiaire avec sa note sur 100, et tu veux traduire ces chiffres en trois niveaux : Acquis à partir de 80, En cours à partir de 60, À revoir en dessous. La fonction MAP applique la même règle de décision à toute la colonne, aussi longue soit-elle.
- 1Dans une cellule, écris
=MAP(. - 2En 1er argument : sélectionne la colonne des scores,
B2:B7. Un seul tableau en entrée, donc une seule valeur envoyée à la LAMBDA à chaque tour. - 3En 2ᵉ argument : écris la fonction LAMBDA qui classe chaque score et referme-la,
LAMBDA(score; SI(score>=80; "Acquis"; SI(score>=60; "En cours"; "À revoir"))). Elle nommescorela valeur reçue, puis deux fonctions SI imbriquées rangent chaque note en trois niveaux. Au-dessus de 80 le résultat est"Acquis", sinon au-dessus de 60"En cours", et tout le reste tombe sur"À revoir". - 4Ferme la parenthèse de la fonction MAP et appuie sur Entrée.
=MAP(B2:B7; LAMBDA(score; SI(score>=80; "Acquis"; SI(score>=60; "En cours"; "À revoir"))))Comment transformer un résultat filtré avec les fonctions MAP et FILTRE
L'opération commerciale démarre lundi et la remise de 10 % ne concerne que la catégorie Affichage. Ton catalogue mélange les trois catégories dans un seul tableau, et tu veux les prix remisés des seuls écrans et vidéoprojecteurs, sans trier ni recopier quoi que ce soit. La fonction MAP sait travailler sur le résultat d'une autre fonction dynamique, ce qui te permet de filtrer puis de transformer dans la même formule.
- 1Dans une cellule, écris
=MAP(. - 2En 1er argument : écris la fonction FILTRE qui restreint les données et referme-la,
FILTRE(C2:C8; B2:B8="Affichage"). Elle extrait de la colonne Prix HTC2:C8les seules lignes dont la catégorieB2:B8vaut"Affichage", soit trois prix au lieu de sept. La fonction MAP travaille donc sur ce résultat filtré, pas sur une plage figée. - 3En 2ᵉ argument : écris la fonction LAMBDA qui applique la remise et referme-la,
LAMBDA(prix; prix*0,9). Elle reçoit chacun des prix retenus et le multiplie par0,9pour retirer 10 %. Un seul tableau en entrée, donc un seul paramètre. - 4Ferme la parenthèse de la fonction MAP et appuie sur Entrée.
=MAP(FILTRE(C2:C8; B2:B8="Affichage"); LAMBDA(prix; prix*0,9))Comment éviter l'erreur #VALEUR! avec les fonctions MAP et ESTNUM
Le fichier de commissions arrive de l'outil de caisse et deux vendeurs n'ont pas de chiffre saisi, juste une mention en toutes lettres. Tu veux la commission de 5 % sur toute la colonne, et ton premier essai fait tomber ces deux lignes en #VALEUR! parce que la fonction MAP applique le calcul à chaque cellule sans regarder son type. En glissant un test dans la LAMBDA, tu vérifies chaque valeur avant de la multiplier et tu récupères une colonne propre.
- 1Dans une cellule, écris
=MAP(. - 2En 1er argument : sélectionne la colonne des ventes du mois,
B2:B7. Elle arrive telle quelle de l'outil de caisse, mentions texte comprises, et la fonction MAP transmet chaque valeur à la LAMBDA sans rien trier. - 3En 2ᵉ argument : écris la fonction LAMBDA qui sécurise le calcul et referme-la,
LAMBDA(vente; SI(ESTNUM(vente); vente*0,05; "À compléter")). La fonction ESTNUM teste chaque valeur avant tout calcul et répondVRAIsur un montant,FAUXsurN/Ccomme surEn attente. La fonction SI multiplie alors par0,05les seuls montants numériques et renvoie"À compléter"pour le reste, si bien que l'erreur#VALEUR!n'a plus l'occasion d'apparaître. - 4Ferme la parenthèse de la fonction MAP et appuie sur Entrée.
=MAP(B2:B7; LAMBDA(vente; SI(ESTNUM(vente); vente*0,05; "À compléter")))ESTNUM sert de garde-fou : chaque valeur est examinée avant le calcul, et seules les cellules réellement numériques partent à la multiplication. Les mentions N/C et En attente reçoivent le texte de secours au lieu de faire tomber leur ligne en #VALEUR!.
Les erreurs fréquentes avec la fonction MAP
Neuf fois sur dix, le souci vient d'un décompte qui ne colle pas : ta LAMBDA doit avoir exactement autant de paramètres que de tableaux passés, faute de quoi Excel renvoie #CALC!. Le #NOM? est différent, il ne pointe aucune faute de frappe mais une version d'Excel trop ancienne (MAP exige Microsoft 365).
Méfie-toi aussi du cas sournois : des tableaux de tailles différentes ne déclenchent aucune erreur, MAP rallonge le plus court en répétant sa dernière valeur et te sort des résultats faux sans prévenir.
Erreur #CALC! sur la formule MAP
Le nombre de paramètres dans LAMBDA ne correspond pas au nombre de tableaux fournis à MAP. Si tu passes 2 tableaux et que LAMBDA n'a qu'un paramètre, Excel retourne #CALC!.
Solution : Compte les tableaux que tu passes à MAP et assure-toi que LAMBDA a exactement le même nombre de paramètres. Pour 2 tableaux : =MAP(A1:A5; B1:B5; LAMBDA(x; y; x+y)).
Erreur #VALEUR! dans certaines cellules du résultat
Ta LAMBDA tente une opération mathématique sur une cellule contenant du texte non numérique. MAP applique la transformation à toutes les cellules sans distinction de type.
Solution : Ajoute une vérification avec ESTNUM() ou SIERREUR() dans LAMBDA : =MAP(A1:A5; LAMBDA(x; SI(ESTNUM(x); x*2; 0))) renvoie 0 pour les cellules non numériques au lieu d'une erreur.
Erreur #NOM? à la place du résultat
MAP et LAMBDA nécessitent Microsoft 365. Sur Excel 2019 ou une version antérieure, ces fonctions ne sont pas reconnues.
Solution : Vérifie ta version d'Excel via Fichier > Compte. Si MAP n'est pas disponible, remplace-la par des formules matricielles classiques confirmées avec Ctrl+Maj+Entrée, comme =A2:A5*1.2.
Résultats inattendus avec des tableaux de tailles différentes
Quand les tableaux n'ont pas les mêmes dimensions, MAP étend le plus petit en répétant ses dernières valeurs, ce qui donne des résultats trompeurs sans afficher d'erreur.
Solution : Vérifie que tous tes tableaux ont exactement les mêmes dimensions en comparant =LIGNES(A2:A10) et =LIGNES(B2:B10) avant d'utiliser MAP. Utilise ETENDRE pour uniformiser des tableaux de tailles différentes.

MAP vs BYROW vs BYCOL vs MAKEARRAY
Choisis MAP quand tu veux transformer chaque cellule une à une (majorer un prix, nettoyer un texte) ou combiner plusieurs colonnes ligne par ligne. Si au contraire tu dois résumer une ligne ou une colonne entière en une seule valeur (somme, max…), passe à BYROW ou BYCOL ; et quand tu n'as aucune donnée en entrée mais une grille à générer de toutes pièces, c'est MAKEARRAY qu'il te faut.
| Critère | MAP | BYROW | BYCOL | MAKEARRAY |
|---|---|---|---|---|
| Ce que ça fait | Transforme chaque élément d'un tableau | Applique LAMBDA à chaque ligne entière | Applique LAMBDA à chaque colonne entière | Crée un tableau via LAMBDA(ligne; col) |
| Tableau en entrée | Oui (1 ou plusieurs) | Oui (1) | Oui (1) | Non (spécifie les dimensions) |
| Unité traitée | Cellule par cellule | Ligne par ligne | Colonne par colonne | Coordonnée (i; j) |
| Cas d'usage typique | Transformer des valeurs individuelles | Agréger chaque ligne (somme, max...) | Agréger chaque colonne | Créer une table de multiplication, une matrice |
| Disponibilité | Excel 365 | Excel 365 | Excel 365 | Excel 365 |
Questions fréquentes
Oui, MAP accepte plusieurs tableaux. La LAMBDA reçoit alors autant de paramètres qu'il y a de tableaux, permettant des opérations combinées élément par élément. Si tu passes 3 tableaux, ta LAMBDA doit avoir 3 paramètres : LAMBDA(a; b; c; calcul).
MAP étend automatiquement les tableaux plus petits pour correspondre au plus grand. Les valeurs manquantes sont répétées en prolongeant la dernière valeur disponible. Pour éviter des résultats trompeurs, il vaut mieux s'assurer que tous les tableaux ont les mêmes dimensions avant d'appeler MAP.
Oui, tu peux utiliser des plages nommées comme arguments de MAP. Par exemple, =MAP(MesVentes; LAMBDA(x; x*1.2)) fonctionne parfaitement si MesVentes est une plage nommée dans ton classeur.
Une formule matricielle comme =A2:A5*1.2 fait la même chose que =MAP(A2:A5; LAMBDA(x; x*1.2)) pour une transformation simple. MAP prend tout son intérêt quand la logique est complexe (conditions imbriquées, appels à plusieurs fonctions) ou quand tu veux nommer les paramètres pour la lisibilité.
Pour aller plus loin
Continue sur ta lancée après la fonction MAP : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.
Tout voir





