Option Explicit
Sub AttribuerTerrains2èmeTour(pNoTour As Integer)
Const PREMLIG = 4
Dim ColTour As Integer ' colonne F (pour 1er Tour)
Dim ColJoue As Integer ' colonne J (Match gagné ou perdu joueur 2 1er Tour)
Dim ColJoueSuiv As Integer ' colonne L (Match gagné ou perdu joueur 1 2ème Tour)
Dim ColTourSuiv As Integer ' colonne K (n° terrain 2ème Tour)
Dim i As Integer, j As Integer, k As Integer
Dim DerLig As Long, Derlig2 As Long
Dim TabTerrain()
Dim NoTerrain As String
Dim TabNo()
Dim alea
Dim Fin As Boolean, Trouve As Boolean
ColTour = 6 + 5 * (pNoTour - 2)
ColJoue = 10 + 5 * (pNoTour - 2)
ColJoueSuiv = 12 + 5 * (pNoTour - 2)
ColTourSuiv = 11 + 5 * (pNoTour - 2)
DerLig = ActiveSheet.Cells(Rows.Count, ColJoue).End(xlUp).Row
Derlig2 = ActiveSheet.Cells(Rows.Count, ColJoueSuiv).End(xlUp).Row
ReDim TabTerrain(1 To DerLig - PREMLIG + 1)
For i = PREMLIG To DerLig
If Not IsEmpty(Cells(i, ColJoue)) Then
'match joué
NoTerrain = Cells(i, ColTour)
' on regarde si le terrain n'est pas déjà attribué pour le 2ème tour
Trouve = False
For k = PREMLIG To Derlig2
If ActiveSheet.Cells(k, ColTourSuiv) = NoTerrain Then
Trouve = True
Exit For
End If
Next k
If Not Trouve Then
j = j + 1
TabTerrain(j) = NoTerrain
End If
End If
Next i
If j = 0 Then
' terrains tous affectés
MsgBox "Aucun Terrain nouvellement attribué"
Exit Sub
End If
ReDim Preserve TabTerrain(1 To j)
ReDim TabNo(1 To UBound(TabTerrain))
k = 0
For i = LBound(TabTerrain) To UBound(TabTerrain)
If Not IsEmpty(TabTerrain(i)) Then
Fin = False
While Not Fin
Randomize
alea = WorksheetFunction.RandBetween(1, UBound(TabTerrain))
Trouve = False
For j = 1 To k
If TabNo(j) = alea Then
Trouve = True
Exit For
End If
Next j
If Not Trouve Then
k = k + 1
TabNo(k) = alea
Fin = True
End If
Wend
End If
Next
'on affecte le tableau du 2ème groupe
i = 0
For k = PREMLIG To Derlig2
'If ActiveSheet.Cells(k, ColTourSuiv) = "" And Not IsEmpty(Cells(k, ColJoue)) Then
If ActiveSheet.Cells(k, ColTourSuiv) = "" And Cells(k, ColJoueSuiv) <> 0 And Cells(k, ColJoueSuiv).Offset(0, 2) <> 0 Then
i = i + 1
ActiveSheet.Cells(k, ColTourSuiv) = TabTerrain(TabNo(i))
End If
Next k
MsgBox "Les Terrains libres sont réaffectés pour le " & pNoTour & "ème Tour"
End Sub