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
| Sub FiltrerListe()
Dim tbl(), dpt, itm, aa, i%, d As Object, ok As Boolean
Set d = CreateObject("Scripting.Dictionary")
aa = ActiveSheet.Range("A1").CurrentRegion.Value2
For i = 2 To UBound(aa)
dpt = aa(i, 1)
If d.exists(dpt) Then
itm = Split(d(dpt), ";")
If aa(i, 3) < CInt(itm(1)) Then
ok = True
ElseIf aa(i, 4) < CLng(itm(2)) Then
ok = True
End If
If ok Then
itm = aa(i, 2) & ";" & aa(i, 3) & ";" & aa(i, 4)
d(dpt) = itm: ok = False
End If
Else
itm = aa(i, 2) & ";" & aa(i, 3) & ";" & aa(i, 4)
d(dpt) = itm
End If
Next i
ReDim tbl(d.Count, 3): i = 0
For Each dpt In d.keys
itm = Split(d(dpt), ";")
i = i + 1: tbl(i, 0) = dpt: tbl(i, 1) = itm(0)
tbl(i, 2) = CInt(itm(1)): tbl(i, 3) = CLng(itm(2))
Next dpt
itm = Split("Département Décision Phase Date")
For i = 0 To 3
tbl(0, i) = itm(i)
Next i
Application.ScreenUpdating = False
With ActiveSheet.Range("J1").Resize(UBound(tbl, 1) + 1, 4)
.Value = tbl
With .Rows(1)
.HorizontalAlignment = xlCenter: .Font.Italic = True
End With
.Columns(4).NumberFormat = "dd/mm/yyyy"
.Columns.AutoFit
End With
End Sub |
Partager