Bonjour,
Pouvez-vous ajouter une condition pour que le numéro soit répéter en deux fois dans chaque colonne dans les cellules vides de la plage dans le code ci-dessous ?
Public Alea, Nmax, Ncol
Sub Dispatche()
Dim L%, C%, Erreur$: ClearTable: Erreur = ""
Application.ScreenUpdating = False
If [S10] > [S9] Then Erreur = "Le nombre de périodes ne peut être inférieur au nombre maximum autorisé."
If Erreur <> "" Then MsgBox Erreur: Exit Sub
Ncol = [S10]
RemplitTabloAlea
For L = 9 To 100
TirageAuSort
For C = 4 To 3 + Ncol
If Cells(L, C) = "" Then Cells(L, C) = Alea(C - 3, 1)
Next C
Next L
End Sub
Private Sub ClearTable()
Dim T, L%, C%
T = [D9:M100]
For L = 1 To UBound(T)
For C = 1 To UBound(T, 2)
If IsNumeric(T(L, C)) Then T(L, C) = ""
Next C
Next L
[D9].Resize(UBound(T, 1), UBound(T, 2)) = T
End Sub
Private Sub RemplitTabloAlea()
Dim i%: ReDim Alea(1 To [S9], 1 To 2)
For i = 1 To UBound(Alea): Alea(i, 1) = i: Next i
End Sub
Private Sub TirageAuSort()
Dim i%, j%, Buffer%: Nmax = [S9]: Randomize
For i = 1 To UBound(Alea): Alea(i, 2) = Rnd: Next i
For i = 1 To UBound(Alea)
For j = i To UBound(Alea)
If Alea(i, 2) < Alea(j, 2) Then
Buffer = Alea(i, 1): Alea(i, 1) = Alea(j, 1): Alea(j, 1) = Buffer
Buffer = Alea(i, 2): Alea(i, 2) = Alea(j, 2): Alea(j, 2) = Buffer
End If
Next j
Next i
End Sub
Merci.