Cédule
Bonjours j'aimerai programmé excel pour faire une cédule de rencontre de billard a 18 joueur pour jouer avec chaque jouer différent a chaque semaine il y a 9 équipe de 2 joueur mais je n'y arrive pas cela se fait t'il de programmé excel pour qu'il programme seul des chiffre différent aléatoire sans revenir au même bien sur il va falloir recommencer 18 jouer donc 17 rencontre différente je crois voici un exemple de la cédule
Merci
Bonjour à toi,
Je ne saisi pas très bien le principe (et en plus je n'y connais pas grand chose en billard), si je comprends bien :
Donc chaque joueur de chaque équipe jouera seul contre un autre joueur ? Jouera-t-il contre le joueur de sa propre équipe ? Une fois que j'aurai ces informations je ferais mon possible pour t'aider.
Cordialement,
Bonjour Chbouli04
Chaque équipe rencontre les huit autre équipe ex 1et 2 rencontre 3 et 4, 5 et 6, 7 et 8, jusqu'a avoir rencontré toute les équipes
chaque semaine les équipes change ex. 1 est avec 3 après 1 et 4 , 1 et 5 mais chaque équipe doit être forme d'un joueur différent a chaque semaine comme il y a 18 joueur la cédule devrais duré 17 semaine je crois il devrais y avoir 9 équipe différente a chaque semaine
est-ce plus clair chaque joueur devra faire équipe avec les 17 autre joueur.
si tu a des question je vais y répondre
Merci
Bonjour,
Voilà un essai pour la constitution des équipes et leur répartition par journée. Pour 18 joueurs répartis en équipe de 2, il y aura 9 équipes par journée. Et il faut 17 journées pour que chacun ait pu jouer en équipe avec un joueur différent à chaque fois.
Ce programme fait la répartition par journée sur le nombre de journées nécessaires pour que chaque jouer ait fait équipe avec tous les autres.
'Eq: n° d'ordre répartition (joueur associé au pivot), N: nb de joueurs
'P: dernier joueur si N pair, nul si N impair
Function Equ2Jour(ByVal Eq As Integer, N As Integer)
Dim equ(), J1%, J2%, P%, m%, j%
If N Mod 2 = 0 Then
P = N: m = N - 1: j = N / 2 - 1
Else
m = N: j = (N - 1) / 2
End If
If Eq < 1 Or Eq > m Then
MsgBox "Numéro de répartition non valide !", vbCritical, "Erreur"
Equ2Jour = Array("0 - 0"): Exit Function
End If
ReDim equ(j): equ(0) = Eq & " - " & P
For j = 1 To UBound(equ)
J1 = IIf(Eq + j > m, (Eq + j) Mod m, Eq + j)
J2 = IIf(Eq - j < 1, Eq - j + m, Eq - j)
equ(j) = IIf(J1 < J2, J1 & " - " & J2, J2 & " - " & J1)
Next j
equ = TirMélange(equ)
Equ2Jour = equ
End Function
Function TirMélange(Tbl())
Dim k, x%, i%, m%
m = UBound(Tbl) - LBound(Tbl) + 1
Randomize
For i = LBound(Tbl) To UBound(Tbl)
k = Tbl(i)
x = Int(m * Rnd + LBound(Tbl))
Tbl(i) = Tbl(x): Tbl(x) = k
Next i
TirMélange = Tbl
End Function
'N: Nb de joueurs à répartir en équipes de 2
'CelDest: cellule supérieure gauche de la plage de destination
' si omise, la répartition sera affectée à une nouvelle feuille
Sub TirageEqu2(N As Integer, Optional CelDest As Range)
Dim TEq(), i%, m%
i = N + (N Mod 2 = 0): ReDim TEq(i - 1): m = (i + 1) / 2
For i = 0 To UBound(TEq)
TEq(i) = i + 1
Next i
TEq = TirMélange(TEq)
For i = 0 To UBound(TEq)
TEq(i) = Equ2Jour(TEq(i), N)
Next i
If Not CelDest Is Nothing Then
CelDest.Resize(UBound(TEq) + 1, m).Value = WorksheetFunction.Transpose( _
WorksheetFunction.Transpose(TEq))
Else
With Worksheets.Add(after:=ActiveSheet).Range("B2").Resize(UBound(TEq) + 1, m)
.Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(TEq))
.Borders.Weight = xlThin
End With
End If
End Sub
Sub Répartition()
TirageEqu2 18, ActiveSheet.Range("B2")
End SubLe bouton mis sur la feuille lance la procédure Répartition, qui lance la procédure principale TirageEqu2 en lui fournissant le nombre de joueurs et l'emplacement du tableau résultat.
Ce dispositif est destiné à pouvoir faire varier le nombre de joueurs à répartir en équipe de 2.
La proc.utilise deux fonctions pour opérer la répartition :
- Equ2Jour qui applique un algorithme destiné à ne pas avoir de répétition d'équipe au cours d'un nombre de journées prévues selon le nombre de joueurs pour composer les équipes d'une journée, à partir d'un numéro d'ordre et du nombre de joueurs,
- TirMélange qui mélange aléatoirement les éléments d'un tableau qui lui est transmis, elle est utilisée par la fonction précédente pour ordonner aléatoirement les équipes d'une journée, et par la procédure principale pour ordonner aléatoirement les compositions de chaque journée.
Cordialement.
wow
Merci MFerrand je suis très impressionner quel travail Merci beaucoup
Ça m'a permis de réviser le problème...
Il peut y en avoir plus, voire beaucoup plus, mais le calcul dépasse un peu mon niveau mathématiques, des révisions n'y suffiraient pas
J'ai donc suivi la méthode empirique, qui conduit à une solution pour un appariement d'éléments 2 par 2 en les appariant tous mais qu'une seule fois sur un nombre donné de tours.
Note que si sur chaque journée tu dois faire rencontrer par chaque équipe toutes les autres équipes, c'est le même problème que pour la constitution des équipes.
Tu as 9 équipes, il te faudra 9 tours de rencontres pour les faire se rencontrer toutes, leur nombre étant impair. A chaque tour, tu auras 4 rencontres, et une équipe qui attendra le tour suivant en l'absence d'adversaire chacune passant une fois par ce stade au cours de la journée.
Cordialement.
Merci encore
Et si je reviens a 16 joueur donc 8 équipe c'est tu compliqué
Tu remplaces 18 par 16 pour le lancement...
Pour mettre le résultat sur le même tableau, efface préalablement le précédent, je n'ai pas prévu d'effacement.
Je le rajouterai... Depuis le fichier envoyé, j'ai complété la mise en forme pour l'option résultat sur une nouvelle feuille (centrage, ligne et colonne d'en-tête).
Je comptais aussi sortir le tableau de rencontre par journée, mais comme tu n'as pas prévu d'emplacement et de type de présentation, j'hésitais sur les options à prendre : tableau générique (reprenant les numéros d'équipes) pour toutes les journées, ou par journée, ou tableau reprenant les équipes telles que définies dans le tableau précédent.
en faite je transcris ensuite les résultat de la cédule sur la feuille de pointage pour que les équipe marque leur point
feuille jointe
