Compter sans doublons les données d'une plage avec des critères
Bonjour,
Un collègue m'a soumis récemment un problème, à savoir compter des occurrences dans une plage de données en en supprimant les doublons. Je vous décris ci-après un peu plus en détail sa demande ainsi que la solution que j'ai trouvée, qui n'utilise que des fonctions de base d'Excel, et aucun VBA.
Le besoin exprimé, en le simplifiant pour l'exemple, est le suivant : un fichier comporte une colonne "Mois" et une colonne "Produit". Un même produit peut apparaître plusieurs fois dans un mois donné, mais dans ce cas-là il ne faut le compter qu'une fois dans le mois. Evidemment, le total général prenant en compte tous les mois doit lui aussi tenir compte des doublons et si un produit apparaît dans plusieurs mois il ne doit être compté qu'une fois dans le total général.
La solution que j'ai retenue est en fait toute simple et est basée sur le comptage des nombres inverses : si un produit apparaît 4 fois dans le fichier, il suffit de compter pour chacun de ces produits non pas 1 mais 1/4, s'il apparaît 8 fois, il faudra compter 1/8 : au final, on aura bien le 1 recherché, c'est-à-dire le comptage sans doublon.
Vous trouverez en pièce jointe de ce message un fichier d'exemple réduit au minimum. Dans celui-ci, la plage A2:A7 contient les n° de mois (je n'en ai mis que 2 pour simplifier), la plage B2:B7 des codes produits. Vous pouvez modifier ces codes produits pour voir l'impact de ces modifications sur les comptages dédoublonnés réalisés en plage E2:G2 (résultat pour chacun des 2 mois + le total mois).
La formule calculant le nombre de produits sans doublons du total général est la suivante :
=SOMME(1/NB.SI($B$2:$B$7;$B$2:$B$7))Elle s'interprète ainsi : je regarde pour chaque valeur de la plage B2:B7 (où se trouvent les codes produits) le nombre de fois où cette valeur est trouvée dans cette même plage (par exemple 4), j'en retourne la valeur inverse (1/4) et finalement je fais la somme de ces valeurs (4 x 1/4 = 1).
La formule calculant le nombre de produits sans doublons pour chaque mois est un peu plus compliquée mais basée sur le même principe :
=SOMME(SI($A$2:$A$7=E$1;1/NB.SI.ENS($A$2:$A$7;E$1;$B$2:$B$7;$B$2:$B$7)))Si la plage A2:A7 (où se trouvent les n° de mois de mon jeu de données) contient le n° de mois pour lequel je souhaite réaliser mon comptage (en E1 dans mon exemple), alors je réalise la même opération que pour le total général en ajoutant un second critère, à savoir la bonne correspondance entre le n° de mois observé et ceux du jeu de données).
Si vous avez des questions et / ou remarques quant à d'éventuels problèmes et ou améliorations à apporter à cette solution, je suis à votre écoute.
Bonne journée.
SB