XL 2010 Compter valeurs uniques sous condition

Moz

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur le forum et ce topic est mon premier alors j'espère qu'il ne sera pas de trop mauvaise qualité. J'ai aussi regardé les autres post sur le sujet mais sans trouver quelque chose qui me correspond.

Mon problème :
J'aimerai compter le nombre de connections total d'un type de métier sur une période donnée.
Par la suite compté le nombre de personnes qui se sont connectés sur la même période, en sachant qu'une personne peu se connecté plusieurs fois.
Et enfin sur la période suivante j'aimerai savoir le nombre de nouvelles personnes connectés. C'est à dire que la personne n’apparaît pas dans les log précédents.

Je pense avoir résolus le premier problème, avec une formule SOMMEPROD.
Mais j’aimerai une validation.

Merci d'avance
 

Pièces jointes

  • Fichier exemple.xlsx
    11.5 KB · Affichages: 49

chris

XLDnaute Barbatruc
Bonjour

Deux solutions par TCD : l'une avec PowerPivot, l'autre avec PowerQuery (add on gratuits sur 2010, intégrés à 2016)

Edit : j'ai oublié de préciser que pour simplifier j'ai pris la semaine mais on pourrait traiter des périodes

Je n'avais pas vu la dernière colonne
 

Pièces jointes

  • ComptageUnique.xlsx
    165 KB · Affichages: 34
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Moz, bienvenue sur XLD, salut chris,

Voyez le fichier joint et ces 2 fonctions VBA :
Code:
Function NbUnique&(matricule As Range, metier As Range, LogTime As Range, dat1&, dat2&, metierRef$)
Dim d As Object, i&
Set d = CreateObject("Scripting.Dictionary")
i = 2
Do While matricule(i) <> ""
    If metier(i) = metierRef And LogTime(i) >= dat1 And LogTime(i) <= dat2 _
        And Not d.exists(matricule(i).Value) Then d(matricule(i).Value) = ""
    i = i + 1
Loop
NbUnique = d.Count
End Function

Function NbNouveau&(matricule As Range, metier As Range, LogTime As Range, dat1&, dat2&, metierRef$, datprec1&, datprec2&)
Dim d As Object, i&
Set d = CreateObject("Scripting.Dictionary")
i = 2
Do While matricule(i) <> ""
    If metier(i) = metierRef And LogTime(i) >= dat1 And LogTime(i) <= dat2 _
        And Not d.exists(matricule(i).Value) Then d(matricule(i).Value) = ""
    i = i + 1
Loop
If d.Count = 0 Then Exit Function
i = 2
Do While matricule(i) <> ""
    If metier(i) = metierRef And LogTime(i) >= datprec1 And LogTime(i) <= datprec2 _
        And d.exists(matricule(i).Value) Then d.Remove matricule(i).Value
    i = i + 1
Loop
NbNouveau = d.Count
End Function
Elles sont utilisées en colonnes I K L.

En colonnes H et J la fonction NB.SI.ENS va mieux que votre SOMMEPROD.

En effet il n'est pas recommandé d'utiliser SOMMEPROD sur des plages illimitées.

A+
 

Pièces jointes

  • Fichier exemple(1).xlsm
    25.7 KB · Affichages: 34

chris

XLDnaute Barbatruc
Re

Sympa le comptage unique.

Arriverais tu à en faire une fonction paramétrable un peu comme NB.SI.ENS, quitte à préciser le type de chaque critère dans les arguments ?

Cela servirait à pas mal de monde...
 

Moz

XLDnaute Nouveau
Bonjour,

Merci Chris pour l'aide mais problème,
L'administrateur bloque les ad don, ou du moins cela me sort une erreur...

Pour les macros, job75, je n'ai pas l’habitude de les utiliser mais lorsque je les ai copié dans mon excel j'ai fais les liens vers les différentes feuilles, et il m'indique "Argument non facultatif", hors j'ai bien respecter le nombre et le type.
 

Discussions similaires

Réponses
306
Affichages
25 K

Statistiques des forums

Discussions
312 196
Messages
2 086 087
Membres
103 116
dernier inscrit
kutobi87