VBA insérer la commande date dans un autofilter
Bonjour,
je souhaite que quelqu'un puisse me corriger la parti autofilter de ma macro.
c'est au niveau de Date()-1 et Date()
c'est a dire je veux que la macro reconnais la date d'aujourd'hui et la date d'hier et qu'elle puisse sélectionner les date d'hier te d'aujourd'hui ainsi que les heures. les heures ne changent pas sauf les dates. le système refuse d'exécuter la macro. l'erreur est dans le filtre. la macro sera utilisé chaque jour. Je vous remercie par avance
en piece jointe le fichier de données.
Sub Macro2()
'
' Macro2 Macro
'
' CCO Lille 22h/6h
ActiveSheet.Range("$A$1:$V$5068").AutoFilter FIELD:=6, Operator:= _
xlFilterValues, Criteria2:=Array(3, "Date()-1 22:59:0", 3, "Date()-1 23:59:0", _
3, "Date() 0:58:0", 3, "Date() 1:59:0", 3, "Date() 2:58:0", 3, _
"Date() 3:57:0", 3, "Date() 4:59:0", 3, "Date() 5:59:0")
ActiveSheet.Range("$A$1:$V$5068").AutoFilter FIELD:=19, Criteria1:= _
"CCO LILLE"
Dim x As Long
x = Application.Subtotal(3, Columns("S")) - 1
MsgBox "nombre de mission pour Lille 22h/6h = " & x
ActiveSheet.Range("$A$1:$V$5068").AutoFilter FIELD:=21, Criteria1:= _
"C - Critique"
x = Application.Subtotal(3, Columns("U")) - 1
MsgBox "nombre de critique pour Lille 22h/6h = " & x
If Worksheets("Table").AutoFilterMode Then
Worksheets("Table").AutoFilterMode = False
End If
End Sub
Bonjour,
Je te propose une autre approche qu'un filtrage (pas toujours évident avec des dates !).
La plage est définie sur la colonne F à partir de F2. Les date et heures sont converties en "Double" et le format de la plage est passé au format "Standard" pour la recherche, il est ensuite repassé au format "Personnalisé". Dans la boucle, se sont les dates qui sont recherchées en priorité et ensuite sur les lignes correspondantes, on recherche en colonne S et U les deux chaines et si trouvées, on totalise. Une précision tout de même, la fonction Date() retourne la date d'aujourd'hui donc le 29/04/2017 alors pour le test, faire en sorte que cette dernière et celle de hier se trouvent bien dans la colonne avec les bonnes heures :
Sub Comptage()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim C1 As Double
Dim C2 As Double
Dim C3 As Double
Dim C4 As Double
Dim C5 As Double
Dim C6 As Double
Dim C7 As Double
Dim C8 As Double
Dim TDate As Long
Dim TLille As Long
Dim TCritique As Long
C1 = CDbl(Date - 1 + TimeValue("22:59:00"))
C2 = CDbl(Date - 1 + TimeValue("23:59:00"))
C3 = CDbl(Date + TimeValue("00:58:00"))
C4 = CDbl(Date + TimeValue("01:59:00"))
C5 = CDbl(Date + TimeValue("02:58:00"))
C6 = CDbl(Date + TimeValue("03:57:00"))
C7 = CDbl(Date + TimeValue("04:59:00"))
C8 = CDbl(Date + TimeValue("05:59:00"))
Set Fe = Worksheets("Table")
'défini la plage sur la colonne F à partir de F2
With Fe: Set Plage = .Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp)): End With
'passe la plage au format standard
Plage.NumberFormat = "General"
'boucle et affiche les lignes correspondantes
For Each Cel In Plage
Select Case Cel.Value
'ne prend en considération que les dates
Case C1, C2, C3, C4, C5, C6, C7, C8
TDate = TDate + 1
'la fonction Trim() car il y a des espaces parasites dans les cellules !
If Trim(Cel.Offset(, 13).Value) = "CCO LILLE" Then TLille = TLille + 1
If Trim(Cel.Offset(, 15).Value) = "C - Critique" Then TCritique = TCritique + 1
End Select
Next Cel
'repasse la plage au format personnalisé
Plage.NumberFormat = "dd/mm/yyyy hh:mm:ss"
MsgBox "Nombre de dates correspondantes = " & TDate & _
vbCrLf & _
"Nombre de mission pour Lille 22h/6h = " & TLille & _
vbCrLf & _
"Nombre de critique pour Lille 22h/6h = " & TCritique
End Sub