MAP applique une fonction à chaque élément d'un ou plusieurs tableaux et renvoie les résultats sous la forme d'un nouveau tableau de même forme. C'est la manière « matricielle » de dire « fais ceci pour chaque valeur », surtout quand une fonction ne fonctionne pas sur des plages entières par elle-même.
Syntaxe
=MAP(array1, [array2, ...], lambda)
array1: La plage ou le tableau à traiter.array2, ...[Facultatif] : D'autres tableaux de même taille, traités en parallèle.lambda: UneLAMBDAdont les paramètres correspondent aux tableaux, un par tableau, suivis du calcul. Ce doit être le dernier argument.
La LAMBDA s'exécute une fois par élément. Pour deux tableaux, elle reçoit à chaque fois la paire d'éléments correspondante. Le résultat a les mêmes dimensions que les tableaux d'entrée.
Exemples de base
=MAP(A2:A10, LAMBDA(x, x * 2))
Double chaque valeur de A2:A10.
=MAP(A2:A10, B2:B10, LAMBDA(prix, qte, prix * qte))
Multiplie chaque prix par la quantité située à côté. Les deux tableaux doivent avoir la même taille.
=MAP(A2:A10, LAMBDA(nom, UPPER(TRIM(nom))))
Nettoie et met en majuscules chaque nom.
Gérer les cellules vides
Une plage comme A2:A inclut les cellules vides jusqu'en bas, et MAP les traiterait toutes. Protégez-vous des cellules vides dans la LAMBDA :
=MAP(A2:A, LAMBDA(x, IF(x = "", "", x * 2)))
Ou filtrez-les d'abord :
=MAP(FILTER(A2:A, A2:A <> ""), LAMBDA(x, x * 2))
Pourquoi MAP, alors qu'il y a ARRAYFORMULA ?
ARRAYFORMULA convient aux fonctions qui acceptent des tableaux, mais de nombreuses fonctions réduisent une plage à un seul résultat ou ne se déploient pas correctement, comme TEXTJOIN, SPLIT, INDEX ou les fonctions à logique complexe. MAP exécute toute la LAMBDA pour chaque élément : tout ce que vous pouvez calculer pour une valeur peut donc être appliqué à toute une liste :
=MAP(A2:A10, LAMBDA(texte, COUNTA(SPLIT(texte, " "))))
Compte les mots de chaque cellule. COUNTA(SPLIT(...)) réduirait tout avec ARRAYFORMULA, mais fonctionne élément par élément avec MAP.
Formules pratiques
Nettoyage en plusieurs étapes par élément
=MAP(A2:A100, LAMBDA(x, LET(y, TRIM(x), IF(y = "", "", PROPER(y)))))
Libellés conditionnels
=MAP(B2:B100, LAMBDA(note, IFS(note >= 90, "A", note >= 80, "B", note >= 70, "C", TRUE, "F")))
Recherches avec valeur de repli
=MAP(A2:A100, LAMBDA(cle, IFERROR(VLOOKUP(cle, Prix!A:B, 2, FALSE), "n/d")))
Combiner deux colonnes
=MAP(A2:A100, B2:B100, LAMBDA(prenom, nom, prenom & " " & nom))
Calculs par cellule qui renvoient du texte
=MAP(A2:A100, LAMBDA(d, TEXT(d, "mmm yyyy")))
Appliquer MAP à une plage à deux dimensions
Avec une plage de plusieurs colonnes, MAP procède cellule par cellule et renvoie la même forme :
=MAP(A2:C10, LAMBDA(x, IF(x = "", "", x * 1.1)))
Pour traiter des lignes ou des colonnes entières d'un coup, utilisez plutôt BYROW ou BYCOL, qui passent une ligne ou une colonne entière à la LAMBDA :
=BYROW(A2:C10, LAMBDA(ligne, SUM(ligne)))
Utiliser une fonction nommée
Si vous avez enregistré une LAMBDA comme fonction nommée, passez-la par son nom :
=MAP(A2:A100, NETTOYER_TEXTE)
Erreurs courantes
#N/Aou « Nombre d'arguments incorrect ». LaLAMBDAa un nombre de paramètres différent du nombre de tableaux fournis. Un paramètre par tableau.- Tableaux de tailles différentes. Quand vous passez plusieurs tableaux, ils doivent avoir les mêmes dimensions.
- Résultats dans des lignes vides indésirables. La plage est ouverte, comme
A2:A. Protégez-vous des cellules vides ou utilisez une plage bornée. #REF!: « Le résultat de la matrice n'a pas été développé car il écraserait des données ». Le résultat a besoin de place pour se déverser. Videz les cellules en dessous.- La lambda n'est pas en dernier. Le dernier argument de
MAPdoit être laLAMBDA. - Lent sur d'énormes plages. La fonction s'exécute une fois par cellule. Gardez des plages bornées.
MAP, ARRAYFORMULA, BYROW ou REDUCE ?
MAP: applique une fonction à chaque élément, renvoie un tableau de même forme.ARRAYFORMULA: étend une formule ordinaire à une plage, et elle est plus courte quand la fonction gère les tableaux.BYROW/BYCOL: applique une fonction à chaque ligne ou colonne entière et renvoie un résultat par ligne ou par colonne.REDUCE/SCAN: transporte une valeur courante dans la liste, et renvoie la valeur finale ou chaque valeur intermédiaire.
Questions fréquentes
MAP modifie-t-elle les données d'origine ? Non. Elle renvoie un nouveau tableau.
MAP peut-elle renvoyer du texte et des nombres ? Oui, la LAMBDA peut renvoyer n'importe quoi.
La LAMBDA peut-elle renvoyer plusieurs valeurs par élément ? Non. Elle doit renvoyer une seule valeur par élément, afin que le résultat garde la même forme que l'entrée.
Peut-on utiliser MAP sur une seule valeur ? Oui, mais c'est inutile ; utilisez directement la formule.
Fonctions associées
LAMBDA: Crée des fonctions personnalisées.LET: Nomme des valeurs à l'intérieur d'une formule.ARRAYFORMULA: Applique une formule à toute une plage.FILTER: Renvoie les lignes qui remplissent une condition.SPLIT: Divise un texte au niveau d'un séparateur.