Casse-tête en VBA - Problème inexpliqué

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'731
Appréciations reçues : 52
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 28 mai 2019, 20:55

Bonjour,

Afin d’aider un autre membre, je me casse la tête depuis un moment avec mon essai ci-joint.

L’idée est de former des équipes de pétanque – si possible de 3 joueurs, provenant de 6 villes – mais jamais deux joueurs de la même ville ensemble. Et ceci sur 4 tours consécutifs, en n’ayant jamais deux joueurs qui jouent plus d’une fois ensemble.

Est-ce qu’une âme charitable aurait l’amabilité de consulter mon usine à gaz afin de voir où ça cloche ?

Pour faire un essai, il suffit d’aller sur la feuille ‘’Provisoire’’ et de cliquer sur ‘’Go’’. Ma macro mouline chez moi pendant 1 à 2 minutes.


Voici comment ça fonctionne :
Je travaille principalement sur la feuille ‘’Provisoire’’. A chaque tour (For k = 1 to 4), les joueurs sont déplacés de la feuille ‘’Inscriptions’’ sur la feuille ‘’Provisoire’’, dans les colonnes A à F.

Etape 1
En premier lieu on forme autant de doublettes (équipes de 2 joueurs seulement) qu’il faut afin d’arriver à un nombre de joueurs restant qui soit un multiple de 3. Ca se passe dans ma macro de la ligne 108 à la ligne 318. Comme le nombre de joueurs à disposition est à chaque fois suffisant, il ne semble pas que cette partie fasse problème. Vers la ligne 221, un contrôle que les équipes prises au hasard ne soient pas composées de joueurs ayant déjà joué ensemble montre que ça fonctionne bien. Ces joueurs pris au hasard sont reportés dans les colonnes H à M.

Etape 2
Il reste un nombre de joueurs multiple de 3, mais avec un nombre inégal entre les villes. De la ligne 322 à la ligne 431, je forme donc des triplettes en fonction des villes avec le plus de joueurs, mais toujours sans avoir deux joueurs de la même ville dans la même équipe. Là également, le nombre de joueurs à disposition est encore assez grand et il est assez facile de former ces équipes. Un contrôle à la ligne 402 tente de le prouver.

Etape 3
A ce moment, il reste un nombre de joueurs identiques pour toutes les villes. En fonction du nombre d’équipes restantes, je forme des groupes de 4 ou 6 équipes (2 ou 3 lignes de 6 joueurs) que je brasse dans tous les sens jusqu’à ce qu’il y ait une combinaison de joueurs satisfaisante (Lignes 449 à 676). Selon le contrôle à la ligne 594, ça à l’air de bien fonctionner.

Etape 4
Lorsqu’il ne reste plus de 18 joueurs, je brasse ces 6 équipes un peu de la même manière qu’à l’étape 3 – de la ligne 682 à la ligne 983 - mais il arrive assez souvent qu’aucune combinaison convienne, qu’il y ait toujours au moins deux joueurs ayant déjà joué ensemble. Je modifie alors l’ordre des joueurs dans les lignes 863 à 891 de manière à malgré tout trouver une bonne combinaison. Selon le contrôle à la ligne 818, il y a quasiment toujours une combinaison finale qui convient. Si ce n’était pas le cas, ça passerait par la MsgBox de la ligne 891, mais sur des dizaines et des dizaines d’essais, je n’ai eu qu’une seule fois le cas.

Voici maintenant mon problème :
Malgré ces 4 contrôles successifs indiqués ci-dessus à chacune des étapes, lorsque je lance ma macro sans interruption, il y a toujours en finale des joueurs ayant joué plusieurs fois ensemble !!


Par exemple, dans le fichier tel que je vous le fournis, on voit sur la feuille ‘’Relevés’’, dans la colonne F, que certaines paires de joueurs ont joué plus d’une fois ensemble lors de ce tirage de 4 tours.

Cordialement.
Tournoi Inter-Clubs_V3.xlsm
(142.75 Kio) Téléchargé 19 fois
Yvouille

Valais de Coeur
Avatar du membre
BrunoM45
Membre impliqué
Membre impliqué
Messages : 2'885
Appréciations reçues : 87
Inscrit le : 29 octobre 2011
Version d'Excel : 2016 FR, O365 FR
Contact :

Message par BrunoM45 » 28 mai 2019, 23:11

Bonsoir Yvouille,

Perso je ne m'attaque jamais à ce genre de problème souvent insoluble ::o :P

Bon courage et bonne chance :P
[F1] est une touche qui appelle l'aide : Essayez, c'est assez performant et on trouve plein de choses

Il n'y a ni bon ni mauvais usage de la liberté d'expression, il n'en existe qu'un usage insuffisant.
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'920
Appréciations reçues : 328
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 29 mai 2019, 00:23

Bonjour à tous,

Je suis un peu comme bruno, c'est souvent trop prise de tête... ;-)

Juste une remarque. Je ne sais pas si ça a une importance mais tu ne minimises pas le nombre de doublettes.
Il devrait être :
=CHOISIR(MOD(V5;3)+1;0;2;1)
Pour 115 ça donnerait donc 2*2 + 37*3

Peut-être que ça va t'arranger. Ou à l'inverse peut-être qu'augmenter ce nombre de doublettes justement, ça pourrait être une façon d'arriver à éviter les mêmes joueurs dans 2 équipes.
Je dis ça mais ce n'est même pas une intuition, aucune idée de l'impact. Juste une piste à explorer si ça peut débloquer la situation.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'731
Appréciations reçues : 52
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 30 mai 2019, 07:21

