TL;DR —
Columns("B:D").Groupreplie les colonnes B à D derrière un plan (outline) horizontal en haut de la feuille — le même pli que le regroupement des lignes, tourné de 90 degrés. Deux choses spécifiques aux colonnes font trébucher les gens : le bouton de réduction atterrit par défaut à droite du groupe (Outline.SummaryColumn), et grouper ne fonctionne que sur des colonnes entières — une plage partielle ne groupe pas les colonnes.
Sub GroupMonthColumns()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Report")
ws.Cells.ClearOutline ' partir a plat pour qu'un re-lancement n'empile pas les niveaux
ws.Outline.SummaryColumn = xlSummaryOnLeft ' le bouton s'attache a la colonne de totaux a GAUCHE
ws.Columns("C:N").Group ' replier les 12 colonnes de mois derriere le total en B
ws.Outline.ShowLevels ColumnLevels:=1 ' reduire seulement les colonnes, laisser les groupes de lignes intacts
End Sub
Grouper des colonnes, c'est grouper des lignes sur l'autre axe : le même verbe .Group, le même
objet Outline en dessous, la même règle de réduction par niveau. Ce qui change avec
les colonnes, c'est le côté où le bouton atterrit par défaut et le fait qu'« une colonne » désigne la
colonne entière — l'écho exact de la règle « insérez l'EntireColumn, jamais
une plage partielle » venue des modifications structurelles.
Ce que vous allez apprendre
- Le modèle mental — un pli horizontal, le plan des lignes tourné de 90 degrés
- Le piège de SummaryColumn — pourquoi le bouton atterrit à droite, et comment le déplacer à gauche
- Pourquoi grouper exige des colonnes entières, et ce que fait une plage partielle à la place
- Comment
ShowLevelsréduit les colonnes sur leur propre axe, indépendamment des groupes de lignes - Pourquoi grouper une colonne n'est pas la même chose que la masquer ou régler sa largeur
Le modèle mental : un pli horizontal
Columns("B:D").Group construit une barre de plan en haut de la feuille, avec un bouton − qui replie
les colonnes B à D hors de vue et un + qui les ramène. C'est le plan des lignes tourné de 90 degrés — au
lieu de replier des blocs de lignes dans une marge à gauche, vous repliez des blocs de colonnes dans une
barre en haut.
Tout ce qui est vrai du regroupement des lignes l'est ici : les colonnes sont
repliées, pas masquées au sens .Hidden et pas supprimées ; le plan les organise en niveaux jusqu'à huit
de profondeur ; et vous réduisez par niveau plutôt qu'en touchant .Hidden. Cet article traite des deux
choses spécifiquement différentes quand l'axe est celui des colonnes.
Le piège de SummaryColumn : le bouton atterrit à droite
Groupez les colonnes B à D et le bouton de réduction n'apparaît pas sur le groupe mais à sa droite,
au-dessus de la colonne E. C'est parce que Worksheet.Outline.SummaryColumn vaut par défaut
xlSummaryOnRight : Excel suppose que votre colonne récapitulative ou de total se trouve à droite du
détail qu'elle résume.
C'est le miroir du réglage par défaut de SummaryRow, et c'est faux pour la même raison dans une mise en page courante — une colonne de totaux placée à gauche, avant une série de détails mensuels :
ws.Outline.SummaryColumn = xlSummaryOnLeft ' le bouton s'attache a la colonne de total a GAUCHE
ws.Columns("C:N").Group ' le total est en colonne B, le detail en colonnes C-N
Laissez le réglage par défaut et le + flotte à droite de votre dernier mois, détaché du total en colonne B
que le lecteur regarde. SummaryColumn est un réglage au niveau de la feuille — réglez-le une fois,
avant de construire le plan, pour qu'il corresponde au côté où se trouvent vos totaux. Notez que
l'orthographe des constantes diffère de la version lignes : les colonnes utilisent xlSummaryOnLeft /
xlSummaryOnRight, les lignes utilisent xlSummaryAbove / xlSummaryBelow.
Grouper des colonnes entières, jamais une plage partielle
Grouper des colonnes n'a de sens que si vous désignez des colonnes entières :
ws.Columns("B:D").Group ' replie trois colonnes entieres
ws.Range("B:D").EntireColumn.Group ' identique, ecrit en toutes lettres
Donnez à .Group une plage partielle et elle ne replie pas les colonnes :
ws.Range("B2:D2").Group ' NE groupe PAS les colonnes B-D
Une plage qui n'est pas faite de colonnes entières ne peut pas devenir un groupe de colonnes — selon la
feuille, vous obtenez une erreur d'exécution ou un regroupement que vous ne vouliez pas. C'est la même règle
qui gouverne l'insertion et la suppression : pour agir sur une colonne, nommez une colonne
(Columns(...) ou .EntireColumn), la même discipline que d'insérer l'EntireColumn.
Si vous avez une cellule d'en-tête et avez besoin de sa colonne, élargissez d'abord à la colonne entière :
ws.Rows(1).Find("Q1", LookAt:=xlWhole).EntireColumn.Group ' trouver l'en-tete, grouper sa colonne entiere
ShowLevels réduit les colonnes sur leur propre axe
Le plan suit les lignes et les colonnes comme deux axes indépendants, ce pourquoi ShowLevels prend deux
arguments :
ws.Outline.ShowLevels ColumnLevels:=1 ' reduire le plan des COLONNES au niveau 1
ws.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1 ' regler les deux axes en un seul appel
Passer ColumnLevels seul replie les colonnes tout en laissant tout regroupement de lignes exactement où il
était — les deux plans ne s'interfèrent pas. C'est le gain à piloter l'objet Outline
plutôt qu'à masquer les choses à la main : vous agissez sur un axe sans perturber l'autre, et les boutons
restent honnêtes.
Grouper n'est ni masquer, ni régler la largeur
Parce qu'un groupe de colonnes réduit ressemble à une colonne masquée, il est facile de confondre trois outils différents. Ils ne sont pas interchangeables :
- Group construit un plan réversible et sensible aux niveaux, avec des boutons que le lecteur peut cliquer — le bon choix quand les colonnes sont du détail que vous repliez et rouvrez.
- Masquer (
.Hidden = True) est un état on/off plat, sans plan et sans bouton — le bon choix quand vous voulez simplement qu'une colonne disparaisse de la vue. - Largeur de colonne (
.ColumnWidth = 0) est une taille, pas un état de visibilité — une intention encore différente.
Optez pour le regroupement quand vous voulez une section repliable que le lecteur contrôle ; optez pour le masquage quand vous voulez une colonne franchement hors du chemin. Utiliser l'un quand vous vouliez l'autre est le bug — une colonne groupée que le lecteur peut rouvrir alors que vous la vouliez fermement masquée, ou une colonne masquée sans rien de la structure de plan que vous recherchiez.
Comment ExcelMaster vous aide
Grouper des colonnes tient en une ligne qui cache trois décisions — de quel côté doit se trouver le bouton
de réduction pour votre mise en page, si vous lui avez donné des colonnes entières ou une plage partielle
qui ne fait silencieusement rien, et si vous vouliez vraiment un groupe repliable plutôt qu'un simple
masquage — et se tromper sur n'importe laquelle échoue sans la moindre erreur : un bouton qui flotte à
droite d'un total placé à gauche, un appel .Group qui n'a rien groupé, ou un lecteur qui rouvre une
colonne que vous vouliez masquée.
ExcelMaster vous laisse dire ce
que vous voulez — « replie les douze colonnes de mois derrière la colonne de totaux, bouton à gauche, réduit »
— et il règle SummaryColumn en conséquence, groupe les colonnes entières (jamais une plage partielle),
réduit avec ColumnLevels pour que les groupes de lignes restent en place, et se tourne vers le masquage
quand c'est réellement ce que vous vouliez. Vous gardez le classeur et le code.
Questions fréquentes
Comment grouper des colonnes en VBA ?
Appelez .Group sur des colonnes entières : Columns("B:D").Group replie les colonnes B à D derrière une
barre de plan horizontale avec un bouton de réduction en haut. Qualifiez la feuille —
ThisWorkbook.Worksheets("Report").Columns("B:D").Group — pour que cela ne dépende pas de la feuille
active. Les colonnes sont repliées, pas masquées ni supprimées.
Pourquoi le bouton de réduction est-il à droite de mes colonnes groupées ?
Parce que Worksheet.Outline.SummaryColumn vaut par défaut xlSummaryOnRight, ce qui suppose que votre
colonne de total se trouve à droite du détail. Si votre colonne de totaux est à gauche, réglez
ws.Outline.SummaryColumn = xlSummaryOnLeft avant de grouper pour que le bouton s'y attache.
Pourquoi grouper ne fait-il rien quand je passe une plage comme B2:D2 ?
Parce qu'une plage partielle n'est pas faite de colonnes entières, et que seules des colonnes entières
peuvent former un groupe de colonnes. Utilisez Columns("B:D").Group ou Range("B:D").EntireColumn.Group.
Pour grouper la colonne où se trouve un en-tête, trouvez-le et élargissez à la colonne entière :
Rows(1).Find("Q1", LookAt:=xlWhole).EntireColumn.Group.
Comment réduire des colonnes groupées sans affecter les lignes groupées ?
Passez uniquement l'axe des colonnes à ShowLevels : ws.Outline.ShowLevels ColumnLevels:=1 réduit le
plan des colonnes en laissant intact tout regroupement de lignes. Le plan suit les lignes et les colonnes
comme des axes indépendants, donc régler l'un ne perturbe pas l'autre.
Grouper une colonne est-il la même chose que la masquer ?
Non. Grouper construit un plan réversible avec un bouton que le lecteur peut cliquer pour replier et
déplier les colonnes ; masquer (.Hidden = True) est un état on/off plat, sans plan ni bouton. Utilisez le
regroupement pour une section repliable que le lecteur contrôle, et le masquage
quand vous voulez simplement que la colonne soit hors de vue.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 16/09/2026.
Guides associés : VBA Group Rows · VBA Outline · VBA Hide Columns · VBA Column Width · VBA Insert Columns
