Creation macro type solver sudoku Excel 2013

bonjour à tous,

Dans le cadre d'organisation de rencontre sportive pour les enfants,j'aimerais pour me simplifier la tache, créer une macro qui me permettrais de remplir le tableau des rencontres.

En cherchant sur les différents forums j'ai vu qu'il existait des solveur de sudoku ce qui correspond a peu prés a mon projet,mais malheureusement c'est trop compliquer pour je le modifie.

Dans mon cas je voudrais remplir chaque jours de rencontre un par un pour ce faire j'ai des contraintes, ce qui serait ma base de départ:

donc je prend la première journée je rentre manuellement mes premières équipes et en appuyant sur le bouton ça rempli les autres case vides( comme dans un sudoku tous les numéros doivent être inscrit une seule fois par journée).

ci joins l' exemple de tableau fini

je précise que je n'ai pas du tout le niveau pour créer une telle macro et j’espère avoir été clair.

en espérant que quelqu'un veuille bien m'aider

merci d'avance.

Bonjour,

pourquoi vouloir refaire par macro ce que tu as déjà fait par formule ???

Tout est prêt, tu as juste à dupliquer la feuille si tu veux.

eric

bonjour eriic,

non les formules sont un reste des essais que j'ai fait.

quand je fait le tableau par rencontre et par lieu, j'ai des contraintes qui s'impose:

contraintes kilométrique( trop éloignées)

des contraintes d’équipes déjà rencontrée lors des autres jours de rencontres(ceux en cour et ceux du mois dernier).

et les contraintes d’équipes qui doivent se rencontrer( car jamais rencontrées)

tout cela pour effectuer un brassage homogène des équipes(pas toujours rencontrer les mêmes équipes)

là où la macro m'aiderais c'est lorsque je commencerais a remplir le tableau avec les premières contrainte en activant la macro elle me donnerais une première résolution que je versifierais,et si il y a un soucis je rectifie l'erreur et je recommence.

car placer une par une en vérifiant a chaque fois c'est très long.

cela serait encore plus compliquer si la macro devait prendre toute les variables en compte. je pense que pour un debut c'est déjà beaucoup.

merci de ta réponse rapide.

Si tu ne fournis aucune règle ça va être un remplissage aléatoire.

Pas sûr que ça t'aide vraiment...

Comme je n'aime pas tirer les vers du nez je vais aller voir ailleurs.

eric

Bonjour,

Salut Eric !

Le schéma qu'indique ton tableau à 28 équipes offre une possibilité de tirage...

1) constitution pour la saison de 4 groupes de 7 (correspondant à tes colonnes)

2) une journée définit 7 sites de rencontres (une ligne par site) : on peut bâtir 7 journées offrant au total 49 lignes différentes les unes des autres (chaque équipe d'un groupe se trouvera une fois et une seule associée à chaque équipe de l'un des trois autres groupes)

[tu n'utilises que 35 lignes (5 journées), donc possibilité de 2 journées supplémentaires...]

Mais il conviendrait que tu précises le nombre d'équipes en prendre en considération, et, comme le demande Eric, les règles du jeu applicables.

Si le schéma à 28 est jouable, ce que je proposerais volontiers :

1) Tirage saison pour constituer 4 groupes : 28 équipes offrent 1 184 040 combinaisons différentes de 7 équipes (du moins au tirage du premier groupe...), mais cela laisse la possibilité de critères restrictif ou sélectif, d'une saison à l'autre en conservant suffisamment de possibilités pour que le tirage demeure faisable...

2) Sur la base de la répartition en 4 groupes, on peut composer 7 journées : si on en utilise que 5, tirage des journées utilisées (et ordre...)

3) Pour chacune des journées, tirage possible des sites...

Cordialement.

bonjour Mferrand,

moi il me faut impérativement 4 équipes pas plus par ligne de mon tableau car 1ligne correspond à un lieu de rencontre et pas moins de 3 .

pour le nombre d’équipes il varie selon les mois et les années, et ce mois ci j'en avait 27 donc le 28 ieme était un exempté (donc 3 équipes au lieu de 4 pas le choix) le mois dernier j'en avais 30(6 groupe de 4 et 2 groupes de 3),

le groupe de trois est aussi une contrainte car je ne mets pas 2 fois une équipe dans un groupe de trois sur le mois par soucis d’équité.

d’après ce que tu explique ça l’air de correspondre,

que voulez vous dire par règle applicable?

à part vous dire que sur chaque lignes il ne doit pas y avoir de double

dans chaque journée toutes les équipes doivent obligatoirement participer et qu'une seul fois chacune

et que au cour du mois et ça je ne sais pas si c'est toujours possible,deux équipes ne se rencontre qu'une fois.

j’espère que c'est assez clair et vous remercie pour votre attention.

