Option Explicit
Sub Test()
Dim TTest() As Long
ReDim TTest(1 To 10, 1 To 10)
InitListeAl2D TTest
[B2].Resize(10, 10).Value = TTest
End Sub
Sub InitListeAl2D(TAl() As Long, Optional ByVal Graine As Double, Optional ByVal Init As Boolean = True)
Rem. ——— Garnit un tableau à 2 dimensions base 1 de numéros sans doublon ou change aléatoirement l'ordre
' des numéros y étant déjà portés.
' Arguments :
' TAl : Le tableau à traiter. Doit être dimensionné.
' Graine: Base de départ de la série. Si omis la série sera différente à chaque exécution.
' Init: Si spécifié False le contenuu initial du tableau est conservé, seulement mélangé.
Dim L1 As Long, C1 As Long, L2 As Long, C2 As Long, P As Long, Q As Long, X As Long
Rem. Initialisation :
If Init Then
For L1 = 1 To UBound(TAl, 1): For C1 = 1 To UBound(TAl, 2)
X = X + 1: TAl(L1, C1) = X: Next C1, L1
End If
If Graine <= 0 Then Randomize Else Rnd -1: Randomize Graine
Rem. Mélange de Fisher-Yates :
For P = UBound(TAl, 1) * UBound(TAl, 2) To 2 Step -1
L2 = (P - 1) \ UBound(TAl, 2) + 1: C2 = (P - 1) Mod UBound(TAl, 2) + 1
Q = Int(Rnd * P) + 1
L1 = (Q - 1) \ UBound(TAl, 2) + 1: C1 = (Q - 1) Mod UBound(TAl, 2) + 1
X = TAl(L1, C1): TAl(L1, C1) = TAl(L2, C2): TAl(L2, C2) = X
Next P
End Sub