🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Outline dans Excel — piloter les niveaux, AutoOutline et Subtotal en code

|

VBA Outline dans Excel — piloter les niveaux, AutoOutline et Subtotal en code

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:=1 ré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 : AutoOutline lit vos formules de synthèse, et Subtotal insè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 appel
  • AutoOutline — laisser Excel construire le plan à partir de vos formules, et pourquoi cela échoue sans elles
  • Subtotal — créer ensemble totaux, groupes et plan, et le piège du re-lancement qui les empile
  • ShowDetail — développer ou réduire un seul nœud plutôt qu'un niveau entier
  • ClearOutline face à 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 :

  • ClearOutline retire 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.ClearOutline l'efface pour toute la feuille.
  • RemoveSubtotal retire 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