Qu'est-ce que la fonction BDNB ?
Tu sors BDNB (DCOUNT en anglais) dès que NB.SI et NB.SI.ENS ne suffisent plus : ta condition doit croiser un ET et un OU dans la même formule, ou tu veux une zone de critères visible que tes collègues peuvent modifier sans rouvrir la formule.
Cette fonction fait partie de la famille BD (Base de Données) d'Excel, conçue pour analyser des tableaux structurés avec en-têtes de colonnes. Si tu gères des listes de clients, des inventaires ou des données de vente, BDNB te permet de compter rapidement combien d'enregistrements correspondent à tes critères métier, même les plus complexes, sans toucher à la formule elle-même.
Syntaxe
=BDNB(base_de_données; champ; critères)Clique sur un argument pour aller à son explication.
La zone critères doit obligatoirement contenir les en-têtes dans sa première ligne, avec les valeurs de filtrage dans les lignes suivantes. Les en-têtes doivent correspondre exactement (casse incluse) à ceux de base_de_données.

Comprendre chaque paramètre de la fonction BDNB
Les trois arguments se suivent toujours dans le même ordre et aucun n'est facultatif : d'abord la plage entière de ton tableau (en-têtes compris), puis la colonne où compter, enfin la zone de critères à part. C'est ce deuxième argument, le champ, qui t'offre le plus de souplesse : tu peux le désigner par son nom entre guillemets, par son numéro de colonne, ou par une référence de cellule.
base_de_données
: la plage complète de ton tableau de données, en-têtes inclusPar exemple A1:D100 si ton tableau commence en A1 avec les titres de colonnes et contient des données jusqu'à la ligne 100. Excel utilise la première ligne comme référence pour identifier les champs.
Sans les en-têtes dans cette plage, BDNB ne peut pas fonctionner correctement et renvoie des résultats incorrects ou une erreur #VALEUR!.
champ
: la colonne dans laquelle BDNB va compter les valeurs numériquesTu peux l'indiquer de trois façons : le nom du champ entre guillemets comme "Montant", un numéro de colonne comme 3 (pour la 3e colonne de la base), ou une référence de cellule contenant le nom.
Le nom entre guillemets est le plus lisible et le plus fiable car il ne dépend pas de la position des colonnes dans le tableau.
critères
: une zone séparée de ton tableau (souvent en haut à droite ou en bas) qui contient les conditions de filtrageLa première ligne doit contenir les noms des champs exactement comme dans ta base, et les lignes suivantes contiennent les valeurs de filtre.
Les critères sur la même ligne s'appliquent avec un ET logique (toutes les conditions doivent être vraies). Les critères sur des lignes différentes s'appliquent avec un OU logique (au moins une ligne doit correspondre).

Exemples pratiques pas à pas
Comment compter le nombre de lignes selon un critère avec la fonction BDNB
On te demande combien de ventes la région Nord a signées ce trimestre, et la réponse doit tenir dans une phrase. Tes quatorze vendeurs sont listés avec leur région et le montant qu'ils ont réalisé, mais tu veux ce compte sans trier le tableau ni poser un filtre que quelqu'un désactivera demain. La fonction BDNB lit une petite zone de critères posée à côté du tableau et te sort le compte des lignes qui y répondent.
- 1Dans une cellule, écris
=BDNB(. - 2En 1er argument : sélectionne le tableau complet avec sa ligne de titres,
A1:C15. Inclure les titres n'est pas une maladresse de sélection mais une exigence de la fonction. C'est dans cette première ligne qu'elle apprend que la colonne B s'appelleRégionet la colonne CVentes. - 3En 2ᵉ argument : écris le nom de la colonne à compter entre guillemets,
"Ventes". Le libellé doit être orthographié exactement comme l'en-tête de la colonne C. La fonction ne comptant que les nombres, ce nom doit toujours viser une colonne numérique. - 4En 3ᵉ argument : sélectionne la zone de critères,
E1:E2. Tu l'as préparée à côté du tableau, avec l'en-têteRégionrecopié enE1et la valeurNordjuste en dessous. Ce sont ces deux cellules qui décident des lignes retenues, et tu y changes de région sans jamais rouvrir la formule. - 5Ferme la parenthèse et appuie sur Entrée.
=BDNB(A1:C15; "Ventes"; E1:E2)Nord, puis compte celles qui portent bien un nombre dans la colonne Ventes : Marie, Sophie, Emma, Hugo, Lina et Alice, soit 6. Les montants eux-mêmes n'entrent jamais dans le calcul, seule leur présence est comptée. Remplace Nord par Est en E2 et le compte se met à jour tout seul.Comment compter le nombre de lignes en croisant deux critères avec la fonction BDNB
La short-list part ce soir et on attend de toi un chiffre : combien de candidats du pôle IT ont décroché au moins 15 au test technique. Chaque candidat est saisi avec son pôle et sa note, et deux conditions doivent tomber en même temps sur la même ligne, le bon pôle et la bonne note. La fonction BDNB traite les deux d'un seul coup, à condition de les poser côte à côte dans la zone de critères.
- 1Dans une cellule, écris
=BDNB(. - 2En 1er argument : sélectionne le tableau des candidats avec sa ligne de titres,
A1:C7. Les trois titresCandidat,PôleetNoteforment le vocabulaire que la zone de critères devra reprendre mot pour mot. Un titre mal recopié d'un côté ou de l'autre, et le compte retombe à 0 sans message d'erreur. - 3En 2ᵉ argument : écris le nom de la colonne à compter entre guillemets,
"Note". Rien n'interdit que cette colonne serve aussi de filtre juste après, car la fonction accepte très bien de compter celle sur laquelle elle filtre. - 4En 3ᵉ argument : sélectionne la zone de critères,
E1:F2. Elle tient cette fois sur deux colonnes, avec les titresPôleetNoterecopiés enE1etF1, puisITet>=15écrits juste en dessous. Réunir les deux valeurs sur la même ligne est ce qui les rend indissociables, et>=15rappelle qu'un critère peut être une comparaison plutôt qu'une valeur exacte. - 5Ferme la parenthèse et appuie sur Entrée.
=BDNB(A1:C7; "Note"; E1:F2)IT et notées >=15 franchissent le filtre, soit Léa (17) et Adam (15), donc 2. Adam passe de justesse parce que >= retient la borne elle-même (avec >15, il serait écarté). Camille est bien notée 18, mais son pôle ne correspond pas.Comment compter le nombre de lignes selon plusieurs critères en OU avec la fonction BDNB
Le bilan de la campagne se joue vendredi et on veut savoir combien de commandes sont arrivées par les canaux à distance, le web et le téléphone réunis. Tes commandes sont listées avec le canal qui les a apportées et leur montant, et tu refuses d'écrire deux formules puis d'additionner leurs résultats à la main. La fonction BDNB gère ce OU nativement : il suffit d'empiler les deux canaux dans la zone de critères.
- 1Dans une cellule, écris
=BDNB(. - 2En 1er argument : sélectionne le tableau des commandes avec sa ligne de titres,
A1:C7. La fonction y lit les nomsCommande,CanaletMontant, qui sont les seuls repères dont elle dispose pour retrouver une colonne. - 3En 2ᵉ argument : écris le nom de la colonne à compter entre guillemets,
"Montant". Tu ne cherches pas un total, mais la fonction a besoin d'une colonne de nombres etMontantest la seule du tableau. Viser la colonneCanal, qui ne contient que du texte, te renverrait 0 sans message d'erreur. - 4En 3ᵉ argument : sélectionne la zone de critères,
E1:E3. L'en-têteCanalest recopié enE1, et les deux canaux à suivre s'empilent en dessous,WebpuisTéléphone. Le second n'existe pour la fonction que si la référence descend jusqu'àE3, sans quoi la zone ne compte que les commandes du web. - 5Ferme la parenthèse et appuie sur Entrée.
=BDNB(A1:C7; "Montant"; E1:E3)
Les erreurs fréquentes avec la fonction BDNB
Avec BDNB, les ennuis viennent presque toujours de deux endroits : la zone de critères qui ne dialogue pas avec ta base, ou la nature des données comptées. Un en-tête de critère qui diffère d'un espace ou d'un accent renvoie 0, un nombre stocké en texte passe inaperçu, et oublier la ligne d'en-têtes dans la plage déclenche un #VALEUR!.
Le dernier piège est plus sournois : ranger tes conditions sur une même ligne ou sur des lignes séparées change tout, puisque l'une signifie ET et l'autre OU.
BDNB retourne 0 alors que des données correspondent
Les noms de champs dans la zone critères ne correspondent pas exactement aux en-têtes de la base de données. Un espace invisible, une majuscule différente ou un accent manquant suffit à faire rater la correspondance.
Solution : Copie-colle directement les en-têtes depuis ta base vers la zone critères plutôt que de les retaper. C'est le moyen le plus sûr d'éviter les erreurs de casse, d'espace ou d'accent.
BDNB ne compte pas des valeurs qui existent pourtant
BDNB ne compte que les valeurs numériques dans le champ spécifié. Si ton champ contient des nombres stockés en format texte (triangle vert dans le coin de la cellule), BDNB les ignore silencieusement.
Solution : Convertis tes nombres texte en vrais nombres : sélectionne la colonne, clique sur le triangle d'avertissement jaune et choisis "Convertir en nombre". Ou utilise BDNBVAL si tu veux compter toutes les cellules non vides, nombres et texte confondus.
Oublier les en-têtes dans la plage base_de_données
Si tu sélectionnes uniquement les données sans la ligne d'en-têtes dans le paramètre base_de_données, BDNB ne peut pas identifier les colonnes et renvoie une erreur #VALEUR! ou des résultats incohérents.
Solution : Commence toujours ta plage base_de_données depuis la ligne d'en-têtes. Si ton tableau commence en A1, ta plage doit commencer par A1, jamais A2.
Confusion entre ET et OU dans la zone critères
Les critères sur la même ligne s'appliquent avec un ET logique. Les critères sur des lignes différentes s'appliquent avec un OU. Mettre deux valeurs sur la même ligne quand tu voulais un OU, ou les séparer sur deux lignes quand tu voulais un ET, donne un résultat incorrect.
Solution : Pour un ET (les deux conditions doivent être vraies), mets tout sur la même ligne. Pour un OU (l'une ou l'autre condition est suffisante), utilise plusieurs lignes dans la zone critères.

BDNB vs NB.SI vs NB.SI.ENS vs NBVAL
BDNB est unique dans sa capacité à gérer des critères OU avec une zone visible et modifiable. NB.SI.ENS est plus simple pour les critères ET uniquement. Utilise BDNB quand tu as besoin du OU logique ou d'une zone critères externe facilement modifiable.
| Critère | BDNB | NB.SI | NB.SI.ENS | NBVAL |
|---|---|---|---|---|
| Critères multiples | Illimités (ET et OU) | 1 seul | Jusqu'à 127 (ET uniquement) | Aucun |
| Opérateur OU | Oui (lignes distinctes dans les critères) | Non | Non | Non |
| Compte les textes | Non (nombres uniquement) | Oui (selon critère) | Oui (selon critères) | Oui (tout) |
| Critères visibles | Oui (zone séparée) | Non (dans la formule) | Non (dans la formule) | N/A |
| Facilité d'utilisation | Plus complexe à mettre en place | Très simple | Moyenne | Très simple |
| Cas d'usage idéal | Bases structurées avec critères OU ou critères interactifs | Un critère simple | Plusieurs critères ET | Compter les cellules non vides |

Astuces avancées avec BDNB
Rendre ta zone critères interactive avec des listes déroulantes
Place ta zone critères sur une ligne au-dessus du tableau ou sur une feuille dédiée, et ajoute des listes déroulantes (Données > Validation) sur les cellules de valeurs. Tes utilisateurs sélectionnent un critère dans la liste et =BDNB(base;champ;critères) se recalcule instantanément, sans que personne ne touche à la formule.
C'est le meilleur moyen de construire un tableau de bord interactif avec des filtres visibles.
Combiner ET et OU sur plusieurs colonnes
Pour compter les transactions de la région Nord OU Sud avec un montant supérieur à 1 000 € dans les deux cas, crée deux lignes dans ta zone critères : la ligne 2 contient Nord + >1000, la ligne 3 contient Sud + >1000. =BDNB(base;"Montant";critères) applique un ET sur chaque ligne et un OU entre les lignes.
Cette combinaison ET/OU est impossible avec NB.SI.ENS et fait toute la valeur de BDNB.
Questions fréquentes
BDNB ne compte que les cellules contenant des nombres dans le champ spécifié. BDNBVAL compte toutes les cellules non vides (nombres ET texte). Si tu veux compter les clients ayant renseigné un commentaire (valeur texte), utilise BDNBVAL. Si tu veux compter les lignes avec un montant saisi (nombre), utilise BDNB.
Oui. Tu peux utiliser * (plusieurs caractères quelconques) et ? (un seul caractère) dans tes critères texte. Par exemple, Paris* dans la zone critères comptera tous les enregistrements commençant par Paris (Paris 1er, Paris 15e, etc.). Ces caractères génériques fonctionnent sur les champs texte, pas sur les champs numériques.
Vérifie que : 1) le champ spécifié contient bien des nombres (pas du texte), 2) les en-têtes de ta zone critères correspondent EXACTEMENT aux en-têtes de ta base de données (casse, espaces, accents), 3) la plage de la base inclut bien les en-têtes en première ligne.
Pour appliquer un ET (salaire > 2 000 ET salaire < 4 000), place les deux critères sur la même ligne dans deux colonnes avec le même en-tête Salaire. Pour appliquer un OU (salaire > 5 000 OU salaire < 1 000), place chaque critère sur une ligne séparée dans la zone critères.
Sur de grandes bases de données (plus de 10 000 lignes), BDNB peut être légèrement plus rapide car elle utilise un mécanisme d'indexation interne. Mais pour la plupart des cas d'usage quotidiens, la différence est négligeable. Choisis NB.SI.ENS si tu n'as besoin que de critères ET et que tu veux une formule plus compacte.
Pour aller plus loin
Continue sur ta lancée après la fonction BDNB : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.
Tout voir



