• Initiateur de la discussion Initiateur de la discussion 2e8b92
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

2e8b92

XLDnaute Nouveau
Bonsoir tout le monde,

sachant que j´ai, au moins, 8 joueuses et 8 joueurs de Tennis, comment faire pour former des double-mixtes avec les règles suivantes?

M1 à M(n) et F1 à F(n)

- chaque joueur ne peut jouer qu´une seule fois avec le même partenaire
- chaque joueur ne peut jouer qu´une seule fois contre le même adversaire

comment modéliser cela en VBA?

Cordialement,
Stéphane
 
Bonsoir.
Voyez si vous pouvez vous inspirer de cette programmation.

Il y a aussi d'autres tirages qui marche sur le même principe et peut être plus adaptés (doublettes pour la pétanque notamment) dans ce second fichier.

Il y a aussi cette fourniture

Tous ces algorithmes marchent sur le même principe: Une procédure récursive qui choisit dans une liste aléatoire fixée par un objet ListeAléat un joueur à ranger (ou une paire si toutes les rencontres possibles doivent avoir lieu), vérifie s'il convient de son point de vue, et si oui s'appelle récursivement pour vérifier que cela permet de faire le reste.
 

Pièces jointes

Dernière édition:
Bonjour,

merci pour votre aide, cependant l´utilisation de l´onglet "2 contre 2" (16 joueurs, 5 manches), génère un tirage au sort sans tenir compte du sexe des joueurs, de plus est-ce normal de ne pas avoir accès au code?

merci par avance
Stéphane
 
en ouvrant le fichier "ListeAléat", je n´ai pas accès directement aux macros, que ce soit dans le menu "Macros / View macros" ou en faisant cliquant droit sur le bouton "tirage", alors que la feuille n´est même pas protégée par un mot de passe.
quoiqu´il en soit, j´ai réussi à trouver la fonction Tirage22OK et je dois avouer que je n´y comprend pas grand-chose.
Auriez-vous du temps afin de me l´expliquer? Merci par avance

Function Tirage22OK(ByVal JMax As Long, ByVal Tours As Long, TClub(), TMarg()) As Boolean
Dim X As Long, J As Long, A As Long, M As Long
UFmVisu.DescConfig JMax & " joueurs " & Tours & " tours."
MMax = Tours: LMax = (JMax - 2) \ 4 + 1: NivMax = MMax * LMax - 1
X = XTria(JMax, JMax - 1)
ReDim Tirage(1 To MMax, 1 To LMax, 1 To 4), JoueursManche(1 To MMax), _
DéjàRenc(0 To X), DéjàPart(0 To X), DéjàTêteÀTête(1 To JMax)
If UBound(TClub, 1) >= JMax Then
For J = 2 To JMax: For A = 1 To J - 1
X = XTria(J, A)
If Not IsEmpty(TClub(J, 1)) And Not IsEmpty(TClub(A, 1)) Then
DéjàRenc(X) = TClub(J, 1) = TClub(A, 1): End If
Next A, J: End If
If UBound(TMarg, 1) >= JMax Then
For J = 2 To JMax: For A = 1 To J - 1
X = XTria(J, A)
If Not IsEmpty(TMarg(J, 1)) And Not IsEmpty(TMarg(A, 1)) Then
DéjàPart(X) = TMarg(J, 1) = TMarg(A, 1): End If
Next A, J
For J = 1 To JMax: DéjàTêteÀTête(J) = Not IsEmpty(TMarg(J)): Next J: End If
Randomize
For M = 1 To MMax: Set JoueursManche(M) = New ListeAléat
JoueursManche(M).Init JMax: Next M
If RencTrouvée(0) Then Tirage22OK = True: UFmVisu.Conclure Else UFmVisu.Echec
End Function
 
Bonsoir,

j´ai résolu mon problème en trouvant une solution pour respecter toutes les règles énoncées dans mon 1er message ci-dessus.
Maintenant, j´ai un souci de performance parfoi même mon programme se bloque.
Pourriez-vous m´indiquer ce qui peut être optimisé?

Merci par avance,
Stéphane
 

Pièces jointes

Pour pouvoir vous écrire votre propre procédure de tirage il y a 3 choses à comprendre.
1) — Comment s'utilise un objet ListeAléat. Voir le module de classe de même nom, il est bien documenté.
2) — La pièce centrale est une procédure récursive. Elle s'appelle elle même, entrainant la réservation d'un nouveau jeu de paramètres et de variables locales.
3) — Elle utilise une fonction XTria qui permet de considérer un tableau à une seule dimension comme un tableau triangulaire. Elle calcule son indice réel dans la dimension unique selon deux numéros de joueurs différents spécifiés en ordre quelconque. Sont utilisés de cette façon deux tableaux de Boolean: les paires de joueurs ayant des déjà été partenaires et adversaires.
Pour que les filles et les garçons ne puissent jamais être partenaires entre eux il suffit de dire dans la table triangulaire correspondante qu'il l'ont déjà été avant de commencer le tirage.

Ces techniques participent à obtenir de bonnes performances. On n'utilise que des tableaux VBA, jamais de cellules, sauf au début pour prendre les données (les noms essentiellement) et à la fin pour y stocker les résultats.
 
Dernière édition:
Oh, non. C'est à supprimer entièrement.
Regardez la procédure TestTirage. Elle n'est pas très compliquée.
La Function Tirage22OK ne fournit que des numéros dans un tableau Public nommé Tirage.
Après on en fait facilement ce qu'on veut.

La version avec UFmVisu.

(Pièce jointe supprimée: classeur complété, message suivant)
 
Dernière édition:
tout d´abord merci beaucoup pour votre aide
ensuite, je dois avouer que le code ne fonctionne qu´avec un nombre pair de joueurs. Dans mon cas, je ne connaitrais le nombre de participants que le jour du tournoi (et ajouter une personne fictive ou empêcher quelqu´un de jouer n´est pas mon objectif).
enfin, que ce soit avec mon script ou le votre, il semble clair que 8 femmes et 8 hommes, 5 parties sur 4 terrains, cela n´est mathématiquement pas faisable (j´aimerais bien trouver la formule pour en avoir la certitude).
Donc il me reste la possibilitée de remplacer les arrays par les collections ou les dictionnaires ou bien d´autoriser une personne à jouer plus d´une fois contre le même adversaire.
 
Bonsoir.
Dans le dernier classeur il y avait 11 hommes et 10 femme soit 21 joueurs en tout, donc impaire, et je suis parvenu à les faire se rencontrer en jusqu'à 7 rondes. Mais ça échoue souvent.
8 femmes et 8 hommes en 5 parties sur 4 terrain, si, ça passe ! C'est la configuration que j'avais laissée dans la Feuil1 de test (les numéros allant jusqu'au nombre d'hommes y sont censés les être, les suivants les femmes). Mais ça se présente souvent assez mal pour qu'il faille essayer plusieurs fois.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
1 K
Réponses
6
Affichages
787
Réponses
2
Affichages
771
Réponses
30
Affichages
2 K
Réponses
6
Affichages
736
Réponses
13
Affichages
4 K
Réponses
3
Affichages
978
Réponses
8
Affichages
907
Retour