Microsoft 365 compter le nombre d'occurences dans une colonne en fonction d'un critère (sumproduct)

camille_13

XLDnaute Nouveau
Bonjour,

je croyais avoir trouvé ma solution sur ce forum, mais la formule que j'ai faite me renvoie une valeur erronée.
Je cherche à savoir, selon le critère de l'année, combien de boutiques différentes ont vendu des produits.
j'ai les éléments suivants:

Col E Col H
Année Nom boutique
2017 boutique A
2017 boutique B
2018 boutique A
2018 boutique B
2018 boutique C
2018 boutique B

j'ai fait la formule suivante : =SUMPRODUCT(('STATMENS'!$E$9:$E$13459="2018")*1/COUNTIF('STATMENS'!$H$9:$H$13459;'STATMENS'!$H$9:$H$13459))

Ca ne me renvoie pas la bonne valeur.
Par contre si j'enlève le critère d'année, la valeur retournée est la bonne..

Pourriez-vous m'aider svp ?

Merci par avance !
 

camille_13

XLDnaute Nouveau
Bonjour le Forum,
Bonjour camille_13,

un essai en fichier joint avec 2 formule différente dont une proposée par job75

Cordialement


Bonjour Jocelyn,

merci beaucoup pour ta réponse.
J'ai essayé la première formule mais elle me renvoie 0 et la deuxième me renvoie -1 par rapport au bon compte. Une idée ?
J'ai joint le fichier avec mes données réelles. Dans la deuxième feuille, mon ancienne méthode manuelle: je filtrais mes données dans la base, pour le coller dans une autre feuille et je faisais remove duplicate … (sans commentaire ^^)

Merci par avance,
Camille
 

Pièces jointes

  • Book1.xlsx
    164.9 KB · Affichages: 7

job75

XLDnaute Barbatruc
Bonjour camille_13, Jocelyn,

Puisqu'on utilise la fonction LIGNE il faut faire commencer les plages en ligne 1, voyez le fichier (1) joint.

Ou si l'on fait commencer les plages en ligne 2 il faut ajouter -1 dans la formule, fichier (2).

A+
 

Pièces jointes

  • Book(1).xlsx
    164.9 KB · Affichages: 3
  • Book(2).xlsx
    164.9 KB · Affichages: 4

job75

XLDnaute Barbatruc
Re, salut JHA,

On aura remarqué qu'avec les formules le calcul prend du tremps.

Pour aller vite on peut utiliser cette fonction VBA, à placer impérativement dans un module standard :
VB:
Function F(ref As Range, plage As Range)
Dim x$, tablo, d As Object, i&, y$
x = LCase(ref) 'minuscules, pour ignorer la casse
tablo = Intersect(plage, plage.Parent.UsedRange) 'matrice, plus rapide
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(tablo)
    y = LCase(tablo(i, 1))
    If y = x Then d(y & Chr(1) & tablo(i, 2)) = ""
Next
F = d.Count
End Function
Elle est utilisée dans cette formule en E2, à tirer vers le bas :
Code:
=F(D2;A:B)
Fichier .xlsm joint.

A+
 

Pièces jointes

  • Book VBA(1).xlsm
    172.4 KB · Affichages: 5

camille_13

XLDnaute Nouveau
Bonjour camille_13, Jocelyn,

Puisqu'on utilise la fonction LIGNE il faut faire commencer les plages en ligne 1, voyez le fichier (1) joint.

Ou si l'on fait commencer les plages en ligne 2 il faut ajouter -1 dans la formule, fichier (2).

A+


Bonjour Job75,
D'accord ça fonctionne bien maintenant, j'avoue que je n'avais pas tous les tenants et aboutissants de la formule !
Merci beaucoup et bon week-end !
 

Statistiques des forums

Discussions
315 093
Messages
2 116 126
Membres
112 666
dernier inscrit
Coco0505