Aller au contenu principal

Qu'est-ce que la fonction FLATTEN ?

Définition
La fonction FLATTEN (Google Sheets uniquement) aplatit une ou plusieurs plages multi-colonnes en une seule colonne verticale, en lisant les données ligne par ligne, de gauche à droite. L'équivalent Excel 365 est TOCOL.

FLATTEN te sert quand tes données sont réparties sur plusieurs colonnes ou plusieurs plages, alors qu'une formule en aval n'accepte qu'une liste à une seule dimension. Elle t'évite de recopier ou de déplacer physiquement les cellules pour les rassembler.

C'est la base de nombreux pipelines de données dans Sheets : consolider des listes dispersées avant de les passer à UNIQUE pour dédoublonner, à FILTRE pour nettoyer, ou à QUERY pour une analyse de type SQL. Une seule formule remplace des dizaines de manipulations manuelles.

Syntaxe

=FLATTEN(plage1; [plage2]; [plage3]; ...)

Clique sur un argument pour aller à son explication.

FLATTEN n'existe pas dans Excel. Dans Excel 365, utilise =TOCOL(plage) pour obtenir le même résultat. Pour les versions antérieures, il faut une formule matricielle avec INDEX et LIGNE, ou une macro VBA.

Le savais-tu ?
FLATTEN n'existe que dans Google Sheets. Dans Excel 365, la fonction équivalente s'appelle TOCOL et aplatit une plage en une seule colonne de la même façon.
Lucas, la mascotte du Dojo, inspecte les arguments de la fonction à la loupe

Comprendre chaque paramètre de la fonction FLATTEN

FLATTEN ne réclame qu'une seule plage pour fonctionner : tout le reste est facultatif. Mais dès que tu en ajoutes plusieurs, l'ordre où tu les écris est l'ordre où elles s'empilent dans la colonne finale, alors range-les comme tu veux les lire.

À l'intérieur de chaque plage, le parcours est toujours le même : ligne par ligne, de gauche à droite. Tu ne choisis pas ce sens, mais tu peux le contourner en passant par TRANSPOSE.

1

plage1

: la première plage ou tableau que tu veux aplatir

Ça peut être une plage rectangulaire comme A1:C5, des colonnes entières comme A:C, ou même une seule cellule. C'est le seul paramètre obligatoire.

FLATTEN parcourt cette plage de gauche à droite, ligne par ligne. Pour une plage A1:B3, elle lira A1, B1, puis A2, B2, puis A3, B3 : 6 valeurs dans une colonne unique. L'ordre est toujours prévisible et cohérent.

2

plage2, plage3, ...

: des plages supplémentaires, séparées par des points-virgules(facultatif)

FLATTEN les combine dans l'ordre où tu les as spécifiées. C'est parfait pour consolider des données non adjacentes sans déplacer physiquement les cellules.

Tu peux mélanger des plages de tailles différentes : =FLATTEN(A1:B5; D1:E3; F10:G15) combine trois zones de tailles différentes dans une seule liste. Tu peux aussi référencer d'autres onglets : =FLATTEN(A1:B5; Feuille2!A1:C10).

Lucas, la mascotte du Dojo, fait une démonstration pas à pas de la fonction dans Excel

Exemples pratiques pas à pas

Exemple 1

Comment aplatir un tableau croisé en une colonne avec la fonction FLATTEN

Tes ventes te sont arrivées en tableau croisé, les régions en lignes et les trimestres en colonnes. C'est agréable à lire, mais inutilisable dès que tu veux un tableau croisé dynamique ou une statistique d'ensemble, qui réclament tous une valeur par ligne. La fonction FLATTEN déroule la matrice en une seule colonne, sans que tu recopies la moindre cellule.

