Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 !
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…