Formule pour tournoi (horaire des matchs)

Gringo

XLDnaute Junior
Bonjour forum,

Je suis en train de me faire un petit fichier pour gérer des tournois à la ronde que je veux faire chez nous. Je bloque présentement pour faire mon horaire par vba. Présentement, je suis capable de faire mon tableau de classement, de déterminer le nb de match à jouer et de déterminer quels sont les matchs à jouer. Par contre, je ne sais pas comment faire un horaire qui a du sens, c'est-à-dire que chaque joueur a des périodes d'attente semblables et ne joue pas tous ses matchs de suite.
Voici mon code:

Sub Tournoialaronde()
Dim Nbjoueurs, Partie, Nbmatch, a, c, i As Integer
Dim VotreNom, Joueur(15) As String

''NETTOYAGE DE LA FEUILLE
Sheets('Tournoi à la ronde').Activate
Cells.Select
Selection.ClearContents
Selection.Interior.ColorIndex = xlNone
Range('B5').Value = 'Nom des joueurs'

''DÉTERMINATION DU NOMBRE DE JOUEURS ET MISE EN PAGE DU TABLEAU PRINCIPAL
Partie = InputBox('Combien de points par partie?')
Nbjoueurs = InputBox(' Combien de joueurs (équipes) participent au tournoi?')
For i = 1 To Nbjoueurs
Range('B50').Select
Selection.End(xlUp).Offset(1, 0).Select
Joueur(i) = InputBox(' Quel est le nom du ' & i & 'e joueur (équipe)?')
ActiveCell.Value = Joueur(i)
ActiveCell.Offset(-i, i).Value = Joueur(i)
Selection.Offset(0, i).Select
With Selection.Interior
.ColorIndex = 1
.Pattern = xlSolid
End With
Next i

''DÉTERMINATION DE L'HORAIRE
c = 0
For i = 1 To Nbjoueurs
c = c + i - 1
Next i
Nbmatch = c
a = 30
For i = 1 To Nbmatch
Cells(a, 1) = 'Match ' & i
a = a + 1
Next i
a = 30
For i = 1 To Nbjoueurs - 1
For j = i + 1 To Nbjoueurs
Cells(a, 2).Value = Joueur(i)
Cells(a, 3).Value = 'vs'
Cells(a, 4).Value = Joueur(j)
a = a + 1
Next j
Next i
End sub

Bref, je voudrais faire un code pour déterminer un horaire qui a de l'allure.

Merci de votre aide.

Gringo
 

Gruick

XLDnaute Accro
Bonjour Gringo,
Très belle macro, un délice.
Le nombre de parties n'est-il pas le nombre de joueurs multiplié par 2, ce qui éviterait ce c ?
J'ai réfléchi à ton cas, qui est plus un problème d'algorythme que d'informatique. Malheureusement, à part l'oeil et la main, outils perfectionnés...
J'ai fait un essai avec 5 joueurs, c'est déjà compliqué.

Y a-t-il un matheux dans le forum ?

Je poursuis mais sans garantie...
A plus
Gruick
 

Gringo

XLDnaute Junior
Bonjour forum, Gruick,

Merci pour le compliment Gruick. Je n'ai toujours pas réussi à résoudre mon problème... Il y a sûrement un algorithme qui existe quelque part et je le cherche ardemment, mais ne trouve pas pour l'instant.
Si vous pouvez m'aider, ce serait très apprécié.

Merci,

Gringo
 

Gruick

XLDnaute Accro
Bonjour Gringo,
Je crois que j'ai trouvé un truc.(vu que j'ai fait une fôte d'hortograffe à Algorithme, emporté par le rythme)

Explication :
Soit 5 joueurs, A, B, C, D, E.
A rencontre B
C rencontre D
E rencontre A
B rencontre C
D rencontre E
puis un décalage de 2
A rencontre C
B rencontre D
C rencontre E
D rencontre A
E rencontre B
simplissime à comprendre. Mais pour plus d'adversaires ça se corse. Décalages de 3, de 4...
Faire attention aux doublons (A contre D = D contre A).
Aussi, je me suis délecté à faire cette petite macro, que voici, que voilà. Pas évident.
hiatus cependant sur les nombres de joueurs pairs.
Fonctionne à partir de 4 joueurs.
A adapter, perfectionner à ta guise.
Tiens moi au courant. C'est rare un bon sujet, et un bon programme. [file name=Ronde.zip size=17950]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Ronde.zip[/file]
 

Pièces jointes

  • Ronde.zip
    17.5 KB · Affichages: 210

Gruick

XLDnaute Accro
Bonjour Gringo,
Content de te lire. Voici une 2e moûture de la macro, plus élaborée et moins encombrante. Elle marche même avec 3 adversaires.
On ne peut plus rien joindre, même des codes, alors, copier-coller.
les signes inf et sup et diff ne passent pas dans les messages, alors je les ai mis en toutes lettres.

Sub Ronde()
' Ronde Macro
' Macro enregistrée le 15/06/06 par Gruick
' Touche de raccourci du clavier: Option+Cmd+r
Range('C1:IV17,A20:D65536').ClearContents
der = Range('A1').End(xlDown)
joueurs = Range('A1').End(xlDown).Row
parties = joueurs * (joueurs - 1) * 0.5
'MsgBox 'joueurs = ' & joueurs & Chr$(13) & 'parties = ' & parties & Chr$(13) & 'pas = ' & pas
For a = 20 To parties + 19
Cells(a, 1) = 'Match ' & a - 19: Cells(a, 3).Value = 'vs'
Next a
a = 20
For t = 1 To joueurs - 2
For i = 1 To joueurs
'Cells(i, 1).Select 'inutile, juste pour vérif pas à pas
If i Mod joueurs DIFFERENT DE 0 Then Cells(a, 2).Value = Cells(i Mod (joueurs), 1)
If i Mod joueurs = 0 Then Cells(a, 2).Value = Cells(i, 1)
Cells(a, 4).Value = Cells(i Mod (joueurs) + t, 1)
If t = 1 Then
i = i + 1
If i = joueurs Then i = 1
If i PLUS GRAND QUE joueurs And joueurs Mod 2 = 1 Then i = 1
End If
a = a + 1
If t = 1 And Cells(a - 1, 4) = der And joueurs Mod 2 = 1 Then Exit For
If t > 1 And Cells(a - 1, 4) = der Then Exit For
Next i
Next t
End Sub

A bientôt j'espère.
Gruick
 

Gringo

XLDnaute Junior
Salut Gruick,

Content de voir que tu en as rajouté. J'ai essayé d'intégrer ton code à ma macro hier et j'ai eu quelques problèmes... Pour certains nombres d'équipes, il n'y avait pas tous les matchs sur la cédule. Par exemple, avec 5 joueurs, il manquait un match, mais avec 6 c'était correct.
Je vais essayer avec ta nouvelle macro et je t'en redonne des nouvelles.

Autre question, le raccourci Option+Cmd+5, je n'arrive pas à le faire. Je ne connais pas les touches auxquelles tu fais référence... Est-ce que tu pourrais m'expliquer svp?

Merci encore!

Gringo

Message édité par: Gringo, à: 20/06/2006 17:19
 

Gringo

XLDnaute Junior
Resalut Gruick, le forum,

J'ai essayé les modifications que tu avais apportées à ta macro et pour une raison qui m'est inconnue, j'arrive à faire fonctionner ta macro dans un fichier où elle est seule mais lorsque je l'intègre à mon code, ca ne fonctionne pas pour certains nombres d'équipe. Je vais vérifier le tout et je te reviens.

Bonne journée,


Gringo
 

Gringo

XLDnaute Junior
Salut Gruick, le forum,

J'ai enfin trouvé un code qui marche. J'ai dû faire la concession que les joueurs n'auront pas tous un horaire équilibré mais c'est quand même très bien. Je te le fournis étant donné que tu as démontré un certain intérêt à ce que je faisais. Merci pour ton aide!
Voici mon code:

Partie = InputBox('Combien de points par partie?')
Nbjoueurs = InputBox(' Combien de joueurs (équipes) participent au tournoi?')
c = 1
For i = 1 To Nbjoueurs
Range('B50').Select
Selection.End(xlUp).Offset(1, 0).Select
Joueur(i) = InputBox(' Quel est le nom du ' & i & 'e joueur (équipe)?')
ActiveCell.Value = Joueur(i)
ActiveCell.Offset(-i, i).Value = Joueur(i)
Selection.Offset(0, i).Select
With Selection.Interior
.ColorIndex = 1
.Pattern = xlSolid
End With
Next i

''DÉTERMINATION DE L'HORAIRE

last = Range('B6').End(xlDown)
Nbmatch = Nbjoueurs * (Nbjoueurs - 1) * 0.5

For j = 30 To Nbmatch + 29
Cells(j, 1) = 'Match ' & j - 29: Cells(j, 3).Value = 'vs'
Next j

j = 0
c = 6
i = 30
Do While i PLUS GRANG QUE Nbjoueurs + 5 Then
Cells(i, 4).Value = Cells(c - Nbjoueurs + j + 1, 2).Value ''retour à la première équipe
Else
Cells(i, 4).Value = Cells(c + j + 1, 2).Value
End If
c = c + 1
i = i + 1
Loop

Bonne fin de journée

Gringo

Message édité par: Gringo, à: 20/06/2006 21:03
 

Gruick

XLDnaute Accro
Bonjour Gringo.
J'avais oublié de te mentionner que j'étais parti de la feuille blanche, m'intéressant à l'algorithme. Mes adversaires sont dans la colonne A,
Donc sans relation avec ton programme.
J'ai passé l'étape de désignation des joueurs et du superbe tableau qui en découle, pour me consacrer uniquement à l'objet du problème.
Mes macros marchent parfaitement tant sur PC que sur Mac. C'est sur ce dernier que je l'ai conçue.
Donc cmd option S (esse) se transforme sur PC en Control S, mais faut lui dire dans macro options..., vu que tu as du faire copier coller pour transférer la macro.
Je t'envoie le fichier si tu me confies ton adresse internet. (utilises la boîte aux lettres privée du forum si tu veux).
Je viens de regarder ton programme, l'ai copié, mais quelques instructions sont à revoir.

Do While i PLUS GRANG QUE Nbjoueurs + 5 Then, par exemple, le then et le do sont antinomiques. Je n'ai que XL 2000, c'est peut être une instruction postérieure.
le end if qui suit n'a pas de if.

Bon, si ça marche chez toi, tant mieux, c'était le but cherché...
A Plus si tu veux
Gruick
 

LABEHAUT

XLDnaute Junior
Re : Re:Formule pour tournoi (horaire des matchs)

Bonjour Gruick,

voilà je viens de récupérer ton fichier ronde, pour moi faire mes feuilles à donner au arbitre pour les match mais voilà je n'arrive pas changer la macro, car la copy se fait en C1 et pour 4 équipes et 6 équipes il m'enleve une cellule voir fichier joint si tu pourrais me changer pour copier plus loin les matchs en cellule P1 par exemple en dehors des champs.
 

Pièces jointes

  • Feuil Abritre.xlsm
    23.3 KB · Affichages: 58

Discussions similaires