Aide macro tirage aléatoire triangulaire

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 !

haltero70

XLDnaute Nouveau
Bonjour,

J'ai besoin d'aide pour adapter un macro. Je n'ai trouvé la réponse nulle part et mes connaissances VBA sont limitées. J'ai trouvé une macro que j'ai modifier mais je n'arrive pas au résultat souhaité; je m'explique:
Le but est de faire un tirage au sort parmi plusieurs équipes (9/12/15 ou 18 par exemple) et de les répartir par 3 sur différentes journées (de 4 à 7 environ).
Jusque là ça marche, le problème:
conditions: - toutes les équipes doivent participer à toutes les journées.
- journée à 3 équipes obligatoire.
- toutes les équipes doivent se rencontrer au moins une fois (c'est là que je sèche 🙂 )
Ma macro marche pour les journées (colonne) et les lignes (c'est cela que je doit modifier pour que tout le monde se rencontre mais impossible).

Est-ce mathématiquement possible en faisant varier le nombre d'équipe ou le nombre de journée?

Merci pour votre aide,
 

Pièces jointes

Bonsoir.
Juste une petite pièce qui pourrait vous servir:
VB:
Public Function NumVS(ByVal J As Long, ByVal A As Long) As Long
If J > A Then
   NumVS = J * (J - 3) \ 2 + A + 1
ElseIf J < A Then
   NumVS = A * (A - 3) \ 2 + J + 1
Else: NumVS = 0: End If
If NumVS <= 0 Then Err.Raise 9999, , "NumVS(" & J & ", " & A & ") impossible."
End Function
Elle renvoie un nombre unique en fonction de deux numéros J et A (comme Joueur et Adversaire) spécifiés dans n'importe quel ordre.
Elle pourrait vous donner une valeur d'indice vers un tableau d'une dimension As Boolean indiquant si deux numéros se sont déjà rencontrés.
La fonction inverse vous sera sans doute moins utile :
VB:
Public Function Versus(ByVal VS As Long) As Variant()
Dim J As Long, A As Long
A = Int(Sqr(2 * VS - 1.75) + 1.5)
J = VS - A * (A - 3) \ 2 - 1
Versus = Array(J, A)
End Function
 
J'ai essayé en vain de créer un boucle tant que toutes les équipes ne se sont pas rencontrées mais la boucle tourne à l'infinie, j'ai peur que la solution ne soit pas possible. Avec des rencontres par 2, cette condition semble facile à mettre en place mais par 3 c'est vraiment une galère.
 
Bonjour.
Pas pu me servir de l'ordi, depuis lundi.
Je ne procèderais pas ainsi, parce que le tirage aléatoire peut n'avoir laissé, pour les derniers matchs que des joueurs qui se sont déjà rencontrés. Je ferai plutôt une procédure déterminant un seul joueur, et qui s'appelle récursivement pour déterminer le suivant.
Il y a plein d'exemples dans le classeur joint.
 

Pièces jointes

- 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
1
Affichages
219
Réponses
3
Affichages
582
Réponses
15
Affichages
2 K
Réponses
2
Affichages
1 K
  • Question Question
XL 2010 VBA
Réponses
0
Affichages
637
Retour