Sub Maximum()
Dim F As Worksheet, dest As Range, ncol%, d As Object, dd As Object, tablo, derlig&, dates, resu(), j%, i&, lig&, col%
Set F = Sheets("Feuil1") 'nom de la feuille à adapter
Set dest = [L14:P14] 'en-têtes de la plage de destination, à adapter
ncol = dest.Columns.Count
Set d = CreateObject("Scripting.Dictionary")
Set dd = CreateObject("Scripting.Dictionary")
tablo = F.[B14].CurrentRegion.Resize(, 9) 'matrice, plus rapide
If F.FilterMode Then F.ShowAllData 'si la feuille est filtrée
derlig = F.Range("S" & F.Rows.Count).End(xlUp).Row
dates = F.Range("S14:T" & derlig) 'matrice, plus rapide, au moins 2 éléments
ReDim resu(1 To UBound(dates), 1 To ncol)
'---liste des en-têtes de colonnes---
For j = 1 To ncol
d(dest(j).Value) = j 'mémorise le numéro de colonne
resu(1, j) = dest(j)
Next j
'---liste des dates---
For i = 2 To UBound(dates)
dd(dates(i, 1)) = i 'mémorise le numéro de ligne
Next i
'---tableau des résultats---
For i = 2 To UBound(tablo)
col = d(tablo(i, 9))
lig = dd(tablo(i, 2))
If col > 0 And lig > 0 And IsNumeric(tablo(i, 1)) Then If CDbl(tablo(i, 1)) > resu(lig, col) Then resu(lig, col) = CDbl(tablo(i, 1))
Next i
'---restitution---
With dest.Resize(UBound(resu))
.Value = resu
.Replace "", 0
End With
End Sub