Countif défaillant avec dates

Sebast

XLDnaute Impliqué
Bonsoir à toutes et à tous,

j'ai besoin de savoir si ma base de données comporte des entrées comprises entre telle et telle date.

Dans la feuille BASE se trouvent les lignes à "questionner" et dans la feuille PASSAGE la période de référence. En gros, avec l'exemple fourni dans le fichier joint, je cherche si la tranche du 6 janvier 2012 au 7 février 2012 figurant en PASSAGE présente des entrées dans BASE

Je pensais faire avec un countif mais je n'arrive pas à remonter le résultat (normalement, compteur devrait renvoyer 3). Que je place le résultat dans ou hors de la boucle, le compteur ne s'incrémente pas (au mieux, il renvoie 1, parfois 0 …)

Quelqu'un a-t-il une idée comment faire ? Merci d'avance pour votre aide

Code:
Sub recherche()

Dim PeriodeBase As Range
Dim PeriodePassage As Range
Dim dernligBase As Long
Dim dernligPassage As Long
Dim DatePassageDepuis As Date
Dim DatePassageJusqua As Date
Dim DateBaseDepuis As Date
Dim DateBaseJusqua As Date

dernligPassage = Sheets("Passage").Range("A" & Rows.Count).End(xlUp).Row
Set PeriodePassage = Sheets("Passage").Range("A2:A" & dernligPassage)
DatePassageDepuis = WorksheetFunction.Min(PeriodePassage)
'MsgBox "la date mini dans la feuille Passage est " & DatePassageDepuis
DatePassageJusqua = WorksheetFunction.Max(PeriodePassage)
'MsgBox "la date maxi dans la feuille Passage est " & DatePassageJusqua

dernligBase = Sheets("Base").Range("A" & Rows.Count).End(xlUp).Row
Set PeriodeBase = Sheets("Base").Range("A2:A" & dernligBase)
DateBaseDepuis = WorksheetFunction.Min(PeriodeBase)
'MsgBox "la date mini dans la feuille Base est " & DateBaseDepuis
DateBaseJusqua = WorksheetFunction.Max(PeriodeBase)
'MsgBox "la date maxi dans la feuille Base est " & DateBaseJusqua


Dim Compteur As Long
Dim Cellule As Range

For Each Cellule In PeriodePassage
    Compteur = Application.WorksheetFunction.CountIf(PeriodeBase, Cellule.Value)
Next
 MsgBox " il y a " & Compteur & " entrée(s)"

End Sub
 

Pièces jointes

  • Question_intervalle.xlsm
    19.2 KB · Affichages: 36

job75

XLDnaute Barbatruc
Re : Countif défaillant avec dates

Bonsoir Sebast,

Par formule dans la cellule que vous voulez :

Code:
=SOMMEPROD(NB.SI(BASE!A:A;PASSAGE!A2:A5))
Et en VBA c'est pareil, avec en prime une 2ème plage dynamique :

Code:
Sub recherche()
Dim ad1$, ad2$, n&
ad1 = "BASE!A:A"
ad2 = "PASSAGE!A2:A" & Sheets("PASSAGE").Range("A" & Rows.Count).End(xlUp).Row
n = Evaluate("SUMPRODUCT(COUNTIF(" & ad1 & "," & ad2 & "))")
MsgBox n
End Sub
A+
 

Modeste geedee

XLDnaute Barbatruc
Re : Countif défaillant avec dates

Bonsour®

:rolleyes:
le B.A. BA de l'utilisation des fonctions natives EXCEL

3 solutions sans une ligne de macro !!!
Capture.jpg
:cool:
 

Pièces jointes

  • dates-question_intervalle.xlsm
    29.1 KB · Affichages: 32
  • Capture.jpg
    Capture.jpg
    46.8 KB · Affichages: 69
  • Capture.jpg
    Capture.jpg
    46.8 KB · Affichages: 65

Sebast

XLDnaute Impliqué
Re : Countif défaillant avec dates

Bonsoir job75,

merci pour ce code qui renvoie bien le résultat escompté. Je ne suis vraiment pas familier de ce type de syntaxe.
En revanche, si j'ai compris l'intérêt de Evaluate, je ne comprends pas le Sumproduct : pour moi, c'est quand on veut additionner des lignes où il y a multiplication. Je vais creuser !

Mon code initial était vraiment à côté de la plaque ou l'erreur se niche dans un détail qui m'a échappé ?

Encore merci pour ton aide
a +
 

Sebast

XLDnaute Impliqué
Re : Countif défaillant avec dates

Salut Modeste gedee,

merci pour ton aide mais si ça paraît trivial, c'est que j'ai "élagué" au maximum les données. Dans la réalité, la table Base fait environ 400 000 lignes et 27 colonnes, ce qui aurait nui ici à la compréhension.
Ce test pour savoir combien il y a d'entrées me permettra ultérieurement de décider d'un embranchement vers un traitement spécifique (en gros, si compteur > 0, je fais ceci, si = 0 je fais autre chose).
Et comme il y a beaucoup de tables, de lignes, de colonnes et que le traitement est répétitif (toutes les semaines), je veux l'automatiser, donc je dois passer par vba.

Bonne soirée
 

job75

XLDnaute Barbatruc
Re : Countif défaillant avec dates

Re,

Noter que Evaluate évalue matriciellement les formules matricielles.

On peut donc remplacer SUMPRODUCT par SUM :

Code:
Sub recherche()
Dim ad1$, ad2$, n&
ad1 = "BASE!A:A"
ad2 = "PASSAGE!A2:A" & Sheets("PASSAGE").Range("A" & Rows.Count).End(xlUp).Row
n = Evaluate("SUM(COUNTIF(" & ad1 & "," & ad2 & "))")
MsgBox n
End Sub
A+
 

Statistiques des forums

Discussions
312 491
Messages
2 088 888
Membres
103 982
dernier inscrit
krakencolas