Résolu XL 2013 Compter le nombre de samedi sans les doublons

@Tech

XLDnaute Nouveau
Bonjour,

J’ai besoin de votre aide car cela fait deux jours que je cherche une solution…
J'ai une colonne de dates comme celle qui suit:

Colonne C
03/09/2020
04/09/2020
05/09/2020 Samedi (doublon)
05/09/2020 Samedi (doublon)
06/09/2020
07/09/2020
12/09/2020 Samedi
13/09/2020
14/09/2020

Comment compter le nombre samedi en ignorant les doublons?
J’ai plus de 200 000 lignes et je suis sur Excel 2013.

Avec la formule ci-dessous je compte le nombre de samedi total mais avec les doublons…
=SOMMEPROD((JOURSEM(C1:C10)=7)*1)

Vous savez comment je peux faire ?

Merci d'avance, et bon week-end !
 
Ce fil a été résolu! Aller à la solution…

njhub

XLDnaute Junior
Bonjour @Tech,

Essayez avec la formule ci-dessous :
Code:
=SOMMEPROD((JOURSEM(C10:C18)=7)*(1/NB.SI.ENS(C10:C18;C10:C18)))
;)
 
Dernière édition:

JHA

XLDnaute Barbatruc
Bonjour à tous,

Juste une petite modification, la fonction NB.SI.ENS() n'est pas connue sous excel 2013
VB:
=SOMMEPROD((JOURSEM(A2:A10)=7)*(1/NB.SI(A2:A10;A2:A10)))
JHA
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Tech, bienvenue sur XLD :),
Bonjour @njhub :)

Pour 200 000 lignes de dates, je pense qu'une fonction personnalisée est plus rapide.
La fonction dans la cellule F2:
VB:
=CompterSamediUnique1(C2:C200001)
Cliquez sur le bouton bleu pour initialiser 200 000 lignes de dates.

Le code de la fonction est dans module1:
VB:
Function CompterSamediUnique1(Plage As Range) As Long
Dim dico, xcell
   Set dico = CreateObject("scripting.dictionary")
   For Each xcell In Plage
      If xcell <> "" Then If IsDate(xcell) Then If Weekday(xcell) = 7 Then dico(CStr(xcell)) = ""
   Next xcell
   CompterSamediUnique1 = dico.Count
End Function
 

Fichiers joints

Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,
Une version plus rapide.
Code de la fonction:
VB:
Function CompterSamediUnique1(Plage As Range) As Long
Dim dico, xcell, t, i&
   Application.ScreenUpdating = False
   Set dico = CreateObject("scripting.dictionary")
   t = Plage.Value
   For i = 1 To UBound(t)
      If t(i, 1) <> "" Then If IsDate(t(i, 1)) Then If Weekday(t(i, 1)) = 7 Then dico(CStr(t(i, 1))) = ""
   Next i
   CompterSamediUnique1 = dico.Count
End Function
 

Fichiers joints

@Tech

XLDnaute Nouveau
Bonjour à tous,

Merci pour votre réactivité et votre temps...

J'ai essayé avec la solution de njhub, cela fonctionne, mais c'est un peu lent...
La solution de mapomme fonctionne très bien et est beaucoup plus rapide...

Aussi, J'ai une autre question pour mapomme!
Serait il possible de filtrer l'année?
Ex:
Cellule F2 pour 2018
Cellule F3 pour 2019
Cellule F3 pour 2020

Merci d'avance pour votre patience :)
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une version v2 de la fonction avec deux paramètres:
=CompterSamediUnique(Plage As Range, Optional annee)
  • Plage est la zone des dates
  • annee est l'année concernée. Si annee est omis, alors on examine toutes les dates sans considération d'année.


Le code de la fonction :
VB:
Function CompterSamediUnique(Plage As Range, Optional annee)
Dim dico, xcell, t, i&, AN
   Application.ScreenUpdating = False
   AN = IIf(IsMissing(annee), "*", annee)
   Set dico = CreateObject("scripting.dictionary")
   t = Plage.Value
   For i = 1 To UBound(t)
      If t(i, 1) <> "" Then If IsDate(t(i, 1)) Then If Year(t(i, 1)) Like AN Then If Weekday(t(i, 1)) = 7 Then dico(CStr(t(i, 1))) = ""
   Next i
   CompterSamediUnique = dico.Count
End Function
 
Ce message a été identifié comme étant une solution!

Fichiers joints

@Tech

XLDnaute Nouveau
Re mapomme,

Super ! votre code est juste parfait !

J'ai déjà eu l’occasion de faire un peu de vba sur 2 ou 3 fichiers... mais là je suis perdu...

High Level votre niveau ;)

En tout cas, mille merci pour votre aide :)
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas