Sub AleaFoot()
'====== paramétrages modifiables
n = 20 'nombre d'actions de buts dans le match
Dim r& 'rangées
Dim c& 'colonnes
Dim x& ' compteurs de rangées
Dim z1 'nombres de lignes
Dim i As Byte 'compteur
Dim But As Byte 'But marqué par l'une des équipes
Dim E% ' écart au score
Dim VA% 'Valeur équipe A
Dim VB% 'Valeur equipe B
Dim Arbitre% 'Impact de l'arbitre
Dim Motivation% 'Impact de la motivation))
'== Création de 2 variables temporaires
Dim ButsA As Byte 'buts équipe A
Dim ButsB As Byte 'buts équipe B
Dim AleaScore As Byte 'valeur aléatoire
'===== Bloc 1 (récupération de la valeur des équipes)
With ActiveSheet
z = .Cells(65536, 1).End(3).Row
For x = 2 To z
ButsA = 0
ButsB = 0
Arbitre = 50 '(50 = l'arbitre est impartial, < 50 il favorise l'Equipe B, > 50 il favorise l'équipe A)
Motivation = 50 '(50 = motivation égale des 2 équipes, < 50 Equipe B plus motivée, > 50 équipe A plus motivée)
If .Cells(x, 1) = "" Or .Cells(x, 2) = "" Then Exit Sub
VA = CByte(.Cells(x, 1))
VB = CByte(.Cells(x, 2))
'===== Bloc 2 : impact de la motivation (la plus faible équipe est surmotivée)
Select Case CInt(VA) - CInt(VB)
Case Is < O
Motivation = Motivation - Abs((VA - VB) / 2) 'L'équipe A augmente sa motivation
Case Is > O
Motivation = Motivation + Abs((VA - VB) / 2) 'L'équipe B augmente sa motivation
End Select
'====== Bloc 3 : tirage au sort (les aléas du sport !)
For i = 0 To n
AleaScore = Abs(Rnd() * 99 + 1)
But = 0
If AleaScore >= VA And AleaScore >= VB Then But = 0 'pas de but
If AleaScore <= VA And AleaScore <= VB Then But = 0 'pas de but
If AleaScore = VA And AleaScore = VB Then But = 0 'pas de but
If AleaScore <= VA And AleaScore >= VB Then But = 1 'but Equipe A
If AleaScore >= VA And AleaScore <= VB Then But = 2 'but Equipe B
Select Case But
Case 1
If Abs(Rnd() * Motivation + 1) < 40 Then But = 0 'si l'équipe A n'est pas motivée le but est raté
If Abs(Rnd() * Arbitre + 1) < 30 Then But = 0: Arbitre = Arbitre + 1
'l'arbitre annule le but de l'équipe A, il aura ensuite tendance à ne pas refuser un nouveau but
If But > 0 Then ButsA = ButsA + 1
Case 2
If Abs(Rnd() * Motivation + 1) > 60 Then But = 0 'si l'équipe B n'est pas motivée le but est raté
If Abs(Rnd() * Arbitre + 1) > 30 Then But = 0: Arbitre = Arbitre - 1 'l'arbitre annule le but
'l'arbitre annule le but de l'équipe B, il aura ensuite tendance à ne pas refuser un nouveau but
If But > 0 Then ButsB = ButsB + 1
Case Else
Select Case AleaScore
Case Is > 95: ButsA = ButsA + 1 'but pour l'équipe A
Case Is < 5: ButsB = ButsB + 1 'but pour l'équipe B
End Select
End Select
E = CInt(ButsA) - CInt(ButsB)
Select Case E
Case Is = 0: Motivation = Motivation
Case Is = 1: Motivation = Motivation + 2 'l'équipe B se remotive pour égaliser
Case Is = 2: Motivation = Motivation + 4 'l'équipe B tente le tout pour le tout pour revenir au score
Case Is = 3: Motivation = Motivation - 2 'l'équipe B perd de sa motivation
Case Is = 4: Motivation = Motivation - 4 'l'équipe B perd de sa motivation
Case Is = -1: Motivation = Motivation - 2 'l'équipe A se remotive pour égaliser
Case Is = -2: Motivation = Motivation - 4 'l'équipe A tente le tout pour le tout pour revenir au score
Case Is = -3: Motivation = Motivation + 2 'l'équipe A perd de sa motivation
Case Is = -4: Motivation = Motivation + 4 'l'équipe A perd de sa motivation
Case Is < 4: Motivation = Motivation + 7 'l'équipe A est démoralisée
Case Is > 4: Motivation = Motivation - 7 'l'équipe B est démoralisée
End Select
Next i
.Cells(x, 3) = ButsA
.Cells(x, 4) = ButsB
Next x
End With
End Sub