IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Gestion tournoi : tirage au sort équipe + gestion tournoi [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Par défaut Gestion tournoi : tirage au sort équipe + gestion tournoi
    Bonsoir à tous.

    Avant de commencer, je tenais à vous dire que j'ai recherché longuement sur internet une solution à mon problème mais je n'ai pas tout compris aux exemples proposés. J'ai fait un peu de programmation sous excel en DUT (il y a quelques années) mais je ne me souviens plus très bien des syntaxes etc... Je sais toujours programmer en c de petits programmes (je sais qu'il y a quand même quelques similitudes)

    Mon problème est le suivant :

    Ce vendredi, j'organise un tournoi FIFA 12 (jeu de foot). Je dois donc :

    - Classer 8 joueurs en 4 équipes de 2, de façon aléatoire

    - Associer un club à ces 4 équipes, parmi une liste de 16 clubs prédéfinie (on pourra avoir deux chances pour choisir un club si on est pas convaincu par le premier) Il faudrait éviter la redondance

    - Tirer le calendrier des matchs, sur une base de mini-championnat avec matchs aller-retour

    - Gérer le classement de façon automatique, en rentrant simplement les scores au fur et à mesure

    - Pouvoir gérer un classement des buteurs (bonus)




    J'ai découvert la fonction "ALEA()" qui permet de choisir un nombre en 0 et 1. Bien qu'il n'y ai pas de règle "anti-redondance", le fait de ne pas arrondir, et donc d'avoir plusieurs chiffres après la virgule, me permet d'obtenir des chiffres qui ne sont pas identiques. Je pensais :

    - Dresser ma liste de joueurs dans une colonne (A1 à A8)
    - Mettre la fonction "ALEA()" dans une autre colonne (B1 à B8) afin d'obtenir 8 chiffres, chaque chiffre étant associé à un prénom
    - Classer ces chiffres obtenus (peu importre l'ordre) dans la colonne C, j'aurais alors les chiffres 1, 2, 3, 4, 5, 6, 7, 8 associés à chaque joueur
    - Je décide ensuite que l'équipe 1 est composée des joueurs 1 et 2, l'équipe 2 composée des joueurs 3 et 4...

    De cette façon, le tirage sera complètement aléatoire non ? Pour classer les nombres, je dois utiliser la fonction "RANG()" ?

    Comment procéder pour la suite ?

    Dans l'idéal, j'aurais un bouton associé à la fonction "tirage" qui me sélectionnerai mes équipes.

    D'avance merci

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132

  3. #3
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    Une piste pour le tirage au sort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Sub Macro1()
        Dim NbRows
        Dim NbCols
        Dim NbTirages
        Dim Msg
        Dim MyValue
     
        ' Positionnement en A1
        Range("A1").Select
        ' Sélection du tableau
        Selection.CurrentRegion.Select
        ' Récupération du nombre de lignes et de colonnes
        NbRows = Selection.Rows.Count
        NbCols = Selection.Columns.Count
        NbTirages = "X"
        If NbRows > 0 Then
            ' Boucle tant que la valeur saisie n'est pas valide
            Do While Not IsNumeric(NbTirages)
                NbTirages = InputBox("Entrez un nombre compris entre 1 et " & Str(NbRows), "Tirage aléatoire")
                If NbTirages = "" Then
                    ' L'utiliser a cliqué sur Annuler
                    End
                ElseIf Not IsNumeric(NbTirages) Then
                    ' La saisie n'est pas numérique
                    Msg = MsgBox("Entrez un nombre valide.", vbOKOnly, "Tirage aléatoire")
                    NbTirages = ""
                ElseIf CInt(NbTirages) = 0 Or CInt(NbTirages) > NbRows Then
                    ' Le nombre dépasse le nombre de lignes
                    Msg = MsgBox("Entrez un nombre compris entre 1 et " & Str(NbRows) & ".", vbOKOnly, "Tirage aléatoire")
                    NbTirages = ""
                End If
            Loop
            ' Tirage au sort
            i = 0
            Do While i < CInt(NbTirages)
                ' Tirage d'un numéro compris entre 1 et le nombre de colonnes
                Randomize
                MyValue = Int((NbRows * Rnd) + 1)
                ' Positionnement sur la première colonne vide de la ligne aléatoire
                Range(Chr(65 + NbCols) & MyValue).Select
                If Trim(Range(Chr(65 + NbCols) & MyValue).Value) = "*" Then
                    ' La ligne est déjà sélectionnée
                    'NbTirages = NbTirages + 1
                Else
                    ' Marquer la ligne comme sélectionnée
                    Range(Chr(65 + NbCols) & MyValue).Value = "*"
                    i = i + 1
                End If
            Loop
            Msg = MsgBox("Tirage terminé.", vbInformation, "Tirage aléatoire")
        End If
        End
    End Sub

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Par défaut
    Merci pour vos réponses !

    @kiki29 : je vais regarder le lien de près

    @pc75 : ouch ! Je vais essayer de décortiquer le code pour le comprendre. Je ne sais même plus créer un bouton et y associer un code ^^ J'ai posé quelques question (en vert) pourrais-tu y répondre ?

    Merci, vraiment !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Sub Macro1()
        Dim NbRows//on déclare ici toutes nos variables ?
        Dim NbCols
        Dim NbTirages
        Dim Msg
        Dim MyValue
     
        ' Positionnement en A1
        Range("A1").Select //Ca veut dire que l'on va "ranger" nos valeurs en A1 ? ?
        ' Sélection du tableau //Quel tableau ? Mon tableau de joueurs pour tirer les équipes ? Cela veut dire que mon premier joueur doit être en A1, le suivant en A2.. ?
        Selection.CurrentRegion.Select
        ' Récupération du nombre de lignes et de colonnes
        NbRows = Selection.Rows.Count //Pourquoi récupérer plusieurs colonnes ? Mon tableau de joueurs ne comprends qu'une seule colonne ?Ou alors c'est pour récupérer le tableau des joueurs ET des équipes disponibles, dans ce cas mes équipes sont en B1:B16 ?
        NbCols = Selection.Columns.Count
        NbTirages = "X"//Pas compris
        If NbRows > 0 Then //Alors là je ne comprends plus, on propose quand à l'utilisateur de rentrer un nombre ?
            ' Boucle tant que la valeur saisie n'est pas valide
            Do While Not IsNumeric(NbTirages)
                NbTirages = InputBox("Entrez un nombre compris entre 1 et " & Str(NbRows), "Tirage aléatoire")
                If NbTirages = "" Then
                    ' L'utiliser a cliqué sur Annuler
                    End
                ElseIf Not IsNumeric(NbTirages) Then
                    ' La saisie n'est pas numérique
                    Msg = MsgBox("Entrez un nombre valide.", vbOKOnly, "Tirage aléatoire")
                    NbTirages = ""
                ElseIf CInt(NbTirages) = 0 Or CInt(NbTirages) > NbRows Then
                    ' Le nombre dépasse le nombre de lignes
                    Msg = MsgBox("Entrez un nombre compris entre 1 et " & Str(NbRows) & ".", vbOKOnly, "Tirage aléatoire")
                    NbTirages = ""
                End If
            Loop
            ' Tirage au sort
            i = 0
            Do While i < CInt(NbTirages)
                ' Tirage d'un numéro compris entre 1 et le nombre de colonnes
                Randomize
                MyValue = Int((NbRows * Rnd) + 1)
                ' Positionnement sur la première colonne vide de la ligne aléatoire
                Range(Chr(65 + NbCols) & MyValue).Select
                If Trim(Range(Chr(65 + NbCols) & MyValue).Value) = "*" Then
                    ' La ligne est déjà sélectionnée
                    'NbTirages = NbTirages + 1
                Else
                    ' Marquer la ligne comme sélectionnée
                    Range(Chr(65 + NbCols) & MyValue).Value = "*"
                    i = i + 1
                End If
            Loop
            Msg = MsgBox("Tirage terminé.", vbInformation, "Tirage aléatoire")
        End If
        End
    End Sub

  5. #5
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub Macro1()
        Dim NbRows//on déclare ici toutes nos variables ? => OUI
        Dim NbCols
        Dim NbTirages
        Dim Msg
        Dim MyValue
     
        ' Positionnement en A1
        Range("A1").Select //Ca veut dire que l'on va "ranger" nos valeurs en A1 ? ? => On se positionne en A1 (Commentaire sur la ligne précédente)
        ' Sélection du tableau //Quel tableau ? Mon tableau de joueurs pour tirer les équipes ? Cela veut dire que mon premier joueur doit être en A1, le suivant en A2.. ? => OUI
        Selection.CurrentRegion.Select
        ' Récupération du nombre de lignes et de colonnes
        NbRows = Selection.Rows.Count //Pourquoi récupérer plusieurs colonnes ? Mon tableau de joueurs ne comprends qu'une seule colonne ?Ou alors c'est pour récupérer le tableau des joueurs ET des équipes disponibles, dans ce cas mes équipes sont en B1:B16 ? => Pour marquer avec le caractère "*" les joueurs tirés au hasard dans la prernière colonne vide à droite
        NbCols = Selection.Columns.Count
        NbTirages = "X"//Pas compris => A priori, tu peux supprimer
        If NbRows > 0 Then //Alors là je ne comprends plus, on propose quand à l'utilisateur de rentrer un nombre ? => 3 lignes plus bas
            ' Boucle tant que la valeur saisie n'est pas valide
            Do While Not IsNumeric(NbTirages)
                NbTirages = InputBox("Entrez un nombre compris entre 1 et " & Str(NbRows), "Tirage aléatoire")
                If NbTirages = "" Then
                    ' L'utiliser a cliqué sur Annuler
                    End
                ElseIf Not IsNumeric(NbTirages) Then
                    ' La saisie n'est pas numérique
                    Msg = MsgBox("Entrez un nombre valide.", vbOKOnly, "Tirage aléatoire")
                    NbTirages = ""
                ElseIf CInt(NbTirages) = 0 Or CInt(NbTirages) > NbRows Then
                    ' Le nombre dépasse le nombre de lignes
                    Msg = MsgBox("Entrez un nombre compris entre 1 et " & Str(NbRows) & ".", vbOKOnly, "Tirage aléatoire")
                    NbTirages = ""
                End If
            Loop
            ' Tirage au sort
            i = 0
            Do While i < CInt(NbTirages)
                ' Tirage d'un numéro compris entre 1 et le nombre de colonnes
                Randomize
                MyValue = Int((NbRows * Rnd) + 1)
                ' Positionnement sur la première colonne vide de la ligne aléatoire
                Range(Chr(65 + NbCols) & MyValue).Select
                If Trim(Range(Chr(65 + NbCols) & MyValue).Value) = "*" Then
                    ' La ligne est déjà sélectionnée
                    'NbTirages = NbTirages + 1
                Else
                    ' Marquer la ligne comme sélectionnée
                    Range(Chr(65 + NbCols) & MyValue).Value = "*"
                    i = i + 1
                End If
            Loop
            Msg = MsgBox("Tirage terminé.", vbInformation, "Tirage aléatoire")
        End If
        End
    End Sub

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Je me suis amusé à faire un petit fichier qui te fait ça sans VBA.

    Mode d'emploi :

    Onglet "Equipes" : On rentre les noms des 8 joueurs et on copie une série aléatoire de 8 (pour cela on se rend sur l'onglet "Génération alea distinct", on met le nombre d'éléments à 8 et copie la liste en bleu, et on colle le résultat en valeur - Edition / Collage Spécial... / Valeur).

    Onglet "Clubs" : On entre la liste des 16 clubs disponibles et on copie une série aléatoire de 16 (cf explication précédente en remplaçant 8 par 16).

    Onglet "Calendrier" : On copie juste une série aléatoire de 12.

    Il n'y a plus qu'à se rendre dans l'onglet "Tableau" et à rentrer les scores au fur et à mesure.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Logiciel gratuit et simple pour gestion et suivi de son équipe
    Par wannaberelax dans le forum Autres Solutions d'entreprise
    Réponses: 4
    Dernier message: 30/06/2013, 19h53
  2. Réponses: 3
    Dernier message: 16/07/2010, 14h30
  3. Tirage au sort pour un tournoi de belote
    Par aldom dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/06/2007, 20h43
  4. Gestion des versions travail en équipe
    Par yanis97 dans le forum WinDev
    Réponses: 1
    Dernier message: 05/10/2004, 21h18
  5. Gestion OnChange sur une sorte d'éditeur de propriétés
    Par Clorish dans le forum Composants VCL
    Réponses: 8
    Dernier message: 29/09/2004, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo