FLATTEN est une fonction de Google Sheets qui transforme n'importe quel tableau multi-colonnes en une seule colonne verticale. Que tu gères un planning d'équipe, un inventaire réparti sur plusieurs colonnes ou des listes d'emails issues de différentes campagnes, FLATTEN te fait gagner un temps précieux en évitant le copier-coller manuel.
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 de la fonction FLATTEN
=FLATTEN(plage1; [plage2]; [plage3]; ...)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.
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.
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.
Astuce : Tu peux utiliser des colonnes entières : =FLATTEN(A:C). Excel ignore les en-têtes et s'adapte automatiquement quand le tableau s'agrandit.
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).
Exemples pratiques pas à pas
Analyste de données : convertir une matrice de ventes pour analyse
Tu es analyste et tu as reçu un tableau croisé avec les ventes par région (en lignes) et par trimestre (en colonnes). Pour créer un tableau croisé dynamique ou calculer des statistiques globales, tu as besoin de transformer cette matrice 3×4 en liste plate.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | T1 | T2 | T3 | T4 |
| 2 | 125 000 € | 138 000 € | 142 000 € | 156 000 € |
| 3 | 98 000 € | 105 000 € | 112 000 € | 119 000 € |
| 4 | 67 000 € | 72 000 € | 78 000 € | 84 000 € |
=FLATTEN(A2:D4)La fonction lit la matrice 3×4 ligne par ligne et la déverse en une colonne de 12 valeurs (125 000, 138 000, 142 000, 156 000, puis 98 000, etc.). Une fois la liste à plat, tu peux l'envelopper dans SOMME, MOYENNE ou MAX pour calculer le total, la moyenne ou le meilleur trimestre.
Responsable IT : préparer une liste d'utilisateurs pour import CRM
Tu dois importer une liste d'utilisateurs dans ton CRM, mais les emails sont répartis en trois colonnes par équipe. La plupart des outils d'import attendent un CSV avec une seule colonne de données.
| A | B | C | |
|---|---|---|---|
| 1 | Équipe Dev | Équipe Marketing | Équipe Support |
| 2 | alice@company.com | bob@company.com | charlie@company.com |
| 3 | david@company.com | eve@company.com | frank@company.com |
| 4 | grace@company.com | henry@company.com | iris@company.com |
=FLATTEN(A2:C4)La fonction consolide les 9 adresses des trois colonnes en une liste verticale, ligne par ligne (alice, bob, charlie, david, eve, frank, grace, henry, iris). Cette colonne unique s'exporte directement en CSV ; pour retirer les doublons avant l'export, enveloppe le tout dans UNIQUE.
Responsable marketing : créer une liste unique d'emails de plusieurs événements
Tu as collecté des emails de participants à trois événements différents, stockés dans trois colonnes. Avant d'envoyer ta newsletter, tu veux une liste propre sans doublons pour éviter d'envoyer deux fois le même message.
| A | B | C | |
|---|---|---|---|
| 1 | Webinaire | Conférence | Salon |
| 2 | alice@mail.com | bob@mail.com | charlie@mail.com |
| 3 | david@mail.com | eve@mail.com | frank@mail.com |
| 4 | alice@mail.com | grace@mail.com | henry@mail.com |
| 5 | ivan@mail.com | bob@mail.com | julia@mail.com |
=UNIQUE(FLATTEN(A2:C5))La formule aplatit d'abord les 12 emails des trois colonnes en une seule liste, puis UNIQUE en retire les doublons (alice et bob présents deux fois). Il reste 10 adresses uniques, directement exploitables dans ton outil d'emailing.
Astuce de pro : Pour exclure aussi les cellules vides, enchaîne FILTRE : =FILTRE(UNIQUE(FLATTEN(A2:C5)); UNIQUE(FLATTEN(A2:C5))<>"").
Contrôleur de gestion : normaliser des données budgétaires pour reporting
Ton outil de reporting ou Power BI exige un format normalisé avec une valeur par ligne, mais tes données sont en tableau croisé (départements en lignes, mois en colonnes).
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Janvier | Février | Mars | Avril |
| 2 | 45 000 € | 48 000 € | 52 000 € | 49 000 € |
| 3 | 38 000 € | 41 000 € | 39 000 € | 43 000 € |
| 4 | 29 000 € | 31 000 € | 33 000 € | 35 000 € |
=FLATTEN(A2:D4)La fonction transforme le tableau croisé 3×4 en une liste de 12 montants, une valeur par ligne. Ce format normalisé s'exporte directement vers Power BI ou tout outil BI, et tu peux l'envelopper dans SOMME pour obtenir le total (482 000 €).
Envie de t'entraîner sur de vrais exercices Excel ?
M'entraînerLes 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.
Astuces avancées avec FLATTEN
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.
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.
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.
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ère | FLATTEN | TRANSPOSE | TOCOL | EMPILAGE.V |
|---|---|---|---|---|
| Plateforme | Google Sheets uniquement | Excel + Google Sheets | Excel 365 uniquement | Excel 365 uniquement |
| Résultat | Une seule colonne | Inverse lignes et colonnes | Une seule colonne | Empile les plages (colonnes conservées) |
| Plusieurs plages | Oui, illimitées | Non, une seule | Non, une seule | Oui, plusieurs |
| Gestion des vides | Les conserve (FILTRE pour exclure) | Les conserve | Option native pour ignorer | Les conserve |
| Cas d'usage principal | Consolidation en liste | Pivoter un tableau | Aplatir une plage dans Excel | Empiler des tableaux verticalement |
Questions fréquentes sur la fonction FLATTEN
FLATTEN fonctionne-t-elle dans Excel ?
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.
Comment FLATTEN gère-t-elle les cellules vides ?
Par défaut, FLATTEN conserve les cellules vides dans le résultat. Pour les exclure, combine avec FILTRE : =FILTRE(FLATTEN(plage); FLATTEN(plage)<>""). Cela te donne une liste propre sans trous, parfaite pour les analyses ou les exports.
Pour les grandes plages, stocke le résultat de FLATTEN dans une colonne intermédiaire avant de filtrer, afin d'éviter que la formule soit calculée deux fois.
Peut-on aplatir plusieurs plages non adjacentes avec FLATTEN ?
Oui, FLATTEN accepte plusieurs arguments séparés par des points-virgules : =FLATTEN(A1:B5; D1:E3; F10:G15). La fonction combine toutes les plages dans l'ordre spécifié, ce qui est parfait pour consolider des données dispersées sans les déplacer physiquement.
Tu peux même mélanger des plages de tailles différentes et référencer d'autres onglets : =FLATTEN(A1:B5; Feuille2!A1:C10).
FLATTEN préserve-t-elle l'ordre des données ?
Oui, FLATTEN lit les données ligne par ligne, de gauche à droite, puis passe à la ligne suivante. Pour un tableau 2×3, elle lira A1, B1, C1, puis A2, B2, C2. Cet ordre est prévisible et cohérent.
Si tu veux un ordre colonne par colonne (de haut en bas), applique TRANSPOSE avant : =FLATTEN(TRANSPOSE(A1:C5)). TRANSPOSE intervertit lignes et colonnes, donc FLATTEN lira ensuite dans l'ordre vertical.
Quelle est la différence entre FLATTEN et TRANSPOSE ?
FLATTEN transforme tout en une seule colonne verticale, en effaçant la structure bidimensionnelle du tableau. TRANSPOSE, elle, inverse simplement les lignes et colonnes tout en conservant la structure du tableau (les lignes deviennent des colonnes et vice-versa).
Utilise FLATTEN pour consolider des données en une liste unique, et TRANSPOSE pour pivoter un tableau. Tu peux même les combiner : =FLATTEN(TRANSPOSE(A1:C5)) aplatit le tableau en lisant colonne par colonne.
Pour aller plus loin
Bloqué sur une formule Excel ?
Pose ta question à notre assistant Excel IA, il te sort la bonne formule en quelques secondes.
Essayer l'assistant IAGratuit · 10 questions par mois
