Sub Tri()
Dim DL As Long, Plage As Range
    ' PS le critere trie est a mettre dans le code a CustomOrder => CustomOrder:="E,P,M,X,G"
    ' Il faut bien cibler la feuille et la plage dans le code
    With Sheets(1)
        DL = .Columns("A:C").Find("*", SearchOrder:=xlByRows, searchdirection:=xlPrevious).Row  'Derniere ligne de la colonne A:C
        Set Plage = .Range("A2:C" & DL)
        Application.ScreenUpdating = False
        With .Sort
            .SortFields.Clear
            .SortFields.Add Key:=Plage.Columns.Item(2), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="E,P,M,X,G", DataOption:=xlSortNormal ' Tri sur la 2eme colonne de la plage
            .SortFields.Add Key:=Plage.Columns.Item(3), Order:=xlAscending, DataOption:=xlSortNormal  ' Tri sur la 3eme colonne de la plage
            .SetRange Plage: .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
        End With
    End With
        Application.ScreenUpdating = True
        Set Plage = Nothing
End Sub
' code pour le test afin de remettre la donnée rapidement
Sub RecoverData()
    VA = Feuil2.Cells(1).CurrentRegion.Value
    Feuil1.Cells(1).Resize(UBound(VA), UBound(VA, 2)).Value = VA
End Sub