En bref — Fusionner n'est pas du formatage.
Range("A1:C1").Mergefond trois cellules en une seule qui s'étend sur trois colonnes, et seule la valeur en haut à gauche survit —B1etC1sont effacées sans aucun avertissement. Un bloc fusionné casse ensuite le tri, les calculs deRange, les insertions de colonnes et les boucles. Quand vous voulez seulement un titre centré sur plusieurs colonnes, utilisez Center Across Selection (HorizontalAlignment = xlCenterAcrossSelection), qui a l'air identique mais laisse chaque cellule indépendante.
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Report")
' Cela RESSEMBLE a un titre centre - et supprime discretement B1 et C1.
ws.Range("A1:C1").Merge
' Le sosie qui garde chaque cellule separee :
ws.Range("A1:C1").HorizontalAlignment = xlCenterAcrossSelection
Fusionner des cellules est la seule opération de la famille du formatage qui ne soit pas cosmétique. Font, Interior et NumberFormat changent l'apparence d'une cellule et ne touchent jamais à son contenu. Merge fait l'inverse : il change la grille elle-même et détruit des données en le faisant. Ce guide s'articule autour de cette seule distinction — la fusion est structurelle, pas visuelle — parce que chaque casse-tête de cellule fusionnée en aval est la conséquence de traiter un changement du modèle de données comme s'il s'agissait d'un choix de formatage.
Ce que vous allez apprendre
- Le modèle mental — fusionner change la grille, pas seulement l'apparence
- La règle la plus importante — seule la valeur en haut à gauche survit à une fusion
Merge,UnMerge,MergeCellsetMergeArea— les quatre que vous utilisez vraiment- Précisément comment les cellules fusionnées cassent le tri, les calculs de
Range, les insertions et les boucles - Le sosie qui garde les cellules indépendantes — Center Across Selection
- Repérer et nettoyer les cellules fusionnées sans risque en code
Le modèle mental : la fusion change la grille, pas l'apparence
Une cellule fusionnée n'est pas une cellule plus grande au même contenu — c'est un nouvel objet
structurel. Là où il y avait trois cellules indépendantes, il y a désormais une seule cellule dont
l'adresse est le coin haut gauche (A1) et dont l'empreinte (MergeArea) est A1:C1. B1 et C1
existent toujours comme coordonnées, mais elles sont maintenant vides et inutilisables ; tout ce
qu'elles contenaient a disparu.
C'est pourquoi la règle du groupe de l'apparence — « le formatage ne change jamais la valeur » — ne s'applique pas ici. La fusion est l'exception qui la confirme. Tout ce qui suit découle de prendre cela au sérieux : si fusionner réécrit la grille et efface des valeurs, alors tout code qui, plus tard, trie, insère, parcourt en boucle ou fait de l'arithmétique sur cette grille doit composer avec une forme qui ne correspond plus au rectangle bien net qu'il suppose.
La règle la plus importante : seule la valeur en haut à gauche survit
Dites-le une fois : Merge garde la valeur de la cellule en haut à gauche et jette le reste.
Excel affiche une boîte de dialogue d'avertissement à ce sujet quand vous fusionnez à la main ; en
VBA il n'y a pas de dialogue — cela se produit, simplement.
ws.Range("A1").Value = "Q3"
ws.Range("B1").Value = "Region"
ws.Range("C1").Value = "Total"
ws.Range("A1:C1").Merge ' A1 garde "Q3"; "Region" et "Total" sont EFFACES
Debug.Print ws.Range("B1").Value ' n'affiche rien - B1 est maintenant vide
Si vous ne voulez aucune perte de données, vous ne devez pas fusionner des cellules qui contiennent des valeurs — ne fusionnez que des plages vides, ou déplacez d'abord les valeurs. C'est la raison pour laquelle une macro qui « range juste l'en-tête » peut discrètement supprimer deux colonnes de libellés : la fusion ressemblait à un alignement, mais c'était une suppression.
Il n'y a ici aucun filet de sécurité sur lequel compter. Contrairement au bouton Fusionner du ruban,
la méthode .Merge de VBA ne déclenche aucun avertissement — rien ne vous empêche de fusionner
par-dessus des données actives —, c'est donc à vous de faire la vérification et de ne fusionner que
des plages dont vous savez qu'elles sont vides. Couper les alertes avec Application.DisplayAlerts = False (fréquent dans les macros en masse) ne ferait jamais que masquer un avertissement, jamais la
perte de données : éteindre l'alarme ne rend pas l'incendie inoffensif.
Merge, UnMerge, MergeCells et MergeArea
Quatre membres couvrent tout ce que vous faites avec les fusions :
ws.Range("A1:C1").Merge ' fond en une seule cellule (la valeur en haut a gauche gagne)
ws.Range("A1:C3").Merge Across:=True ' fusionne chaque LIGNE separement - trois fusions 1x3, pas un bloc
ws.Range("A1").UnMerge ' divise le bloc fusionne en cellules individuelles
Debug.Print ws.Range("B1").MergeCells ' True si B1 fait partie d'une cellule fusionnee
Debug.Print ws.Range("B1").MergeArea.Address ' "$A$1:$C$1" - le bloc complet auquel B1 appartient
Deux méritent qu'on s'y attarde. Merge Across:=True est la variante par ligne — elle fusionne
chaque ligne de la plage indépendamment, ce que vous voulez pour des titres de ligne répétés et qui
n'est presque jamais évident d'après le nom. Et MergeArea est la propriété qui vous sauve : à partir
de n'importe quelle cellule d'un bloc fusionné, elle renvoie le bloc entier, si bien que vous pouvez
le lire ou le défusionner sans connaître ses bornes exactes.
Comment les cellules fusionnées cassent vos macros
C'est le coût pratique, et c'est pourquoi les développeurs expérimentés évitent les fusions dans les plages de données. Quatre choses cassent :
- Le tri lève une erreur. Triez une plage qui contient des cellules fusionnées et Excel déclenche « Cette opération nécessite que les cellules fusionnées soient de taille identique. » Un seul en-tête fusionné peut stopper net VBA Sort.
- Les calculs de
Rangementent. UnA1:C1fusionné indique un.MergeArea.Columns.Countde 3, mais en tant que valeur il se comporte comme une seule cellule enA1. Le code qui suppose une colonne par valeur compte de travers. - Les insertions et suppressions sont bloquées. Vous ne pouvez pas insérer ni supprimer une colonne qui passe au milieu d'un bloc fusionné — Excel refuse, si bien que les modifications structurelles échouent sur des dispositions que vous croyiez correctes.
- Les boucles sautent des cellules.
For Each c In Range("A1:C1")visiteA1(avec la valeur) puisB1,C1comme cellules vides — la fusion n'en a pas fait une seule itération, elle en a rendu deux vides.
Aucune ne s'annonce comme « c'est la fusion qui a fait ça ». Elles apparaissent sous la forme d'une erreur de tri, d'un décompte faux de deux, ou d'un vide là où vous attendiez un libellé — des heures plus tard, loin de la fusion.
Le sosie qui garde les cellules indépendantes : Center Across Selection
Voici la partie tranchée, et c'est la chose la plus utile de tout ce guide : quand vous avez
seulement besoin d'un titre centré sur plusieurs colonnes, ne fusionnez pas — utilisez Center Across
Selection. Elle produit un résultat visuel identique, mais chaque cellule reste séparée, si bien
que le tri, l'insertion, les boucles et les calculs de Range continuent tous de fonctionner :
' Ressemble exactement a un titre fusionne couvrant A1:C1 - mais A1, B1, C1 restent independants.
ws.Range("A1").Value = "Quarterly Report"
ws.Range("A1:C1").HorizontalAlignment = xlCenterAcrossSelection
Le texte réside dans la cellule en haut à gauche et est dessiné centré sur les cellules vides à sa
droite, purement comme un alignement. Rien n'est effacé, rien n'est fusionné. Réservez la vraie
Merge au cas rare où vous avez réellement besoin d'une seule cellule physique — un unique bloc de
légende au-dessus d'un formulaire imprimé — et jamais pour des en-têtes au-dessus de données que vous
allez trier ou filtrer.
Repérer et nettoyer les cellules fusionnées
Vous héritez d'une feuille pleine de fusions ? Le nettoyage sûr consiste à : repérer chaque bloc
fusionné via son MergeArea, noter la valeur, défusionner, puis réappliquer Center Across Selection
pour que l'apparence survive :
Dim c As Range
For Each c In ws.UsedRange
If c.MergeCells Then
With c.MergeArea
.UnMerge
.HorizontalAlignment = xlCenterAcrossSelection ' garder l'aspect centre, perdre la fusion
End With
End If
Next c
Une précaution pour tester les fusions : MergeCells renvoie True, False, ou Null quand une
plage mêle des cellules fusionnées et non fusionnées. Lire ce Null dans une variable Boolean lève
une erreur de type, testez-le donc sur des cellules uniques (comme ci-dessus) ou avec
If c.MergeCells = True Then, qui gère Null sans risque. Ce Null relève de la même idée d'« état
mixte » que vous croisez ailleurs en VBA — une propriété qui décrit une plage entière ne peut
répondre proprement que lorsque la plage est uniforme.
Comment ExcelMaster aide
Les cellules fusionnées sont un piège précisément parce qu'elles ont l'air inoffensives — un titre
centré, un en-tête bien rangé — tout en effaçant des valeurs et en désarmant le tri, les insertions,
les boucles et les calculs de Range plus loin dans la macro. Et la solution (Center Across
Selection) est de celles dont la plupart des gens n'ont jamais entendu parler, cachée derrière un
bouton Merge d'apparence évidente.
ExcelMaster vous laisse dire
ce que vous voulez comme disposition. Demandez-lui de « centrer le titre sur les trois premières
colonnes » et il utilise xlCenterAcrossSelection — le sosie sûr — au lieu d'une fusion destructrice
de données, et quand vous lui confiez une feuille pleine de fusions héritées, il les défusionne,
préserve les valeurs et garde l'apparence centrée. Vous gardez le classeur et le code ; vous vous
épargnez l'après-midi passé à remonter d'un libellé vide ou d'une erreur « les cellules fusionnées
doivent être de taille identique » jusqu'à une fusion que vous aviez oubliée.
Questions fréquentes
Comment fusionner des cellules en VBA Excel ?
Utilisez Range("A1:C1").Merge pour fondre une plage en une seule cellule. Seule la valeur en haut à
gauche survit — les autres sont effacées sans avertissement en code — ne fusionnez donc que des
plages vides ou déplacez d'abord les valeurs. Pour fusionner chaque ligne d'un bloc séparément,
utilisez Range("A1:C3").Merge Across:=True.
Pourquoi la fusion de cellules a-t-elle supprimé mes données en VBA ?
Parce que Merge ne garde que la valeur de la cellule en haut à gauche et jette tout le reste de la
plage. Excel affiche un avertissement quand vous fusionnez à la main, mais VBA fusionne en silence. Si
vous voulez l'apparence sans perdre de données, utilisez Range("A1:C1").HorizontalAlignment = xlCenterAcrossSelection, qui centre le titre sur les colonnes tout en gardant intacte la valeur de
chaque cellule.
Comment défusionner des cellules en VBA ?
Appelez UnMerge sur n'importe quelle cellule du bloc : Range("A1").UnMerge. Comme vous pouvez
ignorer les bornes exactes, utilisez d'abord MergeArea — Range("B1").MergeArea.UnMerge divise tout
le bloc auquel B1 appartient. Après défusion, la valeur d'origine en haut à gauche reste dans la
cellule en haut à gauche ; les autres cellules sont vides.
Quelle est la différence entre Merge et Center Across Selection ?
Merge fond physiquement les cellules en une seule, effaçant tout sauf la valeur en haut à gauche et
cassant le tri, les insertions et les boucles. Center Across Selection (HorizontalAlignment = xlCenterAcrossSelection) ne fait que dessiner la valeur en haut à gauche centrée sur les cellules
voisines — elles restent indépendantes, si bien que les formules, le tri et les modifications
structurelles continuent de fonctionner. Elle a l'air identique et est presque toujours le meilleur
choix.
Pourquoi le tri échoue-t-il quand une plage contient des cellules fusionnées ?
Excel ne peut pas réordonner les lignes quand des blocs fusionnés finiraient de tailles différentes, il déclenche donc « Cette opération nécessite que les cellules fusionnées soient de taille identique » et refuse de trier. Une seule cellule d'en-tête fusionnée au-dessus d'une plage de données suffit à le déclencher. Défusionnez la plage (et passez à Center Across Selection pour les éventuels titres) avant de trier.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 14/08/2026.
Guides associés : VBA Borders · VBA Column Width · VBA Range · VBA Sort · VBA Cell Color
