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

Excel AVERAGEIF & AVERAGEIFS — Moyennes conditionnelles et le piège #DIV/0! sans correspondance

|

Excel AVERAGEIF & AVERAGEIFS — Moyennes conditionnelles et le piège #DIV/0! sans correspondance

L'essentielAVERAGEIFS fait 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 de SUMIFS et COUNTIFS, mais il a un comportement qui va vous surprendre : quand aucune ligne ne correspond, SUMIFS renvoie 0 — AVERAGEIFS renvoie #DIV/0!, parce qu'on ne peut pas faire la moyenne de zéro nombre. Protégez-le avec IFERROR. 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 comme SUMIF/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 AVERAGEIF vs AVERAGEIFS
  • Pourquoi AVERAGEIFS ne 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