1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
| Option Explicit
Sub TirageV2()
Dim Tablo
Dim temp As String
Dim I As Integer, X As Integer, J As Long, k As Integer
Dim NbJ As Integer, L As Integer, NbManche As Integer, nbparticipant As Integer
Dim Nb3 As Long, Nb2 As Long, Num As Long
Dim Cl As Integer, equipe As Integer, rencontre As Integer
Dim Alea As Integer, compteur As Integer
Dim Cel As Range, Plage As Range
Tablo = Sheets("Liste").Range("A2:A" & Sheets("Liste").Range("A" & Rows.Count).End(xlUp).Row)
NbJ = UBound(Tablo)
Select Case NbJ Mod 3 ' Reste entier sur la division NbJ/3
Case 0
If (NbJ / 3) Mod 2 > 0 Then ' Nombre équipe impair
Nb3 = (NbJ / 3) - 2
Nb2 = 3
Else
Nb3 = NbJ / 3
Nb2 = 0
End If
Case 1
If ((NbJ \ 3) - 1) Mod 2 = 0 Then ' 1 équipe de 3 en moins = nombre pair
Nb3 = (NbJ \ 3) - 1
Nb2 = 2
Else
Nb3 = (NbJ \ 3) - 3
Nb2 = 5
End If
Case 2
If (NbJ \ 3) Mod 2 = 0 Then ' Nombre équipe de 3 pair
Nb3 = (NbJ \ 3) - 2
Nb2 = 4
Else
Nb3 = (NbJ \ 3)
Nb2 = 1
End If
End Select
NbManche = Sheets("Liste").Range("AK1").Value
' On efface tous les tableaux
For L = 1 To 5
Sheets("P" & L).Range("A4:H12,I4:I12").ClearContents
Next L
Sheets("Liste").Range("C2:Q55").ClearContents
Sheets("Liste").Range("AP2:BD55").ClearContents
nbparticipant = UBound(Tablo, 1)
Randomize
ReDim Preserve Tablo(1 To nbparticipant, 1 To 4)
Autre3:
compteur = 1
For L = 1 To NbManche
Autre2:
Application.EnableEvents = False
' Numérotation aléatoire des joueurs
For I = 1 To nbparticipant
Tablo(I, 2) = Rnd
Next I
' Tri en fonction du numérotage
For I = 1 To UBound(Tablo, 1)
For J = 1 To UBound(Tablo, 1)
If Tablo(I, 2) > Tablo(J, 2) Then
For k = 1 To UBound(Tablo, 2)
temp = Tablo(I, k)
Tablo(I, k) = Tablo(J, k)
Tablo(J, k) = temp
Next k
End If
Next J
Next I
With Sheets("P" & L)
J = 4 ' 1ère ligne
Cl = 1
Num = 0
equipe = 1
rencontre = 1
For I = 1 To Nb3 ' Pour toutes les triplettes
For k = 0 To 2 ' Pour 3 joueurs
Num = Num + 1 ' Indice dans le tableau : Tablo
.Cells(J, Cl) = Tablo(Num, 1)
Cl = Cl + 1
Tablo(Num, 3) = equipe
Tablo(Num, 4) = rencontre
If Num Mod 3 = 0 Then
equipe = equipe + 1
If equipe Mod 2 = 1 Then
rencontre = rencontre + 1
End If
End If
If Cl = 7 Then
Cl = 1
J = J + 1
End If
Next k
Next I
For I = 1 To Nb2 ' Pour toutes les doublettes
For k = 0 To 1 ' Pour 2 joueurs
Num = Num + 1 ' Indice dans le tableau : Tablo
.Cells(J, Cl) = Tablo(Num, 1)
Cl = Cl + 1
Tablo(Num, 3) = equipe
Tablo(Num, 4) = rencontre
If (Num - (Nb3 * 3)) Mod 2 = 0 Then
equipe = equipe + 1
If equipe Mod 2 = 1 Then
rencontre = rencontre + 1
End If
End If
If Cl = 3 Then
Cl = 4
ElseIf Cl = 6 Then
Cl = 1
J = J + 1
End If
Next k
Next I
If nbparticipant > Sheets("Liste").Range("AK2").Value Then
'rempli le tableau "associés" pour plus de
For I = 1 To nbparticipant
For X = 1 To nbparticipant
If Tablo(I, 3) = Tablo(X, 3) And I <> X Then
If Sheets("Liste").Cells(Application.Match(Tablo(I, 1), Sheets("Liste").Range("A1:A55"), 0), 1 + 3 * L).Value = "" Then
k = Application.Match(Tablo(I, 1), Sheets("Liste").Range("A1:A55"), 0)
Sheets("Liste").Cells(k, 1 + 3 * L).Value = Tablo(X, 1)
Else
Sheets("Liste").Cells(k, 2 + 3 * L).Value = Tablo(X, 1)
End If
End If
Next X
Next I
'rempli le tableau "adversaires" pour plus de x participants - x étant renseigné dans la cellule [AK2] de la feuille fiche
For I = 1 To nbparticipant
For X = 1 To nbparticipant
If Tablo(I, 3) <> Tablo(X, 3) And Tablo(I, 4) = Tablo(X, 4) And Tablo(I, 4) <> "" And Tablo(X, 4) <> "" And I <> X Then
k = Application.Match(Tablo(I, 1), Sheets("Liste").Range("A1:A55"), 0)
If Sheets("Liste").Cells(k, 39 + 3 * L).Value = "" Then
Sheets("Liste").Cells(k, 39 + 3 * L).Value = Tablo(X, 1)
Else
If Sheets("Liste").Cells(k, 40 + 3 * L).Value = "" Then
Sheets("Liste").Cells(k, 40 + 3 * L).Value = Tablo(X, 1)
Else
Sheets("Liste").Cells(k, 41 + 3 * L).Value = Tablo(X, 1)
End If
End If
End If
Next X
Next I
' test pour vérifier si doublon
For I = 1 To nbparticipant
If Sheets("Liste").Cells(I + 1, 18).Value > 0 Or Sheets("Liste").Cells(I + 1, 57).Value > 0 Then
If compteur < 5000 Then
compteur = compteur + 1
Select Case L
Case 1: Sheets("Liste").Range("D2:E55").ClearContents: Sheets("Liste").Range("AP2:AR55").ClearContents
Case 2: Sheets("Liste").Range("G2:H55").ClearContents: Sheets("Liste").Range("AS2:AU55").ClearContents
Case 3: Sheets("Liste").Range("J2:K55").ClearContents: Sheets("Liste").Range("AV2:AX55").ClearContents
Case 4: Sheets("Liste").Range("M2:N55").ClearContents: Sheets("Liste").Range("AY2:BA55").ClearContents
Case 5: Sheets("Liste").Range("P2:Q55").ClearContents: Sheets("Liste").Range("BB2:BD55").ClearContents
End Select
GoTo Autre2
Else
Sheets("Liste").Range("D2:Q55").ClearContents
Sheets("Liste").Range("AP2:BD55").ClearContents
GoTo Autre3
End If
End If
Next I
End If
End With
Application.EnableEvents = True
Set Plage = Sheets("P" & L).Range("I4:I" & J - 1)
For Each Cel In Plage
Autre:
Alea = Int(9 * Rnd + 1)
If Application.CountIf(Plage, Alea) Then
GoTo Autre
Else
Cel = Alea
End If
Next Cel
Next L
Application.ScreenUpdating = True
End Sub |