Les étapes
  1. 1
    Dans une cellule, écris =FLATTEN(.
  2. 2
    En 1er argument : sélectionne la plage à aplatir, A2:D4. Elle réunit les 12 cellules de montants, en-têtes exclus, et c'est le seul argument que la fonction FLATTEN réclame.
  3. 3
    Ferme la parenthèse et appuie sur Entrée.
Au final, ta formule devrait ressembler à ça :=FLATTEN(A2:D4)
Explication
La lecture se fait ligne par ligne, de gauche à droite : la première région y passe en entier (125 000, 138 000, 142 000, 156 000), puis la deuxième, puis la troisième. Les 12 cellules de la matrice ressortent dans une colonne unique, et aucune ne se perd en route.
Exemple 2

Comment lire un tableau colonne par colonne avec les fonctions FLATTEN et TRANSPOSE

Tu veux comparer les trimestres entre eux, mais l'aplatissement par défaut mélange les cartes : il sort les quatre trimestres de la première région, puis ceux de la deuxième. Il te faudrait l'inverse, les trois régions d'un même trimestre à la suite, pour lire l'évolution d'un coup d'œil. En faisant pivoter la matrice avant de l'aplatir, tu obtiens exactement cet ordre.

Les étapes
  1. 1
    Dans une cellule, écris =FLATTEN(.
  2. 2
    En 1er argument : écris la plage à retourner avec la fonction TRANSPOSE et referme-la, TRANSPOSE(A2:D4). On la fait pivoter avant de l'aplatir parce que la fonction FLATTEN lit toujours ligne par ligne, et c'est ce quart de tour qui regroupe enfin les régions par trimestre.
  3. 3
    Ferme la parenthèse de la fonction FLATTEN et appuie sur Entrée. Celle de la fonction TRANSPOSE a déjà été refermée à l'étape précédente.
Voici la formule que tu obtiens à la fin :=FLATTEN(TRANSPOSE(A2:D4))
Explication
La fonction TRANSPOSE bascule la matrice sur le côté, si bien que ce qui formait une colonne devient une ligne. Comme la fonction FLATTEN lit de toute façon ligne par ligne, elle parcourt désormais les trimestres l'un après l'autre, et les trois régions d'un même trimestre se retrouvent enfin côte à côte.
Exemple 3

Comment fusionner plusieurs colonnes sans doublon avec les fonctions FLATTEN et UNIQUE

Tu as collecté des adresses sur trois événements, chacune dans sa colonne, et les fidèles se sont inscrits à plusieurs. Avant d'envoyer ta newsletter, tu veux une liste sans doublon, sinon ce sont justement tes meilleurs contacts qui recevront le message en double. La fonction FLATTEN rassemble les trois colonnes en une liste que la fonction UNIQUE nettoie dans la foulée.

Les étapes
  1. 1
    Dans une cellule, écris =UNIQUE(.
  2. 2
    En 1er argument : écris la liste à dédoublonner avec la fonction FLATTEN et referme-la, FLATTEN(A2:C5). Tes adresses sont réparties sur trois colonnes, mais la fonction UNIQUE ne sait dédoublonner qu'une seule liste, alors la fonction FLATTEN rassemble d'abord les 12 cellules en une colonne exploitable.
  3. 3
    Ferme la parenthèse de la fonction UNIQUE et appuie sur Entrée. Celle de la fonction FLATTEN a déjà été refermée à l'étape précédente.
Une fois les morceaux assemblés, ta formule donne ça :=UNIQUE(FLATTEN(A2:C5))
Explication
La fonction FLATTEN empile d'abord les 12 adresses des trois colonnes en une seule liste, puis la fonction UNIQUE la parcourt et ne retient que la première apparition de chaque valeur. alice@mail.com et bob@mail.com revenaient deux fois : il reste 10 adresses, prêtes pour l'envoi.
Le combo gagnant
Enveloppe FLATTEN dans UNIQUE pour consolider plusieurs colonnes puis retirer les doublons en une seule formule, comme =UNIQUE(FLATTEN(A2:C5)). Idéal pour fusionner des listes d'emails dispersées avant un envoi.
Lucas, la mascotte du Dojo, l'air gêné face à une erreur Excel

Les erreurs fréquentes avec la fonction FLATTEN

Avec FLATTEN, les ennuis viennent rarement de la formule elle-même : c'est souvent le contexte autour. Un #NOM? signifie tout simplement que tu es dans Excel, où FLATTEN n'existe pas. Les autres surprises tiennent à ce que FLATTEN ne nettoie rien : elle recopie les cellules vides telles quelles et garde les nombres déguisés en texte, ce qui fait planter tes SOMME.

Deux pièges plus subtils complètent le tableau : l'ordre ligne par ligne qui déroute quand on attendait du colonne par colonne, et le ralentissement quand tu répètes FLATTEN(...) deux fois dans la même formule.

Erreur #NOM? : FLATTEN non reconnue dans Excel

FLATTEN est exclusivement disponible dans Google Sheets. Si tu l'utilises dans Excel, #NOM? s'affiche car Excel ne connaît pas cette fonction.

Solution : Dans Excel 365, utilise =TOCOL(plage) pour obtenir le même résultat. Pour les versions antérieures (Excel 2019 et avant), tu devras utiliser une formule matricielle avec INDEX et LIGNE, ou créer une macro VBA.

Cellules vides incluses dans le résultat

Par défaut, FLATTEN conserve toutes les cellules vides de la plage source. Si ton tableau a des trous, tu te retrouves avec des lignes vides dans le résultat, ce qui perturbe les analyses statistiques ou les imports.

Solution : Enveloppe FLATTEN dans FILTRE pour exclure les vides : =FILTRE(FLATTEN(A1:C10); FLATTEN(A1:C10)<>""). Attention : FLATTEN apparaît deux fois car FILTRE a besoin de la plage à filtrer et de la condition sur cette même plage.

Résultat en format texte au lieu de nombres

Si tes cellules sources contiennent des nombres formatés en texte (import CSV, copier-coller depuis PDF, saisie avec apostrophe), FLATTEN les conserve en texte. Les calculs comme SOMME retourneront alors 0.

Solution : Multiplie par 1 pour forcer la conversion : =FLATTEN(A1:C10)*1. Pour une conversion plus explicite : =ARRAYFORMULA(VALEUR(FLATTEN(A1:C10))). Vérifie aussi l'alignement des cellules : les nombres sont alignés à droite, le texte à gauche.

Ordre des valeurs inattendu

FLATTEN lit ligne par ligne (de gauche à droite, puis passe à la ligne suivante). Certains utilisateurs s'attendent à une lecture colonne par colonne.

Solution : Pour lire colonne par colonne, applique d'abord TRANSPOSE : =FLATTEN(TRANSPOSE(A1:C5)). TRANSPOSE convertit les colonnes en lignes, donc FLATTEN lira ensuite dans l'ordre colonne par colonne. Pour un ordre alphabétique, enchaîne TRIER : =TRIER(FLATTEN(A1:C5)).

Ralentissement sur de grandes plages avec FLATTEN répété

Dans une formule comme =FILTRE(FLATTEN(A1:C1000); FLATTEN(A1:C1000)<>""), FLATTEN est calculée deux fois. Sur de grandes plages, cela peut provoquer des délais de recalcul importants.

Solution : Crée une cellule intermédiaire avec le résultat de =FLATTEN(A1:C1000), puis référence cette cellule dans tes autres formules. Tu évites le double calcul et les performances s'améliorent significativement.

Lucas, la mascotte du Dojo, avec une ampoule, partage des astuces avancées

Astuces avancées avec FLATTEN

1Astuce

Exclure les vides avec FILTRE pour des listes propres

Quand ton tableau source a des cellules vides dispersées, FLATTEN les inclut dans le résultat. La combinaison =FILTRE(FLATTEN(A1:C10); FLATTEN(A1:C10)<>"") te donne uniquement les valeurs non vides, dans leur ordre d'origine.
Pour les grandes plages, stocke d'abord =FLATTEN(A1:C10) dans une colonne intermédiaire, puis filtre dessus : les performances sont bien meilleures.

2Astuce

Compter les occurrences de chaque valeur dans un tableau multi-colonnes

Pour savoir combien de fois chaque produit ou catégorie apparaît dans un tableau réparti sur plusieurs colonnes, aplatis d'abord avec FLATTEN puis utilise NB.SI : =NB.SI(FLATTEN(A1:E10); "Produit A") te donne directement le comptage total.
Pour automatiser sur toutes les valeurs uniques, combine avec UNIQUE : =ARRAYFORMULA(NB.SI(FLATTEN(A1:E10); UNIQUE(FLATTEN(A1:E10)))) retourne le décompte de chaque valeur en une seule formule.

3Astuce

Créer une liste déroulante dynamique à partir d'un tableau multi-colonnes

Si tes valeurs de référence (produits, catégories, tags) sont réparties sur plusieurs colonnes, tu peux alimenter une liste déroulante dynamique : Données, Validation des données, Liste d'une plage, et entre =UNIQUE(FILTRE(FLATTEN(A1:D10); FLATTEN(A1:D10)<>"")). La liste se met à jour automatiquement quand tu modifies le tableau source.
Elle ne contiendra que des valeurs uniques et non vides, sans aucune maintenance manuelle.

Lucas, la mascotte du Dojo, compare deux fonctions Excel

FLATTEN vs TRANSPOSE vs TOCOL vs EMPILAGE.V

Le premier filtre, c'est ton outil : FLATTEN est réservée à Google Sheets, tandis que TOCOL et EMPILAGE.V n'existent que dans Excel 365. TRANSPOSE, elle, tourne dans les deux.

Ensuite, c'est une question de but. Pour fondre plusieurs plages en une seule colonne, FLATTEN gagne car elle en accepte autant que tu veux. Si tu veux juste faire pivoter un tableau sans tout aplatir, c'est TRANSPOSE. Et pour empiler des tableaux en gardant leurs colonnes intactes, vise EMPILAGE.V.

CritèreFLATTENTRANSPOSETOCOLEMPILAGE.V
PlateformeGoogle Sheets uniquementExcel + Google SheetsExcel 365 uniquementExcel 365 uniquement
RésultatUne seule colonneInverse lignes et colonnesUne seule colonneEmpile les plages (colonnes conservées)
Plusieurs plagesOui, illimitéesNon, une seuleNon, une seuleOui, plusieurs
Gestion des videsLes conserve (FILTRE pour exclure)Les conserveOption native pour ignorerLes conserve
Cas d'usage principalConsolidation en listePivoter un tableauAplatir une plage dans ExcelEmpiler des tableaux verticalement
FAQ

Questions fréquentes

Non, FLATTEN est spécifique à Google Sheets. Dans Excel 365, l'équivalent direct est TOCOL qui aplatit un tableau en colonne. Pour les versions antérieures (Excel 2019 et avant), il faut une formule matricielle combinant INDEX et LIGNE, ou une macro VBA.

Ressources

Pour aller plus loin

Continue sur ta lancée après la fonction FLATTEN : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.

Tout voir