Bonjour,
2 possibilités :
1) Avant le tri, toutes les données sont à la suite sans ligne vide :
on ne trie que les données remplies :
Sub trialpha()
Dim I As Long
I = Range("A4").End(xlDown).Row
Range("A4:G" & Range("A" & I).End(3).Row).Sort _
Key1:=Range("A4"), Order1:=xlAscending, _
Key2:=Range("B4"), Order2:=xlAscending, _
Key3:=Range("C4"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=True, _
Orientation:=xlTopToBottom
End Sub
2) Il y a des lignes vides avant le tri, on supprime les lignes après le tri
Sub trialpha()
Dim I As Long
Range("A4:G" & Range("A65535").End(3).Row).Sort _
Key1:=Range("A4"), Order1:=xlAscending, _
Key2:=Range("B4"), Order2:=xlAscending, _
Key3:=Range("C4"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=True, _
Orientation:=xlTopToBottom
'suprression des lignes vides
For I = 4 To 65535
If Range("A" & I).Text <> "" Then Exit For
Next I
Rows("4:" & I - 1).Delete Shift:=xlUp
End Sub