Rotation

Bonjour,

Je suis à la recherche d'une formule excel pour répartir 49 participants sur des tables de 7.

Il faut que tous les participants puissent tous se rencontrer sans rencontrer deux fois la même personne..

es ce que vous auriez une idée ?

Merci d'avance

Bonjour,

à tester

Edit : mercis aux codeurs macro pris sur le forum

le tri s'effectue à partir de l'onglet 'Tirages'

crdlt,

André

Merci beaucoup de m'avoir répondu.

Mais comment puis-je faire pour connaitre les autres tables ?

Bonjour et bienvenue sur le forum

En moins bien que la proposition de Andre13....

Bye !

30classeur1-v1.xlsm (26.75 Ko)
gmb a écrit :

Bonjour et bienvenue sur le forum

En moins bien que la proposition de Andre13....

Bye !

Merci beaucoup pour votre réponse ce que je n'arrive pas a comprendre c'est comment obtenir les tables suivantes car toute les personnes doivent se rencontrer sans rencontrer deux fois la même personne.

Re,

en concaténant

je te mets cela d'ici 5 minutes

Merci beaucoup pour votre réponse ce que je n'arrive pas a comprendre c'est comment obtenir les tables suivantes car toute les personnes doivent se rencontrer sans rencontrer deux fois la même personne.

heu lààà pour l'instant aucune idée

oh

Re,

j'ai masqué des colonnes inutiles le temps de voir

bon là toujours pareil sur l'onglet 'Tirages' remets aléatoirement les NOM+Prénoms+N° de tables

crdlt,

André

Merci pour votre aide.

Je n'arrive pas à utiliser la fonction tirage car ma version d'excel n'est pas la même

Re,

et la version De Gmb fonctionne t'elle avec votre Version d'Excel ?

en attente ...

crdlt,

Andre

seulement en lecture seule malheureusement

Re,

C'est-à-dire que c'est l' accès restreint au logiciel d'Excel sur votre ordinateur ?

qu'en lecture seule

si c'est cela, c'est bien dommage mais il est possible de le télécharger et le tester sur un autre ordinateur ayant Excel.

si j'ai bien compris

crdlt,

André

Je suis entrain de télécharger le pack office la version est gratuite pendant 1 mois cela devrait marché après

bonjour,

une proposition, à vérifier

Re

Jolie ! tu es trop fort H2so4 ^^^ merci à toi

bonjour,

@andré

merci !

Merci à tous pour vos réponses !

Bonjour,

pour que 49 personnes puissent rencontrer chacunes des 48 autres sur 7 tables, il faut 8 rotations. je n'en avais mis que 7.

voici une version adaptée

Bonsoir, Salut à tous !

Il faut d'abord savoir que le type de ta question (grouper des participants et faire tourner pour que chacun puisse être associé à tous les autres dans un groupe), sous son aspect simpliste demeure un problème mathématique complexe à résoudre, que selon le nombre de participants et de groupes il est loin d'y avoir toujours une solution.

Divers mathématiciens renommés ont traités des morceaux de la question de façon à définir les cas possibles ou non, et établir des méthodes pour les différents cas.

Je ne prétendrais pas traiter mathématiquement la question, mais la configuration 49 en 7 groupes, d'une part permet une répartition de tous : 7*7=49, et d'autre part permet à chacun d'être associé à chacun des autres à chaque tour : 48 autres participants, 6 autres que lui par groupe, 6*8=48, donc 8 tours doivent permettre ces associations...

Par ailleurs les combinaisons de 7 éléments parmi 49 représentent 85 900 584 combinaisons. Les associations recherchées 7 tables en 8 tours utiliseront 56 combinaisons compatibles. Si l'on répartit l'ensemble des combinaisons en groupes de 56 compatibles (je pense que c'est possible, mais je ne m'amuserai pas à chercher à le faire), on pourrait épuiser l'ensemble des possibilités de regroupement en 1 533 939 fois 8 tours...

Dans la pratique il est donc tout à fait préférable de s'en tenir à un système de regroupement utilisant 56 combinaisons compatibles à prédéfinir.

Si on part des combinaisons d'un tour :

