Cas réel - avec problème complexe sur de la prevision de match en evitant l
Bonjour à tous,
J'organise fréquemment des tournois multisport, afin de fluidifier l'organisation je fais tout via Excel. mais il y a une partie que j'ai toujours laissé en manuel car ça me semble très complexe à automatiser (en tout cas avec mon niveau d'excel ^^ ) , malheureusement sur le dernier tournoi il y a eu un problème justement suite à une erreur humaine.
Du coup, je suis remotivé pour trouver une solution à mon problème, que je vous expose ci dessous :
- J'ai 20 équipes qui font chaque 2 sports, j'ai une phase de poule le matin (10 équipes sur un sport et 10 équipes sur un autre sport) , début d'après midi on inverse afin d'avoir 8 poules de 5 équipes classer de 1 à 5 sur chaque sport de façon indépendante
Jusqu'ici tout va bien j'ai réussi à automatiser à 100%, (j'ai enlever cette partie la de mon fichier excel pour ne pas le surcharger inutilement)
- Ensuite on passe à la phase de classement, chaque équipes va faire 3 matchs pour faire un classement final de 1 à 40. Selon leur classement en phase de poule ils vont tomber dans la catégorie Platinum ( les 8 équipes 1ere) , OR (Les 8 équipes 2ème ).... et ça dans chaque sport. voir les onglets "2-Phase de classement-Bad" et "2-Phase de classement-Padel".
- La problématique commence ici, car je dois ensuite envoyer en simultanée les match pour le sport 1 et le sport 2 le risque c'est que j'appelle une équipe pour les 2 sports, sur le même créneau et donc sauf à se dédoubler ce n'est pas possible ^^
. Donc je dois trouver une solution afin de ne jamais avoir de doublon, sachant que je joue 4 matchs sur chaque sport en même temps.
- actuellement j'ai réussi à semi automatiser les 2 premiers tours, c'est pas propre du tout, mais ça marche ^^,
par contre pour la suite c'est du bricolage ^^. Je vous explique comment j'ai procédé:
- Dans onglet "BDD Tour", je reliste tous les matchs de mon arbre de tournoi, pour le premier tour c'est simple je prends les 4 premiers matchs du sport 1 (dans l'exemple le Padel)
- Puis je crée un second tableau sur la droite pour le second sport, et en colonne AD je fais une rechercheX sur le premier tableau afin de lister les équipes qui joue déjà sur le premier sport puis j'utilise encore sur la droite la fonction Filtre et trie pour avoir les 4 premiers matchs (en vert) du sport 2 et les 4 matchs pour le tour suivant toujours sur ce même sport
- j'utilise ce meme procédé encore à droite pour avoir les 4 matchs du sport 1 pour le tour 2.
Désolé si je ne suis pas très clair, le mieux c'est d'ouvrir le fichier ^^ .
Bref ensuite à date je suis obligé de faire un copier coller de valeur dans l'onglet "tour en dur" pour figer les tour sinon dès que je commence à renseigner tout bouge (logique^^) et quand je reporte le score d'un tour ça actualise mes onglets " "2-Phase de classement-Bad" et "2-Phase de classement-Padel" et de fait mon onglet "BDD TOUR" aussi et donc je peux prévoir les 2 tours suivants.
Problème de cette solution :
- Je fais des copier coller manuel dans onglet "tour en dur" donc source d'erreur
- ça fonctionne 2 tour par 2 tour (éventuellement 5 tour par 5 tour si je note EC pour en cours dans onglet "tour en dur) , mais j'aimerai toujours prévoir les 2 prochains tours par exemple
- Des fois les gens vont enchainer 2 sports d'affilés, je pense que c'est forcé à un moment mais j'aimerai quand même le limiter au maximum.
Les critères de priorisations :
- Aucune des deux équipes ne jouent déjà sur l'autre sport
- Le match contient bien 2 équipes
- Prioriser l'équipe qui n'a pas jouer depuis longtemps (J'ai utilisé la numérotation des matchs pour faire ça mais pas certain que ce soit efficace)
- Aucune des équipes n'a joué sur le tour d'avant (ou alors le mettre en surbrillance pour que je les préviennes, en amont)
Dans la mesure du possible j'aimerai éviter de faire du VBA car je ne maitrise pas ça (ou alors un truc très simple) et j'aime bien tout comprendre pour en assurer la maintenance.
PS : c'est normal que à chaque fois il y a le nom de l'équipe + "A" ou "B" car c'est 2 binômes de la même équipes dans notre exemple il faut se dire que ce sont des équipes totalement différentes.
PS2 : Si vous identifier des autres sources d'optimisation qui n'a rien avoir avec la problématiques exposés ci dessous , je suis ouvert aussi
Encore une fois désolé des explications peut être brouillon j'ai essayé de faire au mieux dans mes explications, je vous joins le fichier.
et je reste dispo pour répondre au question
bonjour,
je crains que votre question demande un petit peu de VBA, mais comme c'est exclu ...
Bonjour BsAlv,
S’il n’y a pas d’autre choix allons y sur du VBA, en espérant que ce soit pas trop complexe pour que je sois en mesure de comprendre et faire de la maintenance si nécessaire
Help please les amis, j'aimerai vraiment réussir à trouver une solution à ce problème. Je passe des journée entiere à creuser mais je trouve pas la solution.
Si mon problème est trop dur , ou impossible merci de me le dire.
Bonjour
Ton problème est un peu complexe.
Déjà tu as 20 équipes explique comment tu fais pour avoir 8 poules de 5 pour moi 8 fois 5 ça fait 40
- J'ai 20 équipes qui font chaque 2 sports, j'ai une phase de poule le
matin (10 équipes sur un sport et 10 équipes sur un autre sport) , début
d'après midi on inverse afin d'avoir 8 poules de 5 équipes classer de 1
à 5 sur chaque sport de façon indépendante
Bonjour Joco,
Merci de prendre le temps de me répondre
En fait, les équipes sont divisés en deux binômes, donc effectivement ça fait 40 binôme donc 8 poules de 5. C’est pour ça que à chaque fois tu as le nom de l’équipe avec soit A ou B
Pour voir comment procéder pour arriver à quelque chose envoie ton fichier avec des noms bidons.
Pour aller a la phase 2 il faut savoir comment sont obtenu les premiers résultats
Sans fichier ce sera difficile à résoudre
Joco sauf erreur de ma part mais j'ai mis le fichier dans mon premier message.
C'est cette partie qu'il manque
Jusqu'ici tout va bien j'ai réussi à automatiser à 100%, (j'ai enlever
cette partie la de mon fichier excel pour ne pas le surcharger
inutilement)
Voici le fichier complet, mais selon moi ça ne change rien au problème car j'avais extrait là partie où je bloque et dans mon fichier extrait j'ai dejà remonté les valeurs (que j'ai figé) dans la phase de classement.
mais bon au moins tu auras une vision complète du sujet comme ça ^^
Désolé je laisse la place à un autre membre du forum,pour moi fichier trop complexe trop de contraintes
Bonne fin de journée
re,
avec VBA, raccoursi CTRL+MAJ+P oubien la macro "Phase2"
Bonjour BsAlv,
Merci beaucoup pour ton retour, ça fonctionne mais que sur le premier tour, quand je renseigne les "W" (Win) et "L" (Loose) dans onglet "2-Phase de classement ..." et que je refais la macro ça me ressort toujours les 5 même matchs. alors que ça devrait, si possible, prévoir le maximum de match suivant (Si j'ai 2 tour d'avance déjà ça serait super).
Je pense que ton tablau "TBL_Planning" est pas branché à mes sources mais que tu as fais quelques choses en dur non ? sur le premier tour c'est faisable mais sur la suite c'est pas possible car on est incapable de prévoir les matchs futurs car c'est conditionné à la victoire ou la défaite de chaque équipe.
Merci encore de ton aide
re,
sur le premier tour c'est faisable mais sur la suite c'est pas possible car on est incapable de prévoir les matchs futurs car c'est conditionné à la victoire ou la défaite de chaque équipe.
Là, vous avez raison, après la phase 1, on sait réaliser le schéma pour le premier tour, dès que tous ces résultats sont connus, on peut réaliser le schéma pour Tour2, etc pour Tour3. Maintenant, le schéma dans "planning" trie les matches de telle manière que les équipes ont au minimum 1 match libre entre leur 2 matches. Si, cela ne réussit pas du premier coup, on lance la macro une 2eme fois.
Bonjour Bart,
Alors déjà merci, car ça me semble fonctionné, je vais tester plein de cas pour verifier que ça marche vraiment dans plein de cas différent
Désolé je suis un novice sur le VBA j'ai vu que tu en avais fait 4, les 4 sont utilisés ou il y a du brouillon ?
Je vais essayer de la relire et la comprendre mais ça me semble complexe
En cherchant un peu je crois comprendre que :
- La macro "phase 2" permet juste de créer la box ou je défini dans quelle phase je suis
- La macro "échanger" permet de faire plein de test de combinaison possible afin d'avoir aucune equipe qui joue en meme temps sur les 2 sports + ne pas enchainer les match
- La macro "aléatoire" permet de faire des matchs aléatoirement , selon moi tu as fais cette macro juste pour tester la macro "échanger" mais en soit maintenant elle ne me sert à rien
- La macro "équipe" j'ai pas compris pour le moment.
Ma compréhension est bonne pour le moment ? je continue d'essayer de comprendre étape par étape
en tout cas merci car ça repond clairement à ma demande initiale, maintenant j'aimerai comprendre pour pouvoir reproduire
re,
bien vue, la macro lit certaines colonnes dans "2-phase de classement ..." pour savoir les 20*2 équipes par sport remplir pour ce tableau ""TBL_Planning". Puis on a la plage "Alea" que la macro "aleatoire" remplit avec 2 fois la séquence de 1-20, ce sont les indexes des équipes, à gauche 5*4 pour le padel et à droite 5*4 pour le bad. Comme vérification, vous voyez la somme "210" en dessous, c'est la somme de 1 à 20 (ou en math 21*20/2). Puis tout ce qui est à droite, ce sont des formules pour savoir quel équipe correspond avec quel chiffre dans cette plage.Puis en dessous, on a cette plage jaune, qui compte les nombre d'occurences (moins 1) d'un nom dans 3 lignes, cad la ligne précédente, la ligne actuelle et la ligne suivante. Comme ça, on sait les cellules critiques et cela se voit aussi dans la cellule qui somme cette plage.
Bon, maintenant la macro "échanger" prend une de ces cellules "<>0" de cette plage jaune, détermine la cellule correspondante de la plage "Alea", donc une des 2 équipes de ce match doit jouer son 2eme match comme vous le dites "ne pas enchainer les match". Bon, on chois une autre cellule aleatoire pour le même sport (dans dans la même plage de 5*4) mais dans une autre ligne. On échange les chiffres des matches entre ces 2 cellules et si la nouvelle somme de la plage jaune <= la somme précédente, cette échange est approuvée, autrement, on remet les anciennes valeurs. Cà, on fait max 2.000 fois, juste au moment où la somme devient 0. (J'avais vu que cette méthode ne donnait pas toujours un résultat optimal, c'est pourquoi, maintenant, on prend une fois cette cellule (les cas paires) et l'autre fois (les cas unpaires) on prend une cellule aléatoire, donc suboptimalisation de ma première méthode).
Bon, après autant de fois, on atteint un mix de 2 fois 20 chiffres dans la plage "alea" (et la somme en dessous est encore toujours 210). La macro "Equipes" crée la résultat que vous voulez dans les colonnes à partir de la colonne G et que vous pouvez imprimer.
Donc, ce qui se passe, c'est 2.000 fois "trial and error" pour améliorer les rencontres des équipes.
Si vous voulez, je peux faire quelque chose pour mieux visualiser ces échanges ...
C'est à voir miantenant si ceci est une réponse sur la question originale ou pas.
re,
une nouvelle version, première ligne de module 1 modifier ce variable de true en false