Sub square()
Const n& = 8
Dim a, b, c(), arr
Dim i, u, v, w, x, j
' Tableau associant les nombres aux prénoms
arr = Array("Laure", "Sophie", "Claude", "Michel", "Zoe", "Xavier", "Max", "Clara")
' Initialisation des tableaux
ReDim c(1 To n, 1 To n)
a = Evaluate("row(1:" & n & ")"): b = a
' Mélange aléatoire des rangées et des colonnes
Randomize
For i = 1 To n
u = Int(Rnd * (n - i + 1)) + i
v = Int(Rnd * (n - i + 1)) + i
w = a(i, 1): a(i, 1) = a(u, 1): a(u, 1) = w
w = b(i, 1): b(i, 1) = b(v, 1): b(v, 1) = w
Next i
' Construction du carré latin
For j = 1 To n
For i = 1 To n
x = a(i, 1) + j - 1
If x > n Then x = x - n
' Remplacement du numéro par le prénom correspondant
c(i, a(j, 1)) = arr(b(x, 1) - 1) ' Utilisation de b(x, 1) pour indexer arr
Next i
Next j
' Affichage du carré latin dans la feuille Excel
Range("B2").Resize(n, n).Value = c
End Sub