La question qui ne paraît pas vraiment clarifiée reste que ton tableau modèle inclut 28 équipes pour une journée.

Pas 26, ni 30, ni autre... 28!! On ne voit donc pas la matérialisation de cas correspondants à un nombre d'équipes différent de 28.

Pour un tableau de 28 équipes, jusqu'à 7 journées de rencontre, on le construit assez facilement...

Pour d'autres cas je n'en sais rien tant que des règles précises ne sont pas édictées, permettant d'évaluer leur compatibilité avec le modèle de répartition à 28 ou non (et dans ce cas, on repart pour calculer un autre modèle adaptable à la nouvelle configuration....)

j'ai compris pourquoi dans mon tableau le numero 0 c'est la 28 ieme équipe, comme je le disais plus haut vue le nombres d'essais que j'ai fais je m'y perd,donc le 0 (28) ne correspond à aucune équipes .

quand sur une ligne il y a 0, le groupe se retrouve a 3 équipes.

Oui, il y a en effet un 0 dans 4 journées de rencontres sur les 5...

Cela permet en effet de rendre 27 équipes compatible avec un tirage sur 28.

On peut également y assimiler les cas de 26 ou 25 équipes, pour lesquels en éliminant la configuration journée qui alignerait les trois 0, il reste 6 journées de 7 sites, donc 42 lignes n'introduisant aucun doublon de rencontre.

Mais à partir de 24, on change de configuration : aurait-on alors des lignes de 4 équipes sur 6 sites au lieu de 7 ? Dans ce cas, les combinaisons lignes ne sont plus de 49 mais de 36...

Ou bien maintient-on 7 sites avec 4 lignes de 3 équipes (sur les 7) par journée.

Et les cas supérieurs à 28 n'ont pas du tout été évoqués.

oui si il y a moins d’équipes on privilégie les groupes de 4 donc moins de lieux de rencontres

essayez vous de prendre toutes les variables en compte?

c'est a dire le nombre d’équipes qui varie?

parce que si c’était le cas,comme je l’écrivais tout à l'heure il peut y avoir plus de 28 équipes.

pensez vous que c'est possible d’intégrer cette variable?

En privilégiant les groupages de 4 par site, à 28 équipes : 7 sites par journée, 49 combinaisons de rencontres (7 journées sans doublons)

A 24 : 6 sites par journée, 36 combi... (6 journées sans doublons)

A 20 : 5 sites par journée, 25 combi... (5 journées sans doublons)

Il faut prendre en compte que le nombre de journées sans doublon est à diminuer de 1 pour les cas intermédiaires (soit 26 et 25, 22 et 21, 18 et 17...) pour lesquels il conviendra d'éliminer la journée qui alignerait les "trous" sur la même ligne.

Le schéma faisant état de 7 sites sur lesquels on regroupe 4 équipes : 7*4 = 28 ! Au delà de 28, il faut savoir ce qu'on fait de celles en plus... ?

dans le cas où il y a plus de 28 équipes on rajoute un lieu de rencontre à chaque journée.

dans le cas de 29 équipes on serait tenu de faire 5 lieux à 4 équipes et 3 lieux à 3 équipes.

pour 31 ca fait 7*4+1*3

et ainsi de suite

On joue donc sur le nombre de sites...

Un autre point pas complètement défini, on a vu que le nombre de journées définissables sur un seul tirage correspond au nombre de site (-1 éventuel selon le nombre de groupages à 3 au lieu de 4).

Si on tire plusieurs journées en même temps, cela suppose la permanence des équipes sur l'ensemble de ces journées.

Ou bien est-ce que ton tirage doit être fait par journée indépendamment les unes des autres ?

Dans l'immédiat je lâche pour m'occuper de mes approvisionnement alimentaires... !

je vous en pris cela m’ennuierais fortement de vous empêcher de manger

sinon je n'ai pas totalement saisi ce que vous disiez.

la définition du nombre de journée vient de l'organisme qui gère le sport,donc indépendamment de ma volonté .

pour être très précis, comme c'est basé sur le rythme scolaire et que les rencontre se font le samedi,

la 1ière phase du championnat débute en septembre jusqu'en octobre(vacances)

puis la 2ième phase en novembre jusqu'à la trêve début décembre (4 journée),

la troisième phase celle que je viens de faire de mars à avril (5 journée)

et une 4ième phase sera faite mais je ne sais pas encore les dates

vous comprendrez que c'est pour tout cela qu'au debut je ne voulait pas tout inclure dans la macro,

beaucoup de variable.

je vous remercie encore pour vos efforts même si tout cela n'aboutis pas (ce que je ne souhaite pas) je m’entonnerait toujours de vos implications......respect.

Je révise un peu ce que j'ai dit (même si tu n'avais pas tout compris... ! )

Si 7 se prête aisément à des décalages (7 n'étant pas divisible par 2 ou 3), ce qui permet d'obtenir 7 journées distinctes sans recoupement facilement. Même chose pour 5. Il n'en est pas de même pour 6 ou 8... Pour 6 par exemple, je peux obtenir au plus 5 journées distinctes, et il faut que j'introduise des irrégularités dans les décalages... (j'ai fait un petit simulateur pour essais : je peux obtenir pragmatiquement divers lots de 5, mais je n'ai pas de règle mathématique homogène que je pourrais appliquer pour tous les cas).

Je m'accorde un temps de préétude supplémentaire ( ). De toutes façons, demain je n'aurai pas le temps d'y travailler.

Mon objectif est après déduction à partir du nombre d'équipes du nombre de sites qui pourra aller de 5 à 9 (au moins), on aura un tirage pour définir 4 groupes, puis une répartition par sites en nombre donc variable mais pour lesquels je voudrais pouvoir appliquer la même procédure...

Bonne soirée.

merci bonne soirée a vous.

Bonsoir,

J'ai mis à profit hier les trous dans mes activités administratives (incontournables !) pour lister une foule de lots de combinaisons compatibles...

La divisibilité des nombres étant aussi incontournable, je ne pouvais avoir un listage unique pour chaque lot quel que soit le nombre de sites, hormis pour 5 et 7... mais il était possible de gérer des exceptions...

Cependant, une autre difficulté apparaît lorsque le nombre d'équipes n'est pas divisible par 4. J'avais pensé partager les trous entre les groupes mais dans ce cas, ou on réduit fortement les possibilités de tirage, ou on l'on aura une probabilité plus forte d'avoir 2 équipes sur un site... Je vais donc reprendre en concentrant les trous sur un seul groupe, ce qui devrait assurer que l'on ait toujours au moins 3 équipes sur un site...

Un autre critère était la programmation simultanée de plusieurs jours de rencontre, sans doublon. Il faudrait savoir quel est le nombre max. de jours de rencontre à programmer sur un même tirage.

Les possibilités sont de 5 journées pour 5 ou 6 sites, 6 journées pour 8 sites, 7 journées pour 7 ou 9 sites. Si donc l'on n'a pas à programmer plus de 5 journées sur une session, ça colle...

bonsoir,

avec ce que je comprend j'aimerais émettre une hypothèse

si on part sur un programme qui ne fais que 5 journée et strictement 5,

et que j'ai besoin de 7 journées je me disais que je pourrais faire mes 5 premières journées qui me donnerons mes 5 premiers tableaux

avec un premiers brassage, et pour faire mes 2 derniers tableaux je recommence a zéro en remplissant le trois premier tableaux par le brassage sur les 3 dernière dates qu'il ma donné avant. je ne sais pas si je suis bien clair! je part sur le principe que sur 7 dates il peut y avoir quelques équipes qui ce sont déjà rencontré, ce n'ai pas la fin du monde .

même si il n'est pas parfais un programme comme cela me ferais gagner un temps énorme.

Bonjour,

On ne va pas résoudre tous les problèmes, mais on va essayer d'avance un peu !

J'ai laissé ta feuille de côté, et repris les données de base utiles pour le tirage dans une nouvelle feuille (Feuil1, que tu peux nommée comme tu veux, le nom n'est pas utilisé dans le code) et j'ai inséré une nouvelle feuille (Répartition, nom utilisée dans le code, pour afficher les résultats).

Feuil1 comporte :

-en col. A la liste des équipes, qui est la liste avec laquelle on fait le tirage et la répartition, donc devra être à jour pour tirer : plage nommée dynamique : Equipes

-en col. E la liste des sites : également plage nommée dynamique : Sites

Selon le nombre d'équipes, on utilisera plus ou moins de sites. La liste des sites peut être plus longue que le nombre de sites utilisés, mais tenir compte que si on utilise 6 sites ce seront les 6 premiers de la liste, si on en utilise 8 ce seront les 8 premiers... (les non utilisés sont ignorés et veiller à ce qu'il y ait au moins autant de sites dans la liste que d'utilisés (pas de vrrouillage sur ce point, les sites manquants ne seront pas mentionnés).

-en C2 le nombre de jours de rencontre à programmer, qui doit être indiqué avant de lancer la procédure (cellule nommée : NbJR)

On trouvera également en C6 le nombre d'équipes listées en A et en C8 le nombre de sites découlant du nombre d'équipes : ces données sont calculées par formules, et sont là à titre indicatif (dans le code, ces éléments nécessaires à la répartition sont recalculés).

Et un bouton (Tirage) lançant la procédure.

A suivre.

Tout le code est en Module1, et comporte plusieurs procédures.

