Function Arrang(ByVal NumA As Long, Optional ByVal NbrÉl As Long) As Long()
If NbrÉl = 0 Then NbrÉl = Application.Caller.Columns.Count
CalcArrang Arrang, NumA, NbrÉl
End Function
Sub CalcArrang(TR() As Long, ByVal NumA As Long, Optional ByVal NbrÉl As Long)
Dim NbP As Long, N As Long, Z As String, P As Long, NbCou As Long
If NbrÉl = 0 Then NbrÉl = UBound(TR) Else ReDim TR(1 To NbrÉl)
NbP = 1: For N = 1 To NbrÉl: Z = Z & ChrB$(N): NbP = NbP * N: Next N
NumA = NumA Mod NbP
ReDim TR(1 To NbrÉl): NbCou = NbrÉl
For N = 1 To NbrÉl: NbP = NbP \ NbCou: P = NumA \ NbP
TR(N) = AscB(MidB$(Z, P + 1, 1)): Z = LeftB$(Z, P) & MidB$(Z, P + 2)
NumA = NumA - P * NbP: NbCou = NbCou - 1: Next N
End Sub