Macro pour établir un tableau de berger?

videocontact

XLDnaute Junior
Bonjour à tous,

quelqu'un a t-il une macro qui permet la création automatique d'un tableau de berger?

Explication :

j'aimerai définir un nombre d'adversaires, et ensuite Excel me crée un tableau qui me permet a chaque tour de jouer contre un adversaire différent...
Je sais que le tableau de berger donne un tableau qui donne autant de tours que d'adversaire (si par exemple 15 adversaire, donc il y aura 14 tours ou tous finirons par se rencontrer une fois), moi perso j'ai besoins que maximum 6 tours...

Merci de votre aide.
 

videocontact

XLDnaute Junior
Re : Macro pour établir un tableau de berger?

un tableau de Berger c'est :

On défini un nombres de participants, et il crée un tableau qui permet a chacun de se rencontrer 1 fois sur un nombre de tours égales à se qu'il y a d'adversaire..
Désolé pas facile a expliquer avec des mots lol, voir sur wikipédia il y a des exemple de tableau de berger...
 

videocontact

XLDnaute Junior
Re : Macro pour établir un tableau de berger?

Pas vraiment à voir avec des moutons lol

un exemple peut être :

on prend 6 joueurs, ben le tableau donnera 5 rondes ou tous les participants jouent à chaques tours contre chaque fois un adversaires différents et au total des rondes tout le monde c'est rencontré.

Vous voyez plus ou moins?....
 

videocontact

XLDnaute Junior
Re : Macro pour établir un tableau de berger?

voila un exemple pour 10 équipes, désolé pour la mise en forme c'est juste pour donné une idée du résultat..
Merci de votre aide..

je sais qu'il existe en fait une formule pour l'établidssement des tableaux en fonction du nombre de départ...
 

Pièces jointes

  • Exemple tableau de berger pour 10 équipes.xlsx
    12 KB · Affichages: 927

ROGER2327

XLDnaute Barbatruc
Re : Macro pour établir un tableau de berger?

Bonjour à tous


Un essai. C'est un brouillon : ni les formules du tableau 1, ni le code de calcul du tableau 2 ne sont optimisés. Quant aux résultats, il convient de les vérifier...​


ROGER2327
#5661


Vendredi 27 Pédale 139 (Saint Valens, frère onirique - fête Suprême Tierce)
1er Germinal An CCXX, 1,7250h - primevère
2012-W12-3T04:08:24Z
 

Pièces jointes

  • XLD_181004_Tableau de Berger.xlsm
    29.1 KB · Affichages: 768

ROGER2327

XLDnaute Barbatruc
Re : Macro pour établir un tableau de berger?

Bonjour à tous


Simplification importante de la formule du tableau 1...​


ROGER2327
#5663


Samedi 28 Pédale 139 (Dédicace du Tripode - Vacuation)
2 Germinal An CCXX, 0,7748h - platane
2012-W12-4T01:51:34Z
 

Pièces jointes

  • XLD_181004_Tableau de Berger_v2.xlsm
    27.9 KB · Affichages: 503

david84

XLDnaute Barbatruc
Re : Macro pour établir un tableau de berger?

Bonjour à tous,
une proposition à améliorer (sûrement !) mais avant tout à tester.
La modification de la cellule A1 déclenche l'affichage des rotations.
A+
 

Pièces jointes

  • Tableau de Berger.xls
    40.5 KB · Affichages: 504
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Macro pour établir un tableau de berger?

Re-bonjour à tous


Élimination du tableau 1 et de toute formule dans la feuille.
Le calcul se résume en une courte fonction en VBA :
VB:
Function BERGER(p%, q%)
Dim i%, j%, k%, r%
ReDim m(1 To p + p Mod 2 - 1, p + p Mod 2)
ReDim u%(p + p Mod 2)
    If p > 1 And p >= q And q > 0 Then
        r = 2 * ((q + 1) \ 2)
            For i = 1 To q
                If i < r Then m(i, 0) = i
                For j = 1 To q
                    k = (((1 - ((i = r) Or (j = r))) * (i + j - 2)) Mod (r - 1) + 1) * ((i + j - (i > j)) Mod 2)
                    If k Then u(k) = u(k) + 2: m(k, u(k) - 1) = i: m(k, u(k)) = j
                Next j
            Next i
    End If
    BERGER = m
End Function
Voir la mise en œuvre dans le classeur joint.​


ROGER2327
#5666


Samedi 28 Pédale 139 (Dédicace du Tripode - Vacuation)
2 Germinal An CCXX, 5,8359h - platane
2012-W12-4T14:00:22Z
 

Pièces jointes

  • XLD_181004_Tableau de Berger_v3.xlsm
    20 KB · Affichages: 487

david84

XLDnaute Barbatruc
Re : Macro pour établir un tableau de berger?

