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

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.

Bonsoir Yvouille,

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

Bon courage et bonne chance

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

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

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

non ?

Je précise que je ne suis pas joueur de pétanque et que je ne connais pas tous les impératifs

eric

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)

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 ?

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

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.

Rechercher des sujets similaires à "casse tete vba probleme inexplique"