En bref —
SUBTOTALest un total qui connaît votre filtre. LeSUMordinaire additionne toujours toutes les lignes ;SUBTOTALignore 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). Leno_fonctionchoisit 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 :SUBTOTALignore les autresSUBTOTALde 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
SUBTOTALignore les autresSUBTOTAL— le super-pouvoir anti-double-comptage - La seule chose qu'il ne sait pas faire : ignorer les valeurs d'erreur
- Le bon arbitrage :
SUBTOTALvsSUMvsSUMIFS
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
