Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 calendrier compétition

piskely

XLDnaute Junior
Bonjour à tous,

Je sollicite votre concours pour fixer mon problème.
En fait, je veux créer une macro pour établir un calendrier de rencontre.

Cette macro a pour objectif de créer un calendrier de rencontre où une équipe doit rencontrer toutes les autres sauf elle-même.
Cela veut dire que tous les matchs pouvant être effectués en même temps seront regroupés.

Exemple : Pour 4 équipes Equipe1,Equipe2,Equipe3,Equipe4, un tirage possible est :
Rencontres 1 : Equipe1 vs Equipe2 et Equipe3 vs Equipe4
Rencontres 2 : Equipe1 vs Equipe4 et Equipe2 vs Equipe3
Rencontres 3 : Equipe1 vs Equipe3 et Equipe4 vs Equipe2...

j'aai uncode erreur d'exécution "9".
merci d'avance pour lasolution.


VB:
Sub GenererCalendrier()
    
    ' Déclaration des variables
    Dim Equipes As Variant
    Dim nbEquipes As Integer
    Dim nbRencontres As Integer
    Dim Resultats() As String
    Dim i As Integer, j As Integer, k As Integer
    Dim temp As Variant
    
    ' Déclaration des constantes
    Const EQUIPES_RANGE As String = "A1:A6"
    Const CALENDRIER_COL_DEBUT As Integer = 2
    Const CALENDRIER_COL_FIN As Integer = 4
    
    ' Récupération des équipes dans la plage A1:A8
    Equipes = Range(EQUIPES_RANGE).Value
    
    ' Validation du nombre d'équipes
    If UBound(Equipes, 1) Mod 2 <> 0 Then
        MsgBox "Le nombre d'équipes doit être pair."
        Exit Sub
    End If
    
    ' Détermination du nombre d'équipes et de rencontres
    nbEquipes = UBound(Equipes, 1)
    nbRencontres = nbEquipes - 1
    
    ' Mélange des équipes
    For i = 1 To nbEquipes
        j = Int(Rnd() * nbEquipes) + 1
        temp = Equipes(i, 1)
        Equipes(i, 1) = Equipes(j, 1)
        Equipes(j, 1) = temp
    Next i
    
    ' Dimensionnement du tableau de résultats
    ReDim Resultats(1 To nbRencontres, 1 To nbEquipes)
    
    ' Génération du calendrier
    k = 1 ' Numéro de la rencontre
    For i = 1 To nbEquipes - 1
        For j = i + 1 To nbEquipes
            Resultats(k, 1) = "Rencontre " & k
            Resultats(k, i + 1) = Equipes(i, 1) & " vs. " & Equipes(j, 1)
            Resultats(k, j + 1) = Equipes(j, 1) & " vs. " & Equipes(i, 1)
            k = k + 1
        Next j
    Next i
    
    ' Affichage du calendrier dans les colonnes B à D
    Range(Cells(1, CALENDRIER_COL_DEBUT), Cells(nbRencontres, CALENDRIER_COL_FIN)).Value = Resultats
    
End Sub
 

Pièces jointes

  • Programme.xlsm
    20.6 KB · Affichages: 13

vgendron

XLDnaute Barbatruc
Hello

je ne comprend pas ton tableau de résultats
' Dimensionnement du tableau de rŽsultats
ReDim Resultats(1 To nbRencontres, 1 To nbEquipes)

tu as 6 équipes que tu mélanges (ok pourquoi pas==> pour rendre aléatoire l'ordre des matchs ?)

6 équipes, donc 5 rencontres pour Chaque équipe.. (ok. je viens de voir la structure de ton tableau de résultats...)

donc un total de 6*5 rencontres.. il t'en manque dans ton redim
ReDim Resultats(1 To nbEquipes * nbRencontres, 1 To nbEquipes)

ensuite. dans la boucle. j'ai bien l'impression qu'il en manque aussi

à quoi le résultat attendu est censé ressembler?
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Enrichi (BBcode):
    ' Dimensionnement du tableau de résultats
    ReDim Resultats(1 To nbRencontres, 1 To nbEquipes)

    ' Génération du calendrier
    k = 1 ' Numéro de la rencontre
    For i = 1 To nbEquipes - 1
        For j = i + 1 To nbEquipes
            Resultats(k, 1) = "Rencontre " & k
            Resultats(k, i + 1) = Equipes(i, 1) & " vs. " & Equipes(j, 1)
            Resultats(k, j + 1) = Equipes(j, 1) & " vs. " & Equipes(i, 1)
            k = k + 1
        Next j
    Next i
Tu ne peux pas aller jusqu'à nbEquipes+1 puisque tu as dimensionné ton tableau jusqu'à nbqEuipes.


Si je comprends bien, le but est de déterminer la liste complète des combinaisons de 2 parmi x sans remise.
 
Dernière édition:

piskely

XLDnaute Junior
Hello VGENDRON,
au finish je veux avoir un tableau des rencontres en aller-retour selon le nombre d’équipe (Max 8).
 

piskely

XLDnaute Junior
Bonjour,
Voilà TooFatBoy c'est ça l'idée.
Maintenant que faudrait-il corriger à ton avis?
 

Discussions similaires

Réponses
12
Affichages
845
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…