Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim pas&, LO As ListObject, P As Range, mem
pas = 2 'modifiable
Set LO = Target(1).ListObject
If Not LO Is Nothing Then
Set P = LO.Range
If Target.Address = P(1).Address Then
Cancel = True
If P.Columns.Count = 1 Then MsgBox "Le tableau doit avoir au moins 2 colonnes...": Exit Sub
mem = P.Columns(1) 'mémorise les valeurs
Application.ScreenUpdating = False
P.Columns(2).Offset(1).ClearContents 'vide la 2ème colonne
P.Sort P(1), xlAscending, Header:=xlYes 'tri de la 1ère colonne
P(2, 2).Formula = "=OFFSET(" & P(2, 1).Address & "," & pas & "*(ROW()-" & P.Row + 1 & "),)"
P.Columns(2) = P.Columns(2).Value 'supprime les formules
P.Columns(2).Replace 0, "", xlWhole 'supprime les valeurs zéro
With P.Resize(Application.CountA(P.Columns(2)))
.Columns(1) = "=RAND()" 'ALEA()
.Sort .Columns(1), Header:=xlYes 'tri aléatoire
End With
P.Columns(1) = mem 'remise en l'état initial
End If
End If
End Sub