Pour le plaisir, on peut simplifier l'exécution de la macro proposée. Il
n'y a qu'à définir les 3 variables au début de la procédure et exécuter
cette dernière.
'--------------------------------------------
Sub test()
Dim Rg As Range, LaFeuille As String
Dim ShS As Worksheet, Adr As String
Dim Sh As Worksheet, L As Long
Dim Ord As XlSortOrder
'*********VARIABLES À DÉFINIR*********
'le tri croisant ou décroissant
Ord = xlAscending 'ou xlDescending
'nom de l'onglet de la feuile où sont les données
LaFeuille = "Feuil1"
'Adresse de la première cellule de la colonne où débute les donnes.
Adr = "G24"
'*************************************
Application.ScreenUpdating = False
Application.EnableEvents = False
Set ShS = Worksheets(LaFeuille) 'Nom feuille à adapter
With ShS
L = .Cells(.Rows.Count, Range(Adr).Column).End(xlUp).Row
Set Rg = .Range(.Range(Adr), .Cells(L, Range(Adr).Column))
End With
Set Sh = Worksheets.Add(after:=ActiveSheet)
Rg.Copy Sh.Range(Rg.Cells(1, 1).Address)
Sh.Range(Rg.Address).TextToColumns Destination:=Sh.Range(Rg.Cells(1, 2) _
.Address), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, OtherChar _
:="-", FieldInfo:=Array(Array(1, 1), Array(2, 1)), _
TrailingMinusNumbers:=True
Sh.Sort.SortFields.Add2 Key:=Sh.Range(Rg.Columns(2).Address) _
, SortOn:=xlSortOnValues, Order:=Ord, DataOption:=xlSortNormal
Sh.Sort.SortFields.Add2 Key:=Sh.Range(Rg.Columns(3).Address) _
, SortOn:=xlSortOnValues, Order:=Ord, DataOption:=xlSortNormal
With Sh.Sort
.SetRange Sh.Range(Rg.Resize(, 3).Address)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sh.Range(Rg.Address).Copy Rg.Cells(1, 1)
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------------
MichD