Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("a1").ListObject.HeaderRowRange) Is Nothing Then
Cancel = True
trierLettreChiffre Range("a1").ListObject.ListColumns(Target.Value).Index
End If
End Sub
Sub trierLettreChiffre(ByVal xn As Long)
Dim lsto As ListObject, nNum&, nAlpha&, tNum
Set lsto = Range("a1").ListObject
If Me.FilterMode Then Me.ShowAllData
lsto.Range.Sort key1:=lsto.ListColumns(xn).Range(1, 1), order1:=xlAscending, Header:=xlYes, MatchCase:=False
nNum = Application.Count(lsto.ListColumns(xn).Range): nAlpha = lsto.ListRows.Count - nNum
tNum = lsto.DataBodyRange.Resize(nNum)
lsto.DataBodyRange(1, 1).Resize(nAlpha, lsto.ListColumns.Count) = lsto.DataBodyRange.Offset(nNum).Resize(nAlpha).Value
lsto.DataBodyRange.Offset(nAlpha).Resize(nNum) = tNum
End Sub