2017 11 09 003006

chaque colonne représentant une table.

En gardant la 1re ligne fixe, et en décalant chaque autre ligne de 1 pour la 2e, 2 pour la 3e, ...6 pour la 7e, et en répétant 6 fois cette opération, on obtiendra 7 tours où chacun est associé à chaque fois à des participants différents. Le 8e tour pour boucler n'est que la transposition du diagramme initial qui associe les membres de chaque lignes qui n'ont pu l'être au cours des décalages précédents.

On peut donc construire cette configuration qui constituera un tableau de paramètres pour la répartition. Une procédure pour construire ce tableau :

Sub Paramètres()
    Dim i%, ln%, tr%, Tbl(62, 6)
    For tr = 0 To 6
        For ln = 0 To 6
            For i = 0 To 6
                Tbl(ln + tr * 8, i) = (i + ln + ln * tr) Mod 7 + ln * 7 + 1
            Next i
        Next ln
    Next tr
    For ln = 0 To 6
        For i = 0 To 6
            Tbl(ln + 56, i) = ln + i * 7 + 1
        Next i
    Next ln
    ActiveSheet.Range("B2").Resize(63, 7).Value = Tbl
End Sub

Cette procédure fixe donc sur une plage de la feuille sur laquelle on l'exécute un tableau de 63 lignes sur 7 colonnes, composée de blocs de 7 lignes sur 7 colonnes, et une ligne vide séparant chaque bloc (au cas particulier sur la plage B2:H64).

A noter que si l'on remplace les numéros 1 à 49 par des noms de participants, on a là les 7 tables sur 8 tours. A noter aussi que si la procédure permet de reconstruire ce tableau de base, on n'a normalement besoin de le constituer qu'une fois. Une fois fait, il demeure...

L'établissement de ce schéma de répartition en groupes, répondant aux critères, ne fait appel à aucun tirage aléatoire, celui-ci intervient par l'affectation à chaque participant d'un numéro de 1 à 49 tiré aléatoirement, sans doublon.

Plaçons donc sur un autre feuille, d'abord la liste des participants, disons sur la plage B2:B50 (on réserve la colonne A, que l'on pourra masquer, pour y placer les numéros tirés).

Préparons un tableau de répartition : F3:L9 (7 lignes sur 7 colonnes) sera le 1er tour, F11:L17 sera le 2e tour... on va ainsi jusqu'à F59:L65 pour le 8e tour. On notera que le tableau global F3:L65 est de taille égale au tableau de paramètres constitué précédemment (63 lignes sur 7 colonnes) et que chaque emplacement dévolu à un participant correspond à un numéro dudit tableau.

On peut donc placer une formule tout à fait simple sur le tableau que nous venons de définir, en F3 :

=SIERREUR(RECHERCHEV(Param!B2;$A$2:$B$50;2;FAUX);"")

Cette formule, utilise le numéro figurant sur le même emplacement du tableau paramètre pour le rechercher en A et renvoyer le nom de la même ligne en B (liste des participants).

On copie donc cette formule sur tout le tableau F3:L65 (à l'exclusion des lignes de séparation), et dès lors qu'on aura affecté une liste de numéros tirés en A2:A50, le tableau sera entièrement servi.

Dans ces conditions la procédure de tirage se simplifie :

Sub Tirage()
    Dim Tbl(1 To 49, 0), tx$, k$, i%, x%
    For i = 1 To 49
        tx = tx & Chr(i + 32)
    Next i
    Randomize
    For i = 1 To 49
        x = Int(Len(tx) * Rnd + 1)
        k = Mid(tx, x, 1)
        Tbl(i, 0) = Asc(k) - 32
        tx = Replace(tx, k, "")
    Next i
    ActiveSheet.Range("A2:A50").Value = Tbl
End Sub

Un clic sur un bouton Tirage, la procédure affecte une liste de numéros 1 à 49 sans doublon en A2:A50, et la formule (unique) répercute les noms dans le tableau de répartition de 7 tables de 7 en 8 tours. Système simple, avec un code réduit et une seule formule élémentaire...

Cordialement.

Rechercher des sujets similaires à "rotation"