Sub Regroupement()
Dim F As Worksheet, t, ub&, i&, j&
Set F = ActiveSheet
Application.ScreenUpdating = False
With F.[A1].CurrentRegion 'à adapter
If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
.Sort .Columns(2), xlAscending, .Columns(5), , xlAscending, Header:=xlYes 'tri
.EntireColumn.Copy Workbooks.Add.Sheets(1).[L1] 'document auxiliaire, à adapter
End With
Application.Calculation = xlCalculationManual 'évite le recalcul des formules volatiles
With ActiveWorkbook.Sheets(1).[L1].CurrentRegion
.Value = .Value 'supprime les formules
.Columns(7).Resize(, 2).EntireColumn.Delete
t = .Columns(6).Resize(, 2): ub = UBound(t)
For i = 2 To ub
If t(i, 2) = "" Then
For j = i + 1 To ub
If t(j, 2) <> "" Then Exit For
Next j
t(i, 1) = t(j, 1): t(i, 2) = t(j, 2): t(j, 2) = ""
i = j
End If
Next i
.Columns(6).Resize(, 2) = t 'restitution
On Error Resume Next 'si aucune SpecialCell
.Columns(7).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.EntireColumn.Copy F.[L1]
End With
ActiveWorkbook.Close False 'fermeture du document auxiliaire
Application.Calculation = xlCalculationAutomatic
End Sub