Recherche des dates au plus tard avec critère

Bonsoir le forum!

Alors voila, le problème c'est que mon code s’exécute et donne le résultat que je souhaite MAIS débogue à la fin....

J'ai dans ma première colonne une liste de lot qui peuvent apparaître plusieurs fois. Dans la deuxième colonne, il y a des dates associées aux lots. De ce fait, les lots ont donc plusieurs dates différentes. Et je veux récupérer la date la tard pour chaque lot.

En fait, je veux faire l'équivalent d'un formule "MAX" mais je préfère passer en vba car à terme, le fichier sera trop lourd pour supporter des formules.

Je sais qu'il est possible de le réaliser en créant un tableau à 2 dimensions pour mémoriser les valeurs mais je n'arrive pas à le faire...

J'ai donc "bidouiller" le code suivant ( bidouiller car les meilleurs d'entre vous vont surement pleurer en voyant mon code de jeune novice autodidacte qui patauge )...

Sub date_la_plus_tard()

 ''''' calcul de la date la plus tard pour chaque lot

Dim Tblmaj As Variant
Dim BoucleA As Long
Dim NblingneMAJ As Long

Dim recherchedate As Variant

NblingneMAJ = Sheets("MAJparMacro").Range("A" & Rows.Count).End(xlUp).Row

Tblmaj = Sheets("MAJparMacro").Range("A1").CurrentRegion

'Classement des dates colonnes B la plus Récente en 1er
Worksheets("MAJparMacro").Select
Worksheets("MAJparMacro").Range("A1:B1").Select
    Selection.AutoFilter
  ActiveWorkbook.Worksheets("MAJparMacro").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("MAJparMacro").AutoFilter.Sort.SortFields.Add Key:= _
        Range("B1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("MAJparMacro").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

'Recuperation des lots sans doublons dans la colonne C
Sheets("MAJparMacro").Select
Range("A1:A" & NblingneMAJ).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("C1"), Unique:=True
Range("D1") = "Date la plus tard"

For BoucleA = 2 To UBound(Tblmaj)
            Set recherchedate = Worksheets("MAJparMacro").Range("A1:A" & NblingneMAJ).Cells.Find(What:=Sheets("MAJparMacro").Range("C" & BoucleA), LookAt:=xlWhole)
                Sheets("MAJparMacro").Range("D" & BoucleA) = recherchedate.Offset(0, 1)
Next BoucleA

Sheets("MAJparMacro").Columns("D:D").NumberFormat = "dd/mm/yyyy"

End Sub

Je laisse le fichier pour mieux illustrer la situation.

Un grand merci d'avance à ceux qui me viendront en aide!!

13dates.xlsm (18.17 Ko)

Bonsoir,

Sub ExtractionDateMax()
    Dim Tdm(), m%, n&, i&
    With Worksheets("MAJparMacro")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("A2:B" & n).Sort key1:=.Range("A2"), order1:=xlAscending, key2:=.Range("B2"), _
         order2:=xlDescending, Header:=xlNo
        ReDim Tdm(1, 0)
        For i = 2 To n
            If .Cells(i, 1) <> Tdm(0, m) Then
                m = m + 1: ReDim Preserve Tdm(1, m)
                Tdm(0, m) = .Cells(i, 1): Tdm(1, m) = .Cells(i, 2).Value2
            End If
        Next i
    End With
    Tdm(0, 0) = "Lots": Tdm(1, 0) = "Date la plus tard"
    With Worksheets("Résultat")
        .Range("A1").CurrentRegion.ClearContents
        With .Range("A1").Resize(m + 1, 2)
            .Value = WorksheetFunction.Transpose(Tdm)
            .HorizontalAlignment = xlCenter
            .Columns(2).NumberFormat = "dd/mm/yyyy"
        End With
        .Activate
    End With
End Sub

Cordialement.

Bon bah c'est parfait!

J'ai même réussi à l'adapter à un autre de mes problèmes!

Je comprend mieux maintenant comment faire un tableau qui conserve les valeurs!

Merci beaucoup! c'est vraiment top!!!

Rechercher des sujets similaires à "recherche dates tard critere"