Salut Bruno, salut eriiic,

Je suis un peu surpris par votre manque de combativité :) On a plutôt tendance toujours à dire ‘’avec Excel, rien d’impossible’’.

Personnellement, je pense qu’il doit y avoir une manière moins hasardeuse de trouver ces équipes. Cependant, je ne m’y connais pas assez pour le faire, d’où mon système aléatoire.

Mais quand même, avec les contrôles mis en place à chaque étape, on devrait arriver à un résultat plus satisfaisant. Il faudrait juste trouver où est le grain de sable qui empêche la machine à tourner rond.

@eriiic
Il est nécessaire de tirer jusqu’à 5 équipes de doublettes afin de ne pas avoir un nombre d’équipes impair. Dans ton exemple, la 39ème équipe n’a pas d’adversaires. En revanche, le nombre de doublette est à limiter au maximum.

Je continue d’espérer

Amicalement
Yvouille

Valais de Coeur
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'920
Appréciations reçues : 328
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 30 mai 2019, 08:58

Bonjour,

le soucis c'est qu'il n'y a pas forcément une solution.
Je ne saurai le démontrer mais il suffit d'un seul contre-exemple pour le prouver.
Prend une ville avec une ville avec 50 joueurs et les autres avec seulement 2 et c'est mort rien que pour constituer les équipes.
eric

Edit :
si tu arrives à constituer tes équipes sans doublons, avec un nombre d'équipes égal à un multiple de 5 (nb tours + 1) il suffit de remplir un tableau comme ça :
2019-05-30_09-22-27.png
2019-05-30_09-22-27.png (10.71 Kio) Vu 116 fois
non ?
Je précise que je ne suis pas joueur de pétanque et que je ne connais pas tous les impératifs :-)
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'731
Appréciations reçues : 52
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 30 mai 2019, 10:53

Re-salut eriiic,

A nouveau merci pour ta réponse.

En fait, il y aura toujours plus ou moins le même nombre de joueurs dans les 6 villes, proche de 20. Mon exemple est dont une situation plutôt extrême, avec une grande différence de joueurs d’une ville à l’autre.

Et il me semble que ton idée de tableau n’est pas réalisable, puisque les équipes sont retirées à chaque nouveau tour. Ou t’ai-je mal compris ?

J’essaie de résumer les conditions :

1) Présence d’une vingtaine de joueurs de 6 villes
2) Tous les joueurs jouent les 4 tours
3) Formation à chacun des 4 tours du minimum de doublettes possible, puis formation de triplettes
4) Aucun joueur ne joue deux fois en doublette
5) Nombre d’équipes pair
6) Les joueurs d’une même ville ne jouent jamais ensemble
7) Un joueur ne se retrouve jamais dans une équipe avec l’un ou l’autre de ses précédents partenaires (que cela ait été en doublette ou en triplette)
Yvouille

Valais de Coeur
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'920
Appréciations reçues : 328
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 30 mai 2019, 11:14

Ah mais tu refais les équipes à chaque tour ?
Je pensais qu'elles étaient constituées une fois pour toutes.
Donc oui, ma proposition ne convient pas.
7) Un joueur ne se retrouve jamais dans une équipe avec l’un ou l’autre de ses précédents partenaires (que cela ait été en doublette ou en triplette)
Il peut rencontrer plusieurs fois un autre joueur ou c'est à exclure aussi ?
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'731
Appréciations reçues : 52
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 30 mai 2019, 11:38

Oui, un bouliste peut jouer plusieurs fois contre le même joueur. La demande d'origine souhaitait vouloir éviter cela également, mais ça en fait trop, ça devient ingérable.

Il aurait également fallu de ne pas faire jouer deux femmes - minoritaires dans ce sport - ensemble, mais ça aussi, ça compliquait bien trop la donne. Surtout qu'on voit régulièrement des équipes entièrement féminines battre des machos :lol:
Yvouille

Valais de Coeur
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'731
Appréciations reçues : 52
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 31 mai 2019, 21:26

Bonjour,

Je suis parti dans une direction légèrement différente et rencontre d’autres problèmes. Si l’un d’entre vous souhaite encore m’aider, il faut aller voir le fil : https://forum.excel-pratique.com/viewtopic.php?f=2&t=125296

Chaleureusement.
Yvouille

Valais de Coeur
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message
  • casse tête
    par chtimili » 8 novembre 2016, 09:01 » dans Excel - VBA
    5 Réponses
    183 Vues
    Dernier message par chtimili
    8 novembre 2016, 10:41
  • Casse-tête
    par ctrl-alt-del » 28 juin 2014, 20:37 » dans Excel - VBA
    5 Réponses
    473 Vues
    Dernier message par tulipe_4
    7 juillet 2014, 21:08
  • Casse tête
    par yakudark » 24 octobre 2013, 22:56 » dans Excel - VBA
    12 Réponses
    811 Vues
    Dernier message par yakudark
    27 octobre 2013, 16:41
  • help casse tête ;)
    par kumade44 » 7 février 2019, 06:30 » dans Excel - VBA
    15 Réponses
    692 Vues
    Dernier message par kumade44
    8 février 2019, 13:33
  • Casse Tête
    par squallor72 » 4 août 2015, 12:07 » dans Excel - VBA
    3 Réponses
    299 Vues
    Dernier message par squallor72
    13 août 2015, 14:17
  • Casse tête
    par cemoibob » 6 septembre 2019, 12:21 » dans Excel - VBA
    3 Réponses
    74 Vues
    Dernier message par cemoibob
    7 septembre 2019, 18:19