Re
Bravo Roger !
On voit la différence entre un algorithme posé correctement et une proposition plus "bourrin".
Juste une petite précision que le demandeur n'avait pas donné.
Dans ce genre de tableau, l'ordonnancement de départ a en général son importance pour la constitution des rotations.
En effet, cet ordonnancement est en principe issu d'un classement des joueurs (en fonction des résultats obtenus avant cette compétition) et le joueur n°1 doit avoir pour avantage d'affronter ses concurrents dans l'ordre décroissant du classement (sur une compétition rassemblant 6 joueurs par exemple, il affronte d'abord le n°6, puis le 5 pour terminer par le n°2).

Bien entendu, si la compétition organisée ne tient pas compte de ce paramètre (la place initiale des participants est attribuée par tirage au sort par exemple), alors ce point n'a bien sûr plus d'importance.

Quant à ma proposition, elle ne fonctionnait pas correctement : en voici une autre sur le même principe (toujours aussi bourrin mais puisque j'ai proposé quelque chose, autant essayer d'obtenir quelque chose qui fonctionne à défaut d'être brillant).
A+
 

Pièces jointes

  • Tableau de Berger_v2.xls
    39.5 KB · Affichages: 326

ROGER2327

XLDnaute Barbatruc
Re : Macro pour établir un tableau de berger?

Bonjour david84, bonjour à tous


J'ai lu vos remarques avec attention. Je suis d'accord avec vous que l'organisation de rencontres (sportives ou non) doit répondre à des contraintes très diverses, quelquefois inconciliables. Dans le cas qui nous intéresse, il ne s'agit pas d'organiser un tournois de foutebal ou de ruguebi, mais d'établir la table de Berger pour un nombre donné de participants. Cette table est parfaitement définie par un ensemble de règles strictes ne permettant guère de fantaisie.
Toutefois, vos remarques m'ont incité à revoir mes classiques et à ne pas faire uniquement confiance à ma mémoire ; soyez en remercié car en cherchant un peu je me suis aperçu que la solution que je proposais plus haut, sans être fausse, n'était pas la meilleure. Merci aussi à Wikipédia qui donne tous les éléments du problème.
Je propose une solution qui me semble répondre à l'ensemble des règles fixées par Johann Nepomuk Berger dans le classeur joint.
La feuille BERGER est la feuille principale.
Les feuilles Feuil1 et Feuil2 ne sont là que pour comparer la nouvelle solution à l'ancienne, et peuvent être supprimées.

Vos remarques sont évidemment bienvenues !


ROGER2327
#5679


Lundi 2 Clinamen 139 (Saints Hiboux, maîtres - chanteurs - fête Suprême Quarte)
4 Germinal An CCXX, 7,1461h - tulipe
2012-W12-6T17:09:02Z
 

Pièces jointes

  • XLD_181004_Tableau de Berger_v4.xlsm
    69.2 KB · Affichages: 634

david84

XLDnaute Barbatruc
Re : Macro pour établir un tableau de berger?

Bonjour Roger2327,
Vos remarques sont évidemment bienvenues !
J'ai regardé votre dernier fichier avec attention comme le mérite ce genre de production (je renouvelle mes applaudissements !).
Je ne dis pas que j'ai tout compris (en fait, je n'ai pas tout compris !) mais je vous livre mes quelques remarques :

1° Concernant le résultat obtenu, il me semble que rien n'ait été oublié :
- chaque joueurs rencontre tous les autres une seule fois
- respect de l'alternance entre les rencontres à domicile (ou l'obtention des blancs aux échecs) et des rencontres à l'extérieur (pas plus de 2 fois de suite le fait de recevoir ou se déplacer, ou de jouer avec la même couleur)
- avantage donné à ceux figurant dans la 1ère partie du classement de recevoir à domicile une fois de plus que de jouer à l'extérieur
- ajout d'un joueur fictif dénommé Bye (Stan D. de son prénom) si nombre impair de participants

Le tableau annexe (celui de la feuille 1) permet à chaque participant de visualiser quel adversaire il affronte à telle ronde, s'il reçoit (ou joue avec les blancs) ou se déplace.
2 remarques concernant ce tableau :
- bye n'est pas indiqué (ce n'est pas gênant à mon avis mais je vous le signale au cas où)
- peut-être préciser à quoi sert la MFC (personnellement, je ne l'ai pas comprise).

2° Concernant l’algorithme utilisé, sans entrer dans le détail du mode de calcul de k (j'ai d'ailleurs du mal à en démonter toutes les étapes - je ne parle pas du calcul en lui-même mais du raisonnement sous-jacent) , je remarque que vous utilisez du calcul Booléen en lieu et place de conditions (if...then), le vrai ou faux ramené étant directement intégré dans le calcul de la valeur de k.

Indépendamment de la concision du code, quel est selon vous l'intérêt de cette façon de procéder ?
Gagne-t-on en vitesse de traitement ?
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 934
Membres
103 404
dernier inscrit
sultan87