Private Sub CommandButton1_Click()
Dim kID&, kDT&, DAT()
With Me.Range("PLG")
DAT = .Value 'Tableau des données à traiter.
kID = 1 'Clef d'identification (Colonne CHAMP 1).
kDT = 3 'Clef de sélection (Colonne CHAMP 3).
DAT = tutu(DAT, kID, kDT)
.ClearContents
.Resize(UBound(DAT, 1), UBound(DAT, 2)).Value = DAT
End With
End Sub
Private Function tutu(DAT(), kID&, kDT&)
'La bibliothèque Microsoft Scripting Runtime (scrrun.dll) doit être référencée.
Dim i&, j&, ChC&, KTmp$, CLR(), oID As New Scripting.Dictionary
ChC = UBound(DAT, 2)
ReDim CLR(1 To ChC)
For i = 1 To UBound(DAT, 1)
KTmp = CStr(DAT(i, kID))
If KTmp <> "" Then
If oID.Exists(KTmp) Then
If oID(KTmp)(kDT) < DAT(i, kDT) Then
For j = 1 To ChC: oID(KTmp)(j) = DAT(i, j): Next
End If
Else
For j = 1 To ChC: CLR(j) = DAT(i, j): Next
oID(KTmp) = CLR
End If
End If
Next
If oID.Count Then
CLR = oID.Keys
ReDim DAT(1 To oID.Count, 1 To ChC)
For i = 1 To oID.Count
For j = 1 To ChC: DAT(i, j) = oID(CLR(i - 1))(j): Next
Next
End If
Set oID = Nothing
Erase CLR
tutu = DAT
End Function