Hello,

Dans un autre forum, j'ai pu obtenir de l'aide sur la création d'une macro. La macro fonctionne correctement.
Le problème est qu'une des étapes de la macro ne donne pas le résultat escompté et que je ne parviens pas à trouver une solution.
L'objectif de cette macro est, entre autres, appliquer un "filtre" sur base de la date la plus éloignée. Actuellement, elle me donne l'inverse, c'est à dire qu'elle choisit la date la plus proche.

Est-ce que quelqu'un aurait la gentillesse d'y jeter un coup d'oeil et de m'indiquer quel paramètre je devrais changer?

D'avance un grand merci.

PS : c'est un topic initialement posté sur forum excel pratique et la macro a été créé par MFerrand (tous les crédits lui reviennent ).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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