La procédure lancée par le bouton Tirage se nomme : TirageSession. Elle activera tour à tour, les diverses procédures utiles au tirage est à la répartition.

Certains éléments étant utilisés par plusieurs procédures, il sont stockés dans des variables de niveau module :

grp() : tableau de type String, destiné à accueillir la répartition des équipes en 4 groupes et qui sera dimensionné précisément en fonction du nombre d'équipes

grilR : variable de type Variant qui accueillera la grille de répartition utilisée.

Cette grille est constituée d'un tableau de 21 valeurs numériques (indices de 0 à 20), chaque groupe de 3 valeurs correspondant à une journée de tirage (soit 7 journées possibles, dont les 3 dernières ou les 6 dernières sont invalidées selon le nombre d'équipes.

Les 3 valeurs correspondant à une journée indique l'alignement des groupes 2 à 4 pour cette journée, par rapport au groupe 1 fixe.

Un exemple permettra de comprendre :

Prenons 3 valeurs pour la journée x qui sont 0 1 3, ces nombres correspondent à la position d'une équipes dans un groupe (le nombre d'équipe d'un groupe est égal au nombre de sites, et leur numérotation va de 0 au nombre de site -1.

Donc : on associera pour le 1er site : l'équipe 0 du groupe 1 à l'équipe 0 du groupe 2, et à l'équipe 1 du groupe 3 et à l'équipe 3 du groupe 4. Pour le second site, on incrémente chaque numéro de 1. De même pour le 3e, et ainsi de suite...

Si nos 3 valeurs étaient 0 2 6 : l'association pour le 1er site serait : équ.0 gr1 /équ.0 gr2 /équ.2 gr3 /équ.6 gr4 (et incrémentation de 1 pour les site suivant). Mais le 6 du groupe 4 ne correspond au numéro d'équipe que si 7 sites sont utilisés, si l'on n'en utilise que 6, ce sera l'équipe 0 (6 modulo 6 = 0), si l'on n'en utilise que 5, ce sera l'équipe 1 (6 modulo 5 = 1).

Cela permet d'incrémenter sans se soucier de la valeur atteinte, et de limiter le nombre de grilles utilisables...

Ce système peut être comparé à un groupe de roue crantée ayant même nombre de cran : par rapport au cran 0 de la première roue, on fait tourner les 3 autres pour produire autant d'alignements différents que l'on peut (chaque alignement différent est fourni par un groupe de 3 valeurs sus-indiqué), donc le tirage d'une grille de répartition (voir plus loin) nous fournit un lot de combinaisons des équipes sans doublon pour un nombre donné de jours (dépendant du nombre d'équipes).

Au lancement, la proc. de base récupère le nombre d'équipes, et le nombre de jours à programmer.

Si ce nombre de jours n'est pas servi la procédure s'interrompt ! (NB- si l'on s'amuse à taper autre chose qu'un nombre, on aura une erreur d'exécution, je n'ai pas jugé utile de récupérer ce type d'erreur... )

La proc. vérifie ensuite que le nombre d'équipes ne soit pas inférieur à 17 ou supérieur à 36 : dans ce cas, elle indique qu'on est hors limite en nb d'équipe et s'arrête.

C'est un blocage que je nommerais conjoncturel : il ne signifie pas qu'on ne puisse traiter selon les mêmes critères moins de 17 équipes ou plus de 36, mais que ce n'est pas prévu dans le programme actuel. E, effet en dessous de 17 on passe à 4 site, et au-dessus de 36 on passe à 10, les grilles de répartition possible n'étant pas calculées pour ces valeurs, le programme ne peut les fournir ! Mais si ces cas surviennent on pourra opérer les calculs préalables et ainsi accroître le champ de répartition du programme...

A la suite, la procédure établit le nombre maximum de journées programmables selon le nombre d'équipes.

Ce max. peut varier actuellement (pour les nb d'équipes traités) de 5 à 7. Si le nombre demandé est supérieur au max, la proc s'interrompra.

A l'inverse du blocage précédent (qui pourra être surmontée sans modifier le déroulement du programme, mais simplement en y ajoutant les éléments de paramétrage nécessaires aux extensions qui seront alors souhaitées), ici on est ssur un blocage qui n'a pas de solution dans le fonctionnement actuel du programme. On pourra certainement poursuivre la recherche des solutions à cet égard mais pour l'instant, je n'en dispose pas de satisfaisantes, et il est prévisibles que des solutions aboutiraient à modifier le déroulement du programme... Laissons ce point de côté pour l'instant.

Cet ensemble de vérification étant accompli, la proc. peut lancer le tirage des équipes (répartition en 4 groupes) : procédure TirageGroupes en lui passant le nb d'équipes en argument.

A suivre

Rechercher des sujets similaires à "creation macro type solver sudoku 2013"