Score aleatoire tennis
Bonjour à tous,
J'aimerai générer des scores de tennis aléatoirement par une macro.
Ces matches se dérouleraient en 3 sets gagnants comme dans l'exemple.
Le nombre de matches à tirer peut varier.
En parcourant le net je suis tombé sur un programme en langage Python. Je l'ai mis en copie sur le fichier.
Si quelqu'un sait le transcrire en vba il est le bienvenu !
Merci.
Salut garfield,
C'est en effet possible de créer ce que tu veux. Je t'invite à te pencher sur le code ci-dessous pour générer des nombre aléatoire. En sachant que si tu veux un nombre aléatoire entre 1 et 10 par exemple, il te suffit de remplacer le 50 par 10.
Il ne te reste plus qu'à créer une petite fonction pour ton match de tennis !
Sub aleatoire()
'Initialiser le générateur de nombres aléatoires
'=> Randomize : à ajouter avant d'utiliser Rnd pour obtenir des valeurs complètement aléatoires
Randomize
'Nombre aléatoire entier entre 1 et 50 :
nombre_aleatoire = Int(50* Rnd) + 1
MsgBox nombre_aleatoire
End SubCordialement,
Baboutz
Salut h2so4,
Propre ! Je ne suis pas aussi doué que toi en vba, tu as fait ça assez rapidement
Que veut dire Dim ctr(1 To 2) ? Je ne comprend par surtout le (1 To 2) !
bonjour,
Que veut dire Dim ctr(1 To 2) ? Je ne comprend par surtout le (1 To 2) !
on définit un tableau nommé ctr, à 2 éléments, le premier commence à l'indice 1, le dernier se termine à l'indice 2.
code commenté
Option Explicit
Sub genere_score()
'genere des scores aléatoires pour des matches de tennis
Dim compteur_sets_gagnants&(1 To 2) 'compteur_sets_gagnants de sets gagnés par le joueur 1 et le joueur 2
Dim nombre_de_matches&, numero_de_ligne&, numero_de_match&, numero_de_set&, joueur_gagnant&, joueur_perdant&, Nombre_de_jeux_du_gagnant& 'long
Randomize Timer 'initianumero_de_lignesation du générateur aléatoire
nombre_de_matches = Range("B1") 'nombre de matches pour lesquels générer un score, cellule B1 de la feuille active
Range("A2:F1000").Clear 'on efface les scores existants
numero_de_ligne = 0
For numero_de_match = 1 To nombre_de_matches
numero_de_set = 1 'on joue le premier set
numero_de_ligne = numero_de_ligne + 3 '
Erase compteur_sets_gagnants
Do
'on tire au sort le gagnant du set et on en déduit le perdant
joueur_gagnant = Application.RandBetween(1, 2)
joueur_perdant = IIf(joueur_gagnant = 1, 2, 1)
'on determine le nombre de jeux du gagnant pour ce set
Nombre_de_jeux_du_gagnant = IIf(Rnd() > 0.8, 7, 6) 'probabilité de 80% de gagner en 6 jeux
Cells(numero_de_ligne + joueur_gagnant, numero_de_set) = Nombre_de_jeux_du_gagnant
If Nombre_de_jeux_du_gagnant = 7 Then
' si gagnant en 7 jeux, perdant a perdu en 5 jeux
Cells(numero_de_ligne + joueur_perdant, numero_de_set) = 5
Else
'si gagnant en 6 jeux, on tire au hasard (entre 0 et 4) le nombre de jeux du perdant
Cells(numero_de_ligne + joueur_perdant, numero_de_set) = Application.RandBetween(0, 4)
End If
'on ajoute 1 set gagnant au compteur du joueur gagnant
compteur_sets_gagnants(joueur_gagnant) = compteur_sets_gagnants(joueur_gagnant) + 1
If compteur_sets_gagnants(joueur_gagnant) = 3 Then
'si 3 sets gagnés par le joueur gagnant du set, le match est terminé
Exit Do
Else
' sinon on passe au set suivant
numero_de_set = numero_de_set + 1
End If
Loop
Next numero_de_match
End SubMerci beaucoup pour le code commenté ! Cela va me permettre de mieux comprendre !
Je tiens à rajouter mon grain de sel mais un set peut être gagné au tie-break donc à 7-6 !
Et les matchs en 3 sets gagnants (uniquement pour les hommes dans la compétition pro) ne se déroule que lors de tournois du grand Chelem. Hors les règles sont différentes entre les tournois : dans la manche décisive (5ème set donc), l'US Open implique un tie-break à 6-6, Wimbledon implique un tie-break à 12-12 tandis que Roland Garros et l'Open d'Australie implique deux jeux d'écarts pour terminer le match, pouvant donner des matchs comme Isner-Mahut terminant à 6/4, 3/6, 6/7, 7/6, 70/68 (Même si c'était un match à Wimbledon avant la règle du tie-break à 12-12).
Donc reste à garfield de nous éclairer sur ce qu'il veut
Code avec l'option tie-break sur n'importe quel set (et donc de gagner le set 7-6)
Option Explicit
Sub genere_score()
'genere des scores aléatoires pour des matches de tennis
Dim compteur_sets_gagnants&(1 To 2) 'compteur_sets_gagnants de sets gagnés par le joueur 1 et le joueur 2
Dim nombre_de_matches&, numero_de_ligne&, numero_de_match&, numero_de_set&, joueur_gagnant&, joueur_perdant&, Nombre_de_jeux_du_gagnant& 'long
Randomize Timer 'initianumero_de_lignesation du générateur aléatoire
nombre_de_matches = Range("B1") 'nombre de matches pour lesquels générer un score, cellule B1 de la feuille active
Range("A2:F1000").Clear 'on efface les scores existants
numero_de_ligne = 0
For numero_de_match = 1 To nombre_de_matches
numero_de_set = 1 'on joue le premier set
numero_de_ligne = numero_de_ligne + 3 '
Erase compteur_sets_gagnants
Do
'on tire au sort le gagnant du set et on en déduit le perdant
joueur_gagnant = Application.RandBetween(1, 2)
joueur_perdant = IIf(joueur_gagnant = 1, 2, 1)
'on determine le nombre de jeux du gagnant pour ce set
Nombre_de_jeux_du_gagnant = IIf(Rnd() > 0.8, 7, 6) 'probabilité de 80% de gagner en 6 jeux
Cells(numero_de_ligne + joueur_gagnant, numero_de_set) = Nombre_de_jeux_du_gagnant
If Nombre_de_jeux_du_gagnant = 7 Then
' si gagnant en 7 jeux, perdant a perdu en 5 jeux
Cells(numero_de_ligne + joueur_perdant, numero_de_set) = Application.RandBetween(5, 6)
Else
'si gagnant en 6 jeux, on tire au hasard (entre 0 et 4) le nombre de jeux du perdant
Cells(numero_de_ligne + joueur_perdant, numero_de_set) = Application.RandBetween(0, 4)
End If
'on ajoute 1 set gagnant au compteur du joueur gagnant
compteur_sets_gagnants(joueur_gagnant) = compteur_sets_gagnants(joueur_gagnant) + 1
If compteur_sets_gagnants(joueur_gagnant) = 3 Then
'si 3 sets gagnés par le joueur gagnant du set, le match est terminé
Exit Do
Else
' sinon on passe au set suivant
numero_de_set = numero_de_set + 1
End If
Loop
Next numero_de_match
End SubMerci beaucoup à Baboutz et h2so4.
C'est exactement ce que je recherchais.
Simplement je voudrais que les scores se mettent en C5 au lieu de A5 pour commencer.
Qu'est ce qu'il faut modifier ?
Merci.
Bonjour,
Je viens de tester la dernière version. C'est tout à fait ce que je désirais.
Encore un grand merci à h2so4 et à baboutz pour leur dévouement.