Sub Maj()
Dim i As Byte
Dim tablo()
Dim dlg As Integer
Dim plage As Range
With Sheets("Produits")
dcol = .Cells(25, Columns.Count).End(xlToLeft).Column
Set plage = .Range(.Cells(25, dcol), .Cells(.Cells(Rows.Count, dcol).End(xlUp).Row, dcol))
plage.ClearContents
For i = 2 To dcol - 1
On Error Resume Next
tablo = .Range(.Cells(25, i), .Cells(.Cells(Rows.Count, i).End(xlUp).Row, i)).Value
dlg = .Cells(Rows.Count, dcol).End(xlUp).Row + 1
If dlg < 25 Then dlg = 25
If Err > 0 Then
.Cells(dlg, dcol) = .Cells(25, i).Value
Else: .Cells(dlg, dcol).Resize(UBound(tablo)) = tablo
End If
Next i
Set plage = .Range(.Cells(24, dcol), .Cells(.Cells(Rows.Count, dcol).End(xlUp).Row, dcol))
plage.Sort Key1:=.Cells(25, dcol), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub