L'essentiel —
AVERAGEIFSfait la moyenne d'une colonne, mais seulement des lignes qui passent tous les tests :=AVERAGEIFS(plage_moyenne; plage_critères1; critère1; …). Il partage la grammaire exacte des critères deSUMIFSetCOUNTIFS, mais il a un comportement qui va vous surprendre : quand aucune ligne ne correspond,SUMIFSrenvoie 0 —AVERAGEIFSrenvoie#DIV/0!, parce qu'on ne peut pas faire la moyenne de zéro nombre. Protégez-le avecIFERROR. Deux autres choses mordent : il fait la moyenne des zéros mais saute les vides (donc « manquant = 0 » tire votre moyenne vers le bas en silence), et commeSUMIF/SUMIFS, les formes au singulier et au pluriel inversent leurs arguments. Fonctionne dans Excel 2007+.
=AVERAGEIFS(Score, Class, "A")
=IFERROR(AVERAGEIFS(Score, Class, "A", Score, ">"&G1), "n/d")
AVERAGEIFS est le troisième visage de l'agrégation conditionnelle : SUMIFS
totalise, COUNTIFS compte, AVERAGEIFS moyenne. Si vous avez lu les deux autres,
vous connaissez déjà le langage des critères — alors ce guide passe son temps sur
les trois choses qui rendent les moyennes différentes et dangereuses, plutôt que
de répéter la syntaxe.
Remarque : dans une interface Excel en français, la fonction s'appelle MOYENNE.SI.ENS. Équivalents : AVERAGEIF = MOYENNE.SI, SUMIFS = SOMME.SI.ENS, COUNTIFS = NB.SI.ENS, IFERROR = SIERREUR, DATE = DATE, MEDIAN = MEDIANE, FILTER = FILTRE. Les formules ci-dessous utilisent les noms anglais ; le comportement est identique.
Ce que vous allez apprendre
- Le modèle mental : le moteur d'agrégation conditionnelle, qui renvoie cette fois une moyenne
- Le piège vedette : ensemble vide →
#DIV/0!, et le correctif d'un seul enrobage - Le piège silencieux : les zéros sont moyennés, les vides sont sautés
- L'ordre des arguments inversé dans
AVERAGEIFvsAVERAGEIFS - Pourquoi
AVERAGEIFSne sait pas faire de moyenne pondérée — et quoi utiliser à la place
Le modèle mental : même moteur, qui renvoie une moyenne
AVERAGEIFS garde les lignes où tous vos tests passent et renvoie leur moyenne —
le SUMIFS de ces lignes divisé par le COUNTIFS de ces lignes. Cette définition
n'est pas une anecdote ; elle est la source de chaque piège ci-dessous. Les
critères fonctionnent exactement comme dans les fonctions sœurs : opérateurs entre
guillemets, ">"&G1 pour comparer à une cellule, DATE() pour des bornes de dates
insensibles à la langue, le ET intégré d'une paire à l'autre.
' Moyenne des scores de la classe A
=AVERAGEIFS(Score, Class, "A")
' Moyenne des scores de la classe A, au-dessus du seuil en G1 (ET)
=AVERAGEIFS(Score, Class, "A", Score, ">"&G1)
Le piège vedette : aucune correspondance veut dire #DIV/0!, pas zéro
C'est le comportement qui piège tout le monde, et il découle directement de
« somme ÷ comptage ». Si aucune ligne ne correspond, le comptage vaut 0, et
diviser par zéro n'a pas de sens — AVERAGEIFS renvoie donc #DIV/0!.
Comparez avec ses fonctions sœurs sur le même ensemble vide :
=SUMIFS(Score, Class, "Z") ' -> 0 (une somme de rien vaut zéro)
=COUNTIFS(Class, "Z") ' -> 0 (un comptage de rien vaut zéro)
=AVERAGEIFS(Score, Class, "Z") ' -> #DIV/0! (une moyenne de rien n'est pas définie)
Cette asymétrie casse les tableaux de bord : un récapitulatif SUMIFS survit à une
catégorie vide, mais l'AVERAGEIFS à côté s'allume en rouge et se propage à tout ce
qui le référence. Le remède : décidez ce que « pas de donnée » doit afficher et
enveloppez :
=IFERROR(AVERAGEIFS(Score, Class, "A"), "n/d")
=IFERROR(AVERAGEIFS(Score, Class, "A"), "") ' vide, si vous préférez
Faites de IFERROR un réflexe sur chaque AVERAGEIFS qui alimente un rapport ou
une catégorie susceptible un jour d'être vide. Ce n'est pas de la paranoïa
défensive — c'est la différence entre « pas encore de ventes » lu comme n/d et une
feuille cassée.
Le piège silencieux : les zéros comptent, les vides non
AVERAGEIFS ignore les cellules de la plage de moyenne qui sont vides ou du
texte — elles ne comptent ni dans le numérateur, ni dans le dénominateur. Mais
une cellule contenant 0 est un vrai nombre, donc elle est moyennée, et elle
tire la moyenne vers le bas. C'est une décision de saisie déguisée en problème de
formule :
Si un commercial n'a fait aucune vente et que vous l'enregistrez en 0, son zéro entre dans la moyenne. Si vous l'enregistrez en vide, il est exclu entièrement. Le même « aucune vente », deux moyennes complètement différentes — et rien dans la formule ne vous dit laquelle vous avez obtenue.
Décidez à la source ce que « manquant » signifie. Si les zéros doivent être exclus
de la moyenne, soit laissez-les vides, soit ajoutez un critère qui les écarte :
=AVERAGEIFS(Score, Class, "A", Score, "<>0"). L'idée est de rendre le choix
explicite plutôt que de laisser votre convention de saisie le faire à votre place,
en silence.
L'ordre des arguments inversé (même histoire que SUMIF)
AVERAGEIF et AVERAGEIFS inversent leurs arguments exactement comme le font
SUMIF et SUMIFS :
=AVERAGEIF(Class, "A", Score) ' plage de test d'abord, plage de moyenne en dernier
=AVERAGEIFS(Score, Class, "A") ' plage de moyenne EN PREMIER, puis les paires de test
Même piège, même remède : utilisez AVERAGEIFS partout. L'ordre est cohérent
que vous ayez une condition ou cinq, et vous esquivez l'inversion de colonne
silencieuse qui vient de la copie entre les deux formes.
Le jugement : AVERAGEIFS donne une moyenne simple, pas une pondérée
C'est l'erreur conceptuelle qui survit même après que vous avez maîtrisé la
syntaxe. AVERAGEIFS fait la moyenne des cellules de la plage de moyenne —
chaque ligne qui correspond compte également. Il ne peut pas vous donner une
moyenne pondérée, où chaque ligne devrait compter proportionnellement à une
quantité. La moyenne du prix sur les commandes n'est pas ce que les clients ont
réellement payé en moyenne ; il vous faut le prix pondéré par la quantité :
' MAUVAISE question : moyenne simple des cellules de prix
=AVERAGEIFS(Price, Region, "West")
' BONNE pour un taux moyen pondéré : valeur totale ÷ quantité totale (pondérée)
=SUMIFS(Value, Region, "West") / SUMIFS(Qty, Region, "West")
« Moyenne des cellules qui correspondent » et « taux moyen pondéré » sont deux
questions différentes, et AVERAGEIFS ne répond qu'à la première. La même limite
vaut pour une médiane ou un mode conditionnels — il n'existe pas de
MEDIANIFS ; recourez à FILTER et enveloppez-le :
=MEDIAN(FILTER(Score, Class="A")).
Comment ExcelMaster aide
La partie dangereuse d'une moyenne conditionnelle n'est pas de la taper — c'est de
savoir qu'une catégorie vide déclenche #DIV/0!, que des zéros enregistrés faussent
la moyenne, et qu'« un prix moyen » devrait généralement être un taux pondéré.
ExcelMaster lit votre intention — la taille moyenne des affaires pour l'équipe
Ouest ce trimestre, vide s'il n'y en a aucune — et écrit l'AVERAGEIFS protégé (ou
le SUMIFS/SUMIFS pondéré quand c'est ce que vous vouliez vraiment dire), pour que
le nombre réponde à la question que vous avez posée.
Questions fréquentes
Pourquoi AVERAGEIFS renvoie-t-il #DIV/0! ?
Aucune ligne ne correspondait à vos critères, donc il n'y a rien à moyenner et Excel
ne peut pas diviser par un comptage de zéro. Enveloppez :
=IFERROR(AVERAGEIFS(…), "n/d"). Contrairement à SUMIFS (qui renvoie 0 sur un
ensemble vide), AVERAGEIFS produit toujours une erreur quand rien ne correspond.
AVERAGEIFS inclut-il les zéros dans la moyenne ?
Oui. Une cellule contenant 0 est un vrai nombre et entre dans la moyenne, l'abaissant.
Les cellules vides et de texte sont sautées entièrement. Si une donnée « manquante »
est stockée en 0 et ne devrait pas compter, écartez-la avec un critère :
=AVERAGEIFS(Score, Score, "<>0").
Quelle est la différence entre AVERAGEIF et AVERAGEIFS ?
AVERAGEIF prend une condition avec la plage de test d'abord ; AVERAGEIFS en
prend une ou plusieurs avec la plage de moyenne d'abord — les arguments sont
inversés. Utilisez toujours AVERAGEIFS pour éviter l'inversion silencieuse.
Comment faire une moyenne pondérée avec des conditions ?
AVERAGEIFS ne sait pas — il pondère chaque ligne également. Divisez un total
conditionnel par un total conditionnel : =SUMIFS(Value, Region, "West") / SUMIFS(Qty, Region, "West").
Comment faire la moyenne des valeurs entre deux dates ?
Deux critères sur la colonne de dates, construits avec DATE() :
=AVERAGEIFS(Amount, OrderDate, ">="&DATE(2026,1,1), OrderDate, "<="&DATE(2026,3,31)) — et enveloppez dans IFERROR au cas où la fenêtre serait
vide.
Testé dans
Testé dans : Excel 365 (Windows 11) — dernière vérification le 24/06/2026.
Guides connexes : Excel SUMIFS · Excel COUNTIFS · Excel FILTER · Excel UNIQUE
