Retour aux fonctions

MAP

Associe à chaque valeur des matrices fournies une nouvelle valeur en appliquant une fonction LAMBDA à chaque valeur.

ArrayMAP(array1, [array2, ...], LAMBDA)

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 : Une LAMBDA dont 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/A ou « Nombre d'arguments incorrect ». La LAMBDA a 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 MAP doit être la LAMBDA.
  • 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.

Articles associés

Newsletter

Plus d'exemples sur MAP arrivent bientôt.

Nous préparons des mises à jour courtes et pratiques pour les utilisateurs avancés de Sheets.