Faire un mélange aléatoire
Bonjour, je me pers un peu avec ce que j'ai à faire et votre aide serais plus que la bienvenue, j'ai besoin de faire un tirage aléatoire pour des joueurs par équipe.
j'ai mis dans mon excel une description plus détaillé, et plus compréhensive je pense :-) je ne sais vraiment pas quoi faire car trop d'aléa pour moi, si l'un de vous pourrais me sauvé, je vous remerciais mille fois
re bonjour, j'essaye de me plancher sur le sujet activement...., ici j'ai fait en sorte que les 2 colonnes soit mélanger, et qu'on aille enlever les joueurs qui ont perdu. jusque la ok :-D apres j'ai fait un nbval, pour avoir le nombre dans chaque colonne, il y a ici une différence de 2. et copier dans une autre colone les chiffres min....
Dim min As Integer
Call tirageequipes
' rangement dans le tour
Sheets("Suite tour").Range("A2:A57").Value = Sheets("liste équipe").Range("H2:H57").Value
'melange
Sheets("Suite tour").Range("F2:G29").Value = Sheets("Suite tour").Range("C2:D29").Value
'on enleve les éliminés
Range("F2:G29").Select
Selection.SpecialCells(xlCellTypeConstants, 1).Select
Selection.Delete Shift:=xlUp
Sheets("Suite tour").Range("I" & min).Value = Sheets("Suite tour").Range("F" & min).Value
End Subalors évidement... va donne rien de bon ... enfin je suis perdue... si je trouve pas de solution je le ferais manuellement, mais le but étant évidement que cela se fasse tout seul....
je vous remet le nouveau fichier avec les modification qui on été aporté
alors SVP, HELP ME
vraiment personne n'a une idée??? j ai beau réfléchir je vois pas comment faire...
re, je ne comprends pas le système. Vous voulez quoi ?
Montrez le résultat voulu (ou un début de cela)
tout d'abord merci infiniment pour ta réponse, j'ai fait des capture d'écran, en espérant que ce soit un peu plus clair.
=> donc sur celui-ci il reste 56 joueurs donc il nous en fraudais 26 de chaque coté, étant donner que les équipes ne peuvent pas se rencontré entre elles (ex : équipe amis), j'essaye de faire en sorte qu’après un tirage sur les nom d'équiper je fasse correspondre des place déterminer afin d’éviter cela donc.
mais sur ce tableau on retrouve 1 joueur tout seul alors qu'il pourrait aller à gauche pour remplir l'espace vide, un peu plus loin avec encore moins de joueurs, même résultat ( sauf qu'ici il faut 20 joueurs de chaque coté) donc il faudrait le faire remonté à droite dans la case vide
j'aimerais que cela se fasse en automatique en 1 clic k ou tout le monde est bien mis et les équipes se retrouve pas a jouer ensemble, mais je débute et malgré mes essaies j'ai toujours des bug-gage.
en espérant avoir été un peu plus clair
re, un peu plus d'explication, on a 14 fois 4 équipes. On commence avec 4 matches entre équipes différents (pas en poules mais complètement aléatoire).
Après ces 4 matches, on fait quoi ? On prend les 28 meilleurs et on fait la même chose ???
donc en gros il y a 14 équipes - avec 4 joueurs par équipes qui ont chaque 4 vies.
c'est pour ca que j'ai deja fais les 4 premiers tours, car il n'aura pas d’éliminer, c'est apres que ca me pose problème, faire un tirage aléatoire sur Xnbre de joueurs, ok mais il faut vérifier qu'ils ne joue pas dans la même équipe afin qu'il ne s'élimine pas entre eux, puisque la dernière équipe encore en vies, gagne
c'est pour ca que je fais plusieurs tirage, il doit y avoir une façon bebeaucoup plus simple je suis sure, mais je ne m'y connait pas assez en codage pour ca
mais en fait si "simplement" on demande à la colone la plus grande de transféré vers l'autre, genre je vais pas vous le faire en code car il me faut bien toutes mes plumes
si le chiffre en A3 est pair, alors le chiffre A3 est diviser en 2,
si la colone D est plus grande que la colone C
alors on prend x nbre de cellule de la fin de D (A3/2) et on les rajoute a la fin de C
sinon on fait l'inverse,
alors pour ma part il va surement me falloir des heures pour faire cela, mais si ca inspire l'un d'entre vous je prend mdr
Bonsoir,
Je te propose une fonction VBA qui te permet de générer des rencontres aléatoires entre membres de club différents. Donc basé sur une liste dont le nombre de personnes par club peut varier.
vérifie dans le fichier exemple si cela produit le résultat que tu souhaites, après il faudra l'intégrer dans ton fichier...
Sub testmelange()
'exemple d'utilisation de la fonction
Dim plage As Range, plageresultat As Range, dl&
' à adapter
dl = Cells(Rows.Count, 1).End(xlUp).Row
Set plage = Range("A1:A52") '<- plage contenant les noms à utiliser pour la génération des rencontres, à adapter
Set plage = Range("A1:A" & dl) '
Set plageresultat = Range("E1") '<- première cellule où mettre le résultat, à adapter
tbr = melange(plage) ' on mélange et crée les rencontres
plageresultat.Resize(UBound(tbr), 2) = tbr 'on affiche le résultat
End Sub
Function melange(d As Range) As Variant
'fonction melange prend comme paramètre une plage contenant une liste de membres (selon le format "club - nom du membre") et retourne un tableau à 2 dimensions avec pour chaque ligne le nom des 2 adversaires en s'assurant qu'ils sont de clubs différents.
Dim dl&, dl2&, tb, tbr, i&, j&, a, tbri1, tbri2, tbrj1, tbrj2
With d
dl = .Rows.Count
dl = dl + dl Mod 2 'on ajuste le nombre de participants si nombre impair
dl2 = dl / 2
tbo = .Value
End With
ReDim tb(1 To dl, 1 To 1)
For i = 1 To d.Rows.Count
tb(i, 1) = tbo(i, 1)
Next i
If d.Rows.Count <> dl Then tb(i, 1) = " - " 'on ajoute un participant fictif si nombre impair
'on mélange les noms
For i = 1 To dl
q = Application.RandBetween(1, dl)
a = tb(i, 1)
tb(i, 1) = tb(q, 1)
tb(q, 1) = a
Next i
'rencontres
ReDim tbr(1 To dl2, 1 To 2)
For i = 1 To dl2
tbr(i, 1) = tb((i - 1) * 2 + 1, 1)
tbr(i, 2) = tb(i * 2, 1)
Next i
'on corrige les rencontres opposant des membres d'une même équipe
For i = 1 To dl2
tbri1 = Split(tbr(i, 1), " - ")(0) 'club membre 1
tbri2 = Split(tbr(i, 2), " - ")(0) 'club membre 2
If tbri1 = tbri2 Then 'dans le même club ?
For j = 1 To dl2 'on recherche une ligne avec laquelle faire un échange
tbrj1 = Split(tbr(j, 1), " - ")(0) 'club membre 1
tbrj2 = Split(tbr(j, 2), " - ")(0) 'club membre 2
If tbri2 <> tbrj2 And tbri2 <> tbrj1 Then
a = tbr(j, 2)
tbr(j, 2) = tbr(i, 2)
tbr(i, 2) = a
Exit For
End If
Next j
If j > dl2 Then 'on a parcouru toute la liste des rencontres et on n'a pas trouvé d'échange possible
MsgBox "pas de solution trouvée"
End
End If
End If
Next i
melange = tbr
End Function
bonjour,
tu es un amour, je n'en espérais pas tant