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.

65score-tennis.xlsm (9.33 Ko)

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 Sub

Cordialement,

Baboutz

Bonjour,

une proposition

86score-tennis.xlsm (17.51 Ko)

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 Sub

Merci 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 Sub

Merci 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.

bonsoir,

une proposition d'adaptation

43score-tennis.xlsm (19.47 Ko)

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.

Rechercher des sujets similaires à "score aleatoire tennis"