1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| Sub test()
Dim Dico As Object, C As Range, Mois As Integer, Plage As Range, Plage1 As Range, Ligne As Integer
Dim Item As Variant, Ligne1 As Integer
Application.ScreenUpdating = False
Ligne = 1
Set Dico = CreateObject("Scripting.Dictionary")
With Feuil1
'--------
Columns("K:M").Clear
'---------
Mois = Application.Match(.[G2], Feuil3.[A:A], 0)
For Each C In .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))
If (C.Offset(, 1) < DateSerial(2012, Mois, 1) And C.Offset(, 2) < DateSerial(2012, Mois, 1)) Or _
(C.Offset(, 1) > DateSerial(2012, Mois + 1, 1) And C.Offset(, 2) > DateSerial(2012, Mois + 1, 1)) Then
.Cells(C.Row, 14) = 0
.Cells(C.Row, 15) = 0
Else
.Cells(C.Row, 14) = Application.Max(DateSerial(2012, Mois, 1), C.Offset(, 1))
.Cells(C.Row, 15) = Application.Min(DateSerial(2012, Mois + 1, 1), C.Offset(, 2))
End If
If Not Dico.Exists(C.Value) Then
Dico.Add C.Value, C.Value
End If
Next C
Set Plage = .Range(.[A1], Cells(.Rows.Count, 1).End(xlUp)).Resize(, 15)
For Each Item In Dico.Items
.AutoFilterMode = False
Set Plage1 = Plage
Plage1.AutoFilter 1, Item
Plage1.AutoFilter 5, .[I2]
Plage1.AutoFilter 14, ">=" & Format(DateSerial(2012, Mois, 1), "mm/dd/yyyy")
Plage1.AutoFilter 15, "<=" & Format(DateSerial(2012, Mois + 1, 1), "mm/dd/yyyy")
If Application.Subtotal(103, .[A:A]) > 1 Then
Ligne = Ligne + 1
.Cells(Ligne, 11) = Item
.Cells(Ligne, 12) = Application.Subtotal(109, .[O:O]) - Application.Subtotal(109, .[N:N])
End If
Next Item
'---------------
.Columns("L:L").Insert Shift:=xlToRight
.Cells(1, "K") = "Site"
.Cells(1, "L") = "Durée total de l'arrêt"
.Cells(1, "M") = "Durée (Min)"
.Cells(2, "L").Formula = _
"=TEXT(M2/1440,""jj"""" jours"""" hh"""" heures"""" mm"""" minutes"""""")"
Ligne = .Cells(.Rows.Count, "A").End(xlUp).Row
.Cells(2, "L").AutoFill Range("L2:L" & Ligne)
.Cells(2, "L").EntireColumn.AutoFit
.Cells(2, "K").Resize(Ligne, 3).Sort Key1:=.Cells(2, "K"), Order1:=xlAscending, Header:=xlNo
'---------------
.AutoFilterMode = False
.[O:P].ClearContents
End With
Application.ScreenUpdating = False
End Sub |
Partager