Tirage au sort de places Tournoi Poker

Bonjour,

après des mois de recherches et d'essais infructueux, je me résigne à demander de l'aide.

Je souhaite grâce à un fichier excel, effectuer un tirage au sort des places pour les joueurs d'un tournoi de poker.

Pour que vous compreniez bien, le tournoi se déroule sur plusieurs jour, et à chaque fin de journée, les places des joueurs restant doivent être retirées au sort.

Pour le mieux, j'aimerai pouvoir choisir le nombre maximum de joueurs par table (généralement entre 8 et 10).

Les données que je rentre manuellement:

En colonne A, le nom des joueurs, leur nombre étant différent à chaque tournoi.

En colonne B, le nombre de jetons qu'ils leur reste.

Voilà, j'aimerai que grâce à un bouton, les joueurs soient répartis équitablement sur le minimum de table possible.

ce qui me donnerai en colonne C un numéro de table, et en colonne D un numéro de siège, choisi lui aussi aléatoirement.

(les numéros de siège vont de 1 à 8,9,ou 10 suivant le maximum de joueurs par table choisi).

Petite cerise sur le gâteau, mais je pourrai le faire moi même par la suite, l'ajout de 3 autres boutons:

le 1er qui me classerai la liste par ordre alphabétique,

le 2ème par ordre décroissant de jetons restant,

le 3ème par ordre croissant de placement, table et siège.

Si par hasard qqun peut m'aider pour ce fichier, merci de préciser dans le VBA la correspondance de chaque formule,

que je puisse comprendre et apprendre à maitriser ce langage.

Merci.

Bonsoir,

Il ne te reste plus qu'à fournir un fichier d'exemple, en précisant toutes les spécifications qui doivent être strictement appliquées...

Cordialement.

Voilà le fichier que j'utilise actuellement, il fait le boulot, seulement il est limité à 4 tables,

car tout est rentré manuellement, avec des formules, et des macros.

Vous allez voir par quoi je suis passé pour arriver au résultat, vous allez rire....

J'aimerai arriver au même résultat, mais sans être limité à 4 tables, mais je ne maîtrise pas assez le vba pour ca....

Je rappelle que je rentre manuellement que le nom et les jetons de chaque joueurs,

133redraw.xlsm (50.71 Ko)

Bonjour,

Premier examen sommaire...

1) J'aimerais en savoir un peu plus sur cet import (fichier texte ?) qui subsiste en trace macro... S'agit-il d'une procédure régulière à pérenniser ? Ou bien part-on d'une liste de joueurs comme indiqué au départ ?

2) Il serait bon de connaître le nombre potentiel maximal de joueurs, de façon à dimensionner ce que le programme doit traiter, soit au moins le nombre maximal de tables...

Si je suis ta double spécification : répartition équitable sur un nombre minimum de table et 8 à 10 par table, je suggère une répartition en deux temps :

  • le programme te propose une répartition optimale selon tes spécifications
  • tu as la possibilité de modifier le nombre par table avant de lancer la répartition effective.

3) Tu as fait l'impasse sur les résultats de la première journée, notation des résultats, comment sont retenus les participants à la journée suivante...

Il faut définir plus précisément le processus utilisé pour pouvoir enchaîner correctement sur les tirages suivants... et éventuellement aller jusqu'au résultat final...

4) Pour les tris, pas de difficulté, mais inutile d'être inflationniste en matière de code ! Si un bouton par tri est logique, une seule procédure de tri les fera tous !

Cordialement.

edit : je suppose qu'au départ (tirage initial) une certaine "égalité" entre les participants prévaut, ce qui conduit à un tirage sans critère limitatif... mais pour les tirages suivants, en est-il de même ou y a-t-il des critères à prendre en considération selon les résultats obtenus... ?

Bonjour, merci pour la réponse rapide.

1) La trace d'import est un test que j'avais fais, pour importer directement le noms des joueurs inscrits au tournoi.

à partir d'un fichier avec bcp d'infos inutiles, je voulais garder que les noms des joueurs, et les coller en colonne B sur ma feuille de tirage, mais j'ai pas réussi le transfert. C'est pas très important pour le moment....

2) Le nombre max de joueurs pour un tournoi est au environs de 200, il restera donc environ maximum une cinquantaine pour le 2ème jour, avec qui il faut faire un tirage des places. Le nombre max de table est donc de 5 pour des tables de 10, 6 pour des tables de 9, et 7 pour des tables de 8.

3) Pour les résultats, c'est simple, admettons que le tournoi commence avec 100 joueurs. tous démarrent avec le même nombre de jetons. Pendant la partie, ceux qui n'ont plus de jetons sont éliminés. A la fin de la journée, imaginons que 80 joueurs ont perdus leurs jetons, ceux-ci sont répartis entre les 20 joueurs restant. On compte donc combien de jetons ont chacun de ces 20 joueurs restant, afin qu'ils redémarrent la 2ème journée avec le même nombre de jetons avec lequel ils ont terminé le 1er jour. Comme ci le tournoi ne s’était pas arrêté. La seule différence, c'est que pour éviter des association entre les joueurs, ont retire les places au sort.

Pour le fichier, je dois donc rentrer manuellement le nombre de jetons restant pour chaque joueur, pas le choix...

4)

Pas de critère pour le tirage au sort des places, juste l'équilibre, et le hasard....

La 1re journée est à peu près finie, il me reste à prévoir un verrouillage pour qu'on ne puisse relancer le tirage par inadvertance.

A cet égard 2 options : soit on ne peut tirer qu'une fois, et on ne le pourra plus sans réinitialiser, c'est à dire effacer pour recommencer la mise en place, soit tu veux te réserver la possibilité de retirer après un premier tirage, auquel cas on se contente d'un avertissement que si la journée est engagée tu vas la foutre en l'air...

Reste aussi le passage à la 2e journée, et ensuite aux journées suivantes. Combien faut-il en prévoir ?

En principe les procédures sont prévues pour fonctionner pour toutes les journées : Tri, nombre par table, tirage table et siège. Ce sont les procédures associées aux boutons qui les lancent en fournissant les paramètres adéquats.

Cordialement.

En fait il m'en faut qu'un, une fois le tirage effectué, je l'imprime et je l'affiche.

Le numéro de journée n'a pas d'importance.

Concernant la protection, on peut garder la possibilité de relancer, au cas ou...

Il n'y a qu'une partie des joueurs qui poursuivent !

oui tout a fait, les joueurs auquels je ne rentre pas le nombre de jetons sont donc éliminés, je les supprime avant le tirage

L'idée était de ne rien supprimer en cours de tournoi, et donc de basculer sur une nouvelle feuille pour la journée suivante en y transférant les joueurs retenus...

J'ai donc inclus 4 feuilles, simplement nommées J1 à J4, de même structure, disposant des boutons de commande permettant d'opérer sur la journée (ceux opérant sur l'ensemble sont uniquement sur J1).

Eléments constitutifs du fichier :

Plages nommées (en dynamique) : TabJ1 à TabJ4, dans chaque feuille la plage B7:B... où figure le nombre de joueurs par table ;

JouJ1 à JouJ4, dans chaque feuille la plage D7:D... liste des joueurs.

(Les plages incluent une ligne vide de façon à être définies lorsqu'elles sont encore vides. Il en est tenu compte dans les calculs par macro.)

Données à saisir : la liste des joueurs sur J1 en colonne D à partir de D7 (à défaut d'un autre mode d'alimentation...) ; le nombre de jetons par joueur au départ, sur J1 en F4 ; les jetons restants à chaque joueur à l'issue de la journée, sur toutes les feuilles, à inscrire en col. H.

Par ailleurs le nombre de joueurs par table peut être modifié manuellement en col. B (sur toutes les feuilles).

Formules :

Une formule en col. A à partir de A7 fournit le n° de table lorsqu'un nombre de joueurs figure en B (toutes feuilles).

En F2, nombre de joueurs inscrits en col. D (toutes feuilles).

En F3, nombre de tables définies en col. B (toutes feuilles).

En J5, nombre de jetons en circulation (produit du nombre par joueur [F4] par le nombre de joueurs [F2]) (feuille J1 seulement).

En J6, nombre total de jetons inscrits en colonne H (jetons restants) en regard de chaque joueurs (toutes feuilles).

Le contenu de J5 et J6 est masqué par couleur de police.

A noter que les résultats des formules ne sont pas utilisés dans les macros, les mêmes valeurs quand on en a besoin y sont calculées par d'autres moyens, mais certaines (F2 et F3) peuvent être utilisées comme test (valeur supérieure à 0) lors du lancement de commandes.

MFC : les bordures verticales du tableau de définition des Tables (A:B), et celles du tableau des Joueurs (D:H) sont mises par MFC, pour s'ajuster à la longueur des tableaux (toutes feuilles).

La cellule d'en-tête Jetons restants (H6) se colore en rouge si le total en H (calculé en J6) ne correspond pas au total de jetons en circulation (J5 de la feuille J1) (toutes feuilles).

Tant que la cellule est rouge, c'est donc que l'on n'a pas tout inscrit, ou qu'il y a une erreur.

Boutons de commandes :

Définir Tables - lance le calcul du nombre de tables et du nombre de joueurs par table à partir du nombre de joueurs inscrits pour la journée, si F2 est >0 (toutes feuilles).

Redraw - lance le tirage du positionnement table et siège de chaque joueur, si F3 est >0 (sinon message invitant l'utilisateur à lancer d'abord la définition des Tables (toutes feuilles).

Journée suivante - lance le transfert des joueurs retenus pour la journée suivante, après confirmation de l'utilisateur (toutes feuilles sauf la dernière, J4, puisque c'est la dernière !)

(NB- Le tournoi peut se terminer avant la journée 4...)

Les boutons de commandes de tri du tableau Joueurs :

Tri Alpha - lance le tri sur les noms de joueurs, si F2 est >0 (si joueurs inscrits) (toutes feuilles).

Tri Tables - lance le tri sur les tables et sièges attribués aux joueurs, si F3 est >0 (si tables définies) (toutes feuilles).

Tri Chiplead - lance le tri (décroissant) sur le nombre de jetons restants par joueur, si jetons restants inscrits (test sur H7 non vide) (toutes feuilles).

Tri Jetons - lance le tri (décroissant) sur le nombre de jetons en début de journée par joueurs, si F2 est >0 (si transfert des joueurs avec leurs jetons réalisé à partir journée précédente) (toutes feuilles sauf la première, J1, pour laquelle même nombre de jetons par joueur au démarrage).

Réinitialiser - lance la réinitialisation en vue d'un autre tournoi (effacement) (feuille J1 seulement).

(NB- Dans la mesure où les inscriptions initiales reposent sur une saisie manuelle, la liste des joueurs initiale (feuille J1 en col. D) n'est pas effacée, des noms pouvant être repris pour le tournoi suivant...)

Effacer Joueurs - lance effacement de la liste des joueurs en col. D (feuille J1) si la réinitialisation a eu lieu (test sur B7 vide, définition des tables effacée) (feuille J1 seulement).

Procédures :

J'y reviens ! Je dois m'interrompre un moment...

Les procédures donc :

Tri - appelée en lui fournissant le nom de la plage Joueurs concernée et l'index de colonne dans la plage sur laquelle le tri doit s'effectuer.

Le nom de plage ne référence qu'une colonne mais on dimensionne sur 5 pour trier (NB- le nom faisant référence à une plage précise dans une feuille permet de se passer du nom de feuille pour l'atteindre).

Les tris s'effectuent respectivement sur les colonnes 1 (Alpha), 2 (Jetons au départ), 3 (Tables) et 5 (Jetons restants).

Le tri sur la col. 3 doit en fait se faire sur 3 et 4, on définit donc une 2e col. de tri qui sera 4 (pour 3 demandé) et mis systématiquement sur 2 pour toutes les autres demandes (la colonne 2 est vide au départ, et son inclusion en 2e col. de tri n'affecte pas le résultat du tri, ce qui permet une procédure homogène et courte pour tous les tris sur toutes les feuilles).

De même, le tri est défini croissant sauf pour 2 et 5 (décroissant).

RépartTables - appelée avec le nom de la plage Joueurs concernée. Elle calcule le nombre de tables et de joueurs par table.

Outre le test effectué au niveau bouton, la procédure teste la cellule F7 et ne s'exécute que si cette dernière est vide (si elle ne l'est pas, c'est que le tirage a déjà eu lieu...)

La procédure calcule le nombre de tables en considérant que 10 joueurs est le maximum. Le nombre de joueurs proposés par table ne dépassera donc jamais 10, mais il peut être modifié manuellement... Exemple : pour 31 joueurs, 3 tables de 10 ne suffisant pas, la proc. proposera 4 tables : 8-8-8-7, ce qui met une table à moins de 8 ; si l'on préfére passer à 3 tables avec une table à 11, on peut le faire manuellement...

TirageTS - appelée également avec le nom de la plage Joueurs concernée. Elle effectue un tirage aléatoire des Table et Siège attribué à chaque joueur.

Test supplémentaire (par rapport au bouton) réalisé avant exécution : que H7 soit vide (si elle ne l'est pas c'est l'on a saisi des jetons restants, la partie est donc bien engagée, et la procédure ne s'exécutera pas [NB- le test est sommaire, et ne met pas à l'abri de toute erreur...]. Si F7 n'est pas vide, c'est qu'un tirage a déjà eu lieu : un message questionne alors l'utilisateur sur sa volonté de recommencer le tirage, exécution ou non en fonction de la réponse.

Le tirage s'effectue sur les joueurs, il utilise la méthode "String-Galopin" garantissant un tirage aléatoire unique sans doublon. Chaque joueur tiré successivement est affecté à une table et siège en partant de 1.1, 1.2... 2.1, 2.2...jusqu'à dernière table-dernier siège. Il serait possible si l'on trouve que c'est insuffisamment aléatoire, de doubler ce tirage joueur par un tirage de la table-siège à attribuer...

La procédure opère un tri par table et siège après affectation.

TftSuiv - appelée avec le nom de la plage Joueurs concernée. Elle transfère les joueurs disposant de jetons sur la feuille journée suivante.

Elle commence par trier le tableau sur les jetons restants. Elle parcourt les valeurs nulles (à éliminer) pour repérer le dernier joueur à transférer, en vérifiant qu'aucune ligne n'est vide (si cellule vide, elle s'interrompt avec message car des jetons restants n'ont pas été saisis). Elle reproduit la partie de colonne joueurs retenus en D dans la col. D de la feuille suivante, et les jetons de ces joueurs en H dans la col. E.

Elle prévient que l'opération est réalisée et active la feuille suivante.

Réinit - Message pour demander confirmation de la réinitialisation. Si confirmée, elle efface sur toutes les feuilles les tableaux Nombre de joueurs par table (B) et Joueurs (D:H), sauf la liste initiale de joueurs en D de la feuille J1. Elle efface également le nombre de jetons initiaux par joueur en F4 de cette feuille J1.

EffaceJoueurs - Efface la col. D de la feuille J1.

Je crois que la description est complète, il ne te reste plus qu'à tester. Je n'ai pas testé tous les cas de figures, me signaler si un bogue survient.

Cordialement.


74kleon-redraw.xlsm (176.38 Ko)

Super travail, c'est très propre, merci beaucoup.

A première vu, c'est quasiment ce dont j'aurai besoin, et j'aime bien l'idée du suivit des journées,

mais je ne suis pas certain de m'en servir...

En fait,le nombre de jetons restants est en général approximatif, juste pour donner une idée, en connaitre l'exactitude n'a aucune importance à ce moment du tournoi. Faire un suivit des différentes journées ne m'est donc pas utile.

Une fois le tirage effectué, j'affiche le tableau avec nom, jetons, table et siège,

essentiellement pour informer les joueurs de leur nouvelle place.

Je peux donc utiliser la même page pour chacune des journées, par contre, on peut peut-être ajouter un bouton qui

mettrait en page le tableau, sur un fond d'écran, prêt à imprimer?

Une autre petite chose, comment définir le nombre maximum de joueurs par table avant de lancer l'automatisation?

et est-il possible de modifier les numéros de table avant de lancer le redraw?

Bonjour,

mais je ne suis pas certain de m'en servir...

Tu y as intérêt, car appui sur un bouton et cela se fait automatiquement. Les feuilles étant prêtes, les mêmes procédures s'appliquent en appuyant sur les même boutons... Cette solution ne change rien pour toi, sauf que tu n'as pas à faire le nettoyage manuel pour réutiliser la même feuille, mais les procédures non plus ! Le passage d'une feuille à l'autre se règle par un simple passage d'arguments sans ajouter une seul ligne de code, ce qui n'aurait pas été le cas avec une seule feuille.

En fait,le nombre de jetons restants est en général approximatif

Dans la mesure où on le porte, il me semblait logique de vérifier la concordance... (je n'aime pas trop les choses approximatives... ) Mais c'est à toi de voir.

La non concordance n'est pas bloquante, elle est seulement signalée par MFC.

Ce qui est testé dans la procédure TftJSuiv c'est que la saisie de jetons restants soit faite pour tous les joueurs. Si cela te pose problème, par exemple si tu ne saisis pas les 0 restants, il faut alors supprimer ce fragment de code dans TftJSuiv :

            If .Cells(i, 5) = "" Then
                MsgBox "Tous les résultats n'ont pas été notés ! Compléter.", vbInformation, _
                 "Poursuite du tournoi"
            ElseIf .Cells(i, 5) > 0 Then
                Exit For
            End If

et le remplacer par :

            If .Cells(i, 5) > 0 Then Exit For

Les boutons sont paramétrés comme non imprimables. En fait il n'y aurait que l'ajustement de la zone d'impression au nombre de joueurs à paramétrer. Je peux voir ça dès que j'ai un moment... Rapidement tout de même, mais là je suis sur d'autres choses bien engagées...

Cordialement.

OK, Merci encore pour ce travail, et toutes les précisions.

Bonsoir,

Avec impression...

58kleon-redraw.xlsm (185.68 Ko)

merci bcp

Rechercher des sujets similaires à "tirage sort places tournoi poker"