Sub Tri_disjoint()
Dim ZoneTri As Range, coltri%, a, F As Worksheet, aux As Worksheet, P As Range, lig, R As Range, tablo, i&
Set ZoneTri = [A4:G21] 'à adapter, sans en-têtes
coltri = ZoneTri.Column 'à adapter éventuellement
a = Array(5, 8, 11, 14, 17, 20)
Set F = ActiveSheet
Application.ScreenUpdating = False
Set aux = Workbooks.Add.Sheets(1) 'document auxiliaire
Set P = aux.Range(ZoneTri.Address)
P = ZoneTri.Value
For Each lig In a
If Not Intersect(F.Rows(lig), ZoneTri) Is Nothing Then
Set R = F.Cells(lig, coltri + 1).MergeArea.EntireRow.Columns(coltri) 'plage fusionnée voisine
aux.Range(R.Address) = aux.Cells(lig, coltri) 'remplissage de la colonne
End If
Next lig
coltri = coltri - P.Column + 1
P.Sort P.Columns(coltri), xlAscending, Header:=xlNo 'tri
'---restitution---
tablo = P 'matrice, plus rapide
For i = 1 To UBound(tablo)
If ZoneTri(i, coltri) = "" Then tablo(i, coltri) = ""
Next
ZoneTri = tablo
aux.Parent.Close False 'ferme le document auxiliaire
End Sub