TL;DR — L'Outline est l'objet sur lequel s'appuie tout regroupement. Une fois qu'il existe, vous pilotez toute la feuille à travers lui :
ws.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1réduit ou développe chaque groupe à un niveau donné en un seul appel — bien mieux qu'une boucle sur.Hidden. Excel peut aussi construire le plan pour vous :AutoOutlinelit vos formules de synthèse, etSubtotalinsère les totaux, les groupes et le plan, tout d'un coup.
Sub CollapseToTotals()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Report")
ws.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1 ' les deux axes a un niveau en un seul appel
End Sub
Grouper des lignes et grouper des colonnes ajoutent tous deux des bandes à cet objet. Apprendre à piloter
le plan directement — réduire par niveau, laisser Excel le construire automatiquement à partir des
formules, le générer avec des sous-totaux, et le réinitialiser proprement — voilà ce qui transforme un tas
d'appels .Group en un rapport que vous pouvez replier, déplier et reconstruire à la demande.
Ce que vous allez apprendre
ShowLevels— réduire ou développer toute la feuille à un niveau, les deux axes en un seul appelAutoOutline— laisser Excel construire le plan à partir de vos formules, et pourquoi cela échoue sans ellesSubtotal— créer ensemble totaux, groupes et plan, et le piège du re-lancement qui les empileShowDetail— développer ou réduire un seul nœud plutôt qu'un niveau entierClearOutlineface àRemoveSubtotal— retirer le pli, ou retirer le pli et les lignes insérées
ShowLevels : réduire toute la feuille par niveau
Le plan organise les groupes en niveaux — le niveau 1 est le plus réduit (totaux seulement), les nombres
plus élevés montrent davantage de détail. ShowLevels règle la feuille sur un niveau directement, sans
toucher le moindre .Hidden :
ws.Outline.ShowLevels RowLevels:=1 ' lignes : n'afficher que le niveau superieur (totaux)
ws.Outline.ShowLevels RowLevels:=3 ' lignes : developper jusqu'a trois niveaux de profondeur
ws.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1 ' regler les deux axes a la fois
Les lignes et les colonnes sont des axes indépendants, vous pouvez donc en passer un et laisser l'autre
tranquille. Deux choses à savoir : ShowLevels sans argument ne fait rien — vous devez passer au moins un
axe — et un niveau supérieur au groupe le plus profond développe simplement cet axe en entier, sans générer
d'erreur. C'est l'outil qui remplace toute boucle artisanale de .Hidden = True/False, et il garde les
boutons du plan honnêtes.
AutoOutline : laisser Excel le construire — si vos formules le méritent
AutoOutline construit un plan automatiquement en lisant vos formules. Si la colonne N totalise les
colonnes B à M avec =SUM(B2:M2), et qu'une ligne de sous-total additionne les lignes au-dessus d'elle,
Excel infère la structure et trace les groupes pour vous :
ws.UsedRange.AutoOutline ' inferer les groupes a partir des formules de synthese
Le piège — et la raison pour laquelle les gens le classent comme cassé — c'est que ce n'est pas magique.
AutoOutline a besoin de formules de synthèse cohérentes à lire. Pointez-le sur un simple bloc de valeurs
sans structure SUM/SUBTOTAL et il échoue avec l'erreur d'exécution 1004, « Cannot create an outline » :
On Error Resume Next
ws.UsedRange.AutoOutline
If Err.Number <> 0 Then MsgBox "No summary formulas to outline" ' attendu sur des donnees non structurees
On Error GoTo 0
AutoOutline est donc le bon choix sur un rapport structuré par formules, et le mauvais choix sur un simple
déversement de données plates. Quand les données n'ont pas encore de totaux, l'outil qui les ajoute est
Subtotal.
Subtotal : totaux, groupes et plan en un seul appel
Range.Subtotal est la fonctionnalité qui fait tout le travail d'un coup — elle insère des lignes de
sous-total avec des formules SUBTOTAL(9, ...) à chaque changement d'une colonne clé, groupe le détail en
dessous, et construit le plan par-dessus le tout :
ws.Range("A1:D200").Subtotal _
GroupBy:=1, _ ' sous-total a chaque changement en colonne 1
Function:=xlSum, _
TotalList:=Array(4) ' somme de la colonne 4
Le bug numéro un de Subtotal est de le relancer. Un second appel ne remplace pas le premier — il
empile un nouveau jeu de sous-totaux à l'intérieur des existants, imbriquant le plan un niveau plus
profond à chaque fois, exactement comme relancer .Group. Retirez avant de reconstruire :
ws.Range("A1:D200").RemoveSubtotal ' retirer d'abord les lignes inserees ET le plan
ws.Range("A1:D200").Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(4)
' - ou - passer Replace:=True pour ecraser un jeu existant en un seul appel
ShowDetail : développer ou réduire un seul nœud
ShowLevels agit sur toute la feuille ; ShowDetail agit sur un seul groupe. Réglez-le sur une ligne ou
une colonne récapitulative pour développer ou réduire uniquement ce nœud :
ws.Rows(6).ShowDetail = True ' developper le groupe dont la synthese est en ligne 6
ws.Rows(6).ShowDetail = False ' reduire seulement ce groupe
Utilisez ShowLevels quand vous voulez une vue uniforme de tout le rapport, et ShowDetail quand vous
voulez ouvrir une seule section — un bloc mensuel, un département — pendant que le reste reste replié.
ClearOutline face à RemoveSubtotal
Il existe deux réinitialisations, et la différence tient à ce qu'elles emportent avec elles :
ClearOutlineretire le pli et rien d'autre. Les lignes, les lignes de sous-total, les formules — tout reste ; seule la structure de regroupement disparaît.ws.Cells.ClearOutlinel'efface pour toute la feuille.RemoveSubtotalretire le pli et les lignes de sous-total insérées, ramenant la plage aux données brutes de départ.
Choisissez selon votre intention. Si vous voulez garder les totaux mais abandonner la réductibilité,
ClearOutline. Si vous voulez retrouver les données exactement comme avant le sous-total,
RemoveSubtotal. Utiliser ClearOutline alors que vous vouliez annuler un sous-total laisse les lignes de
total insérées échouées dans vos données, sans plan pour les organiser.
Comment ExcelMaster vous aide
L'Outline est un petit objet avec quatre verbes faciles à confondre — ShowLevels agit sur toute la
feuille, ShowDetail agit sur un seul nœud, AutoOutline ne fonctionne que si des formules le soutiennent,
et Subtotal s'empile discrètement à chaque re-lancement sauf si vous retirez d'abord — et choisir le
mauvais échoue sans la moindre erreur : un AutoOutline qui lève l'erreur 1004 sur des données plates, des
sous-totaux doublés imbriqués un niveau de trop, ou un ClearOutline qui retire le pli mais abandonne les
lignes de total à leur sort.
ExcelMaster vous laisse dire ce que
vous voulez — « fais les sous-totaux des ventes par région, réduis aux totaux, et ne les double pas si je
relance » — et il retire les sous-totaux précédents avant de reconstruire, réduit avec ShowLevels,
n'utilise AutoOutline que là où des formules le permettent, et choisit ClearOutline ou RemoveSubtotal
selon que vous voulez garder les totaux. Vous gardez le classeur et le code.
Questions fréquentes
Comment réduire ou développer un plan en VBA ?
Utilisez ShowLevels : ws.Outline.ShowLevels RowLevels:=1 réduit les lignes au niveau supérieur (totaux
seulement), et des nombres plus élevés développent davantage de détail. Ajoutez ColumnLevels pour piloter
l'axe des colonnes dans le même appel. Cela règle toute la feuille d'un coup et garde les boutons du plan
synchronisés, contrairement à régler .Hidden à la main.
Pourquoi AutoOutline renvoie-t-il l'erreur 1004, « Cannot create an outline » ?
Parce qu'AutoOutline construit le plan en lisant vos formules de synthèse, et qu'il n'y en a aucune à
lire — la plage est faite de valeurs plates sans structure SUM/SUBTOTAL. Ajoutez d'abord des formules de
synthèse ou des sous-totaux, ou utilisez Range.Subtotal pour les insérer. AutoOutline est fait pour les
rapports structurés par formules, pas pour de simples déversements de données.
Pourquoi mes sous-totaux doublent-ils quand j'exécute la macro deux fois ?
Parce que Subtotal empile un nouveau jeu à l'intérieur de l'existant plutôt que de le remplacer. Appelez
Range.RemoveSubtotal avant de re-sous-totaliser, ou passez Replace:=True dans l'appel à Subtotal, afin
que chaque exécution produise un jeu propre au lieu de les imbriquer un niveau plus profond.
Quelle est la différence entre ClearOutline et RemoveSubtotal ?
ClearOutline retire uniquement la structure de regroupement et laisse chaque ligne en place — y compris
les lignes de sous-total. RemoveSubtotal retire le plan et les lignes de sous-total insérées, ramenant
la plage aux données d'origine. Utilisez ClearOutline pour abandonner seulement la réductibilité,
RemoveSubtotal pour annuler entièrement un sous-total.
Comment développer un seul groupe au lieu de tout le plan ?
Réglez ShowDetail sur la ligne ou la colonne récapitulative de ce groupe : ws.Rows(6).ShowDetail = True
développe le groupe dont la synthèse est en ligne 6, et = False le réduit, pendant que tous les autres
groupes restent inchangés. Utilisez ShowLevels pour une vue uniforme de toute la feuille et ShowDetail
pour une section à la fois.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 16/09/2026.
Guides associés : VBA Group Rows · VBA Group Columns · VBA Pivot Table · VBA WorksheetFunction · VBA Used Range
