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

Fonction SUBTOTAL d'Excel — des totaux qui respectent votre filtre (et le piège 9 vs 109)

|

Fonction SUBTOTAL d'Excel — des totaux qui respectent votre filtre (et le piège 9 vs 109)

En brefSUBTOTAL est un total qui connaît votre filtre. Le SUM ordinaire additionne toujours toutes les lignes ; SUBTOTAL ignore les lignes qu'un filtre a masquées, si bien que le chiffre au bas d'une liste filtrée se met à jour en direct. Syntaxe : =SUBTOTAL(no_fonction; plage). Le no_fonction choisit l'opération et le comportement de masquage : 9 = SUM en ignorant les lignes filtrées ; 109 = SUM en ignorant les lignes filtrées et masquées manuellement. Son second super-pouvoir : SUBTOTAL ignore les autres SUBTOTAL de sa plage, si bien qu'un total général ne compte jamais deux fois vos sous-totaux de groupe. Il ne sait pas ignorer les valeurs d'erreur — c'est le rôle d'AGGREGATE. Fonctionne dans Excel 2003+.

Remarque : dans l'interface française d'Excel, cette fonction s'appelle SOUS.TOTAL (séparateur d'arguments : point-virgule ;).

=SUBTOTAL(9, Sales)        ' SOMME des lignes visibles après filtrage
=SUBTOTAL(109, Sales)      ' SOMME des lignes visibles après filtrage ET masquage manuel

SUM n'a qu'un seul travail et le fait sans nuance : tout additionner, filtre ou pas. Cet aveuglement est exactement le problème quand vous travaillez sur une liste filtrée et que vous voulez le total de ce que vous voyez. SUBTOTAL est la réponse — mais elle cache un piège célèbre dans son tout premier argument, et une seconde fonctionnalité que presque personne n'apprend, qui en fait le bon outil pour les rapports à plusieurs niveaux. Voyons les deux.

Ce que vous allez apprendre

  • Le modèle mental : un total qui se recalcule avec votre filtre
  • Le tableau des no_fonction — onze opérations, deux familles
  • Le piège 9 vs 109 : pourquoi masquer des lignes à la main ne change pas un total 9
  • Pourquoi SUBTOTAL ignore les autres SUBTOTAL — le super-pouvoir anti-double-comptage
  • La seule chose qu'il ne sait pas faire : ignorer les valeurs d'erreur
  • Le bon arbitrage : SUBTOTAL vs SUM vs SUMIFS

Le modèle mental : un total qui bouge avec votre filtre

Imaginez une liste de ventes avec un filtre automatique activé. Vous filtrez sur « Ouest » et dix lignes s'affichent. Un =SUM(Sales) en bas additionne toujours toutes les lignes, visibles ou non — il ignore l'existence d'un filtre. =SUBTOTAL(9, Sales) additionne uniquement les lignes que le filtre a laissées visibles, si bien qu'à l'instant où vous changez le filtre pour « Est », le total se recalcule au chiffre de l'Est. Voilà tout le concept : SUBTOTAL est un agrégat qui tient compte du filtre. C'est pourquoi la ligne de total d'un tableau Excel et la fonctionnalité Données → Sous-total génèrent toutes deux des formules SUBTOTAL plutôt que SUM.

Le tableau des no_fonction : onze opérations, deux familles

Le premier argument n'est pas simplement « 9 veut dire somme ». C'est un code qui sélectionne à la fois l'opération et la manière dont elle traite les lignes masquées. Il y a onze opérations, chacune disponible en deux familles :

' 1–11  : l'opération, en ignorant les lignes masquées par FILTRE (mais en comptant les masquages manuels)
' 101–111: la même opération, en ignorant AUSSI les lignes masquées manuellement
1/101 = AVERAGE   2/102 = COUNT    3/103 = COUNTA   4/104 = MAX
5/105 = MIN       6/106 = PRODUCT  7/107 = STDEV    8/108 = STDEVP
9/109 = SUM       10/110 = VAR     11/111 = VARP

Ainsi =SUBTOTAL(1, …) est une AVERAGE qui tient compte du filtre ; =SUBTOTAL(104, …) est un MAX qui ignore aussi les lignes que vous avez masquées à la main. Vous avez rarement besoin de mémoriser le tableau — mais vous devez comprendre les deux familles, car c'est là que vit le piège.

Le piège 9 vs 109

Voici le bug qui envoie les gens sur les forums. Vous avez =SUBTOTAL(9, Sales). Vous faites un clic droit sur quelques lignes et les masquez manuellement (sans filtre), en vous attendant à ce que le total baisse. Il ne bronche pas. Pourquoi ?

Parce que la famille 1–11 n'ignore que les lignes masquées par un filtre. Les lignes que vous avez masquées manuellement sont toujours comptées. Pour exclure aussi les masquages manuels, il vous faut la famille 101–111 :

=SUBTOTAL(9,   Sales)      ' ignore les lignes filtrées ; COMPTE les lignes masquées manuellement
=SUBTOTAL(109, Sales)      ' ignore les lignes filtrées ET les lignes masquées manuellement

La règle pratique : si vous ne faites jamais que filtrer, 9 et 109 donnent la même réponse. Dès que vous masquez des lignes à la main, utilisez les codes 100+. Dans le doute, prenez par défaut 109 pour les sommes et 103 pour les décomptes — ils se comportent comme la plupart des gens s'attendent à ce que « le total de ce que je vois » se comporte.

Le super-pouvoir que personne n'enseigne : SUBTOTAL ignore les autres SUBTOTAL

Voilà la fonctionnalité qui fait de SUBTOTAL plus qu'un « SUM filtré », et c'est sa raison d'être même. Un SUBTOTAL ignore toute autre cellule SUBTOTAL à l'intérieur de sa plage. Imaginez un rapport avec un SUBTOTAL après le bloc de chaque région, puis un grand SUBTOTAL couvrant toute la colonne :

B10  =SUBTOTAL(9, B2:B9)      ' sous-total Ouest
B20  =SUBTOTAL(9, B11:B19)    ' sous-total Est
B21  =SUBTOTAL(9, B2:B20)     ' total GÉNÉRAL — ne compte PAS B10 et B20 en double

Un simple =SUM(B2:B20) ajouterait les deux sous-totaux de groupe par-dessus les lignes de détail et doublerait votre total général. SUBTOTAL exclut discrètement les sous-totaux imbriqués, si bien que le total général est correct sans que vous ayez à découper la plage autour d'eux. C'est précisément ainsi que Données → Sous-total construit des synthèses à plusieurs niveaux qui s'additionnent correctement — et une fois que vous le savez, vous prendrez SUBTOTAL chaque fois qu'une colonne mêle lignes de détail et sous-totaux courants.

La seule chose qu'il ne sait pas faire : ignorer les erreurs

SUBTOTAL tient compte du filtre, mais il ne tient pas compte des erreurs. Un seul #N/A ou #DIV/0! n'importe où dans la plage et tout le SUBTOTAL renvoie une erreur :

=SUBTOTAL(9, Sales)      ' un seul #N/A dans Sales → le SUBTOTAL lui-même vaut #N/A

C'est exactement la lacune qu'AGGREGATE a été créé pour combler : il fait tout ce que fait SUBTOTAL et ajoute une option pour ignorer les valeurs d'erreur (ainsi qu'un ensemble de fonctions plus large). Si votre colonne filtrée peut contenir des erreurs — un VLOOKUP qui échoue, une division par zéro — c'est le signal qu'il faut passer à AGGREGATE.

Le bon arbitrage : SUBTOTAL vs SUM vs SUMIFS

Ils répondent à des questions différentes, et les confondre est à la racine de la plupart des confusions du type « mauvais total » :

  • SUM — totaliser tout, en ignorant les filtres. Adapté à un total général fixe qui ne doit pas bouger quand quelqu'un filtre la feuille.
  • SUBTOTAL — totaliser ce qui est visible après filtrage (et facultativement masquage manuel). Adapté au bas d'une liste interactive, et c'est le moteur derrière les lignes de total des tableaux.
  • SUMIFS — totaliser les lignes correspondant aux conditions que vous tapez dans la formule, indépendamment de ce qui est filtré à l'écran. Adapté à une cellule de rapport qui doit toujours signifier « Ouest T1 », que la feuille soit ou non filtrée sur ce critère.

La façon nette de retenir : SUBTOTAL suit le filtre ; SUMIFS suit les critères que vous avez écrits. Si vous voulez que le nombre réagisse aux listes déroulantes de filtre, c'est SUBTOTAL. Si vous voulez le figer sur une définition, c'est SUMIFS.

Comment ExcelMaster vous aide

Les erreurs de SUBTOTAL portent rarement sur la syntaxe — elles portent sur le choix de 9 plutôt que 109, ou sur le fait de ne pas réaliser qu'un total général compte en double des sous-totaux imbriqués. ExcelMaster lit ce que vous construisez — un total au bas de cette liste filtrée qui ignore aussi les lignes que je masque, ou un rapport par région avec des sous-totaux et un total général qui s'additionne — et écrit le bon no_fonction, la bonne plage, et vous bascule vers AGGREGATE dès que des erreurs entrent en scène. Vous décrivez le rapport ; il choisit le code.

Questions fréquentes

Quelle est la différence entre SUBTOTAL 9 et 109 ?

Tous deux SOMMENT les lignes visibles après un filtre. La différence porte sur les lignes masquées manuellement : 9 compte encore les lignes que vous avez masquées par clic droit → Masquer, tandis que 109 les ignore aussi. Si vous n'utilisez jamais que le filtre, ils coïncident. Si vous masquez des lignes à la main, utilisez 109.

Pourquoi mon SUBTOTAL ne change-t-il pas quand je masque des lignes ?

Vous utilisez probablement un code 1–11 (comme 9), qui n'ignore que les lignes masquées par filtre, pas celles masquées manuellement. Passez à la famille 101–111 (par exemple 109) pour que le masquage manuel agisse sur le total.

SUBTOTAL ignore-t-il les autres cellules SUBTOTAL ?

Oui — c'est une fonctionnalité délibérée. Un SUBTOTAL exclut tout autre résultat SUBTOTAL à l'intérieur de sa plage, si bien qu'un total général sur une colonne qui contient déjà des sous-totaux de groupe ne les comptera pas en double. Un simple SUM le ferait.

Comment additionner uniquement les cellules filtrées/visibles ?

Utilisez =SUBTOTAL(9, plage) (ou 109 pour ignorer aussi les lignes masquées manuellement). Pour un tableau, activez la ligne de total — elle insère SUBTOTAL pour vous et vous laisse choisir la fonction dans une liste déroulante.

Comment faire pour que SUBTOTAL ignore les valeurs d'erreur ?

Il ne le peut pas. Utilisez AGGREGATE à la place — =AGGREGATE(9, 6, plage) somme les lignes visibles tout en ignorant les erreurs. Cet argument options supplémentaire est toute la raison d'être d'AGGREGATE.

Testé dans

Testé dans : Excel 365 (Windows 11) — dernière vérification le 30/06/2026.

Guides associés : Excel AGGREGATE · Excel SUMIFS · Excel SUMPRODUCT · Excel FILTER · Excel COUNTIFS