Sub aaa()
Call bbb(7)
End Sub
Sub bbb(ByVal n&)
Dim a%(), i%, j%, k%, b%
If n < 2 Then Exit Sub
ReDim a(1 To n + 1, 1 To n, 1 To n)
For i = 1 To n: For j = 1 To n: a(1, i, j) = n * (i - 1) + j: a(2, i, j) = n * (j - 1) + i: Next j, i
For k = 3 To n + 1: For i = 1 To n: For j = 1 To n: b = i + (j - 1): b = b + n * (b > n): a(k, i, j) = a(k - 1, b, j): Next j, i, k
Sheets.Add
For k = 1 To n + 1: Cells((k - 1) * n + 1, 1) = "Tour " & k: For i = 1 To n: For j = 1 To n: Cells((k - 1) * n + i, j + 1) = a(k, i, j): Next j, i, k
Cells.EntireColumn.AutoFit
End Sub
le fait que la macro liste tout les arrangements possibles sans doublons pour une personne rencontrant chaque autre personne une et une seule fois est par construction exhaustive ( i.e. il n'y en a pas d'autres, tout autre arrangement produira un doublon)Bonsoir à tous,
Bravo KenDev pour cette macro donnant le même résultat que le post #12 !
Mais j'aurais été curieux de voir une macro donnant des nombres aléatoires tout en respectant la demande de NOUVEL :
Il faut que les 49 personnes est vu tous le monde. Mais sans voir deux fois d'affilés les mêmes
En ce qui me concerne j'en suis totalement incapable !
Mais je pense que c'est possible compte tenu qu'on peut le faire suivant un ordre déterminé !
Peut-être que NOUVEL attend quel que chose de ce genre d'où son silence !
J’avoue que la macro aléatoire ( si elle peut être faite ) me sera très utile !
Bonne soirée à tous !
Sub aaa()
Call bbb(7)
End Sub
Sub bbb(ByVal n&)
Dim a%(), i%, j%, k%, b%, t, d As Object
If n < 2 Then Exit Sub
ReDim a(1 To n + 1, 1 To n, 1 To n)
For i = 1 To n: For j = 1 To n: a(1, i, j) = n * (i - 1) + j: a(2, i, j) = n * (j - 1) + i: Next j, i
For k = 3 To n + 1: For i = 1 To n: For j = 1 To n: b = i + (j - 1): b = b + n * (b > n): a(k, i, j) = a(k - 1, b, j): Next j, i, k
Sheets.Add
For k = 1 To n + 1: Cells((k - 1) * n + 1, 1) = "Tour " & k: For i = 1 To n: For j = 1 To n: Cells((k - 1) * n + i, j + 1) = a(k, i, j): Next j, i, k
Cells.EntireColumn.AutoFit
'---vérification---
t = Cells(1, 2).Resize(n * (n + 1), n)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t): For j = 1 To n - 1: For k = j + 1 To n: d(t(i, j) & " " & t(i, k)) = "": Next k, j, i
MsgBox "Nombre de paires uniques créées : " & d.Count & " sur " & n * n * (n * n - 1) / 2
End Sub
Sub aaa()
Call bbb(15)
End Sub
Sub bbb(ByVal n&)
Dim a%(), i%, j%, k%, b%, t, d As Object, x$, t1
If n < 2 Then Exit Sub
ReDim a(1 To n + 1, 1 To n, 1 To n)
For i = 1 To n: For j = 1 To n: a(1, i, j) = n * (i - 1) + j: a(2, i, j) = n * (j - 1) + i: Next j, i
For k = 3 To n + 1: For i = 1 To n: For j = 1 To n: b = i + (j - 1): b = b + n * (b > n): a(k, i, j) = a(k - 1, b, j): Next j, i, k
Sheets.Add
For k = 1 To n + 1: Cells((k - 1) * n + 1, 1) = "Tour " & k: For i = 1 To n: For j = 1 To n: Cells((k - 1) * n + i, j + 1) = a(k, i, j): Next j, i, k
Cells.EntireColumn.AutoFit
'---vérification---
t = Cells(1, 2).Resize(n * (n + 1), n)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t): For j = 1 To n - 1: For k = j + 1 To n: x = t(i, j) & " " & t(i, k): d(x) = d(x) + 1: Next k, j, i
MsgBox "Nombre de paires uniques créées : " & d.Count & " sur " & n * n * (n * n - 1) / 2 & " "
If d.Count = n * n * (n * n - 1) / 2 Then Exit Sub
'---analyse des doublons---
t = d.items: d.RemoveAll
For n = 0 To UBound(t): d(t(n)) = d(t(n)) + 1: Next
t = d.keys: t1 = d.items: x = ""
For n = 0 To UBound(t): x = x & vbLf & t1(n) & " paires sont créées " & t(n) & " fois": Next
MsgBox Mid(x, 2), , "Analyse"
End Sub