• Initiateur de la discussion Initiateur de la discussion em34
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

E

em34

Guest
bonjour,

je cherche à réaliser un tirage au sort dont les hypothèses sont :

24 joueurs,
repartis par table de 4 joueurs (donc 6 tables)
et je voudrais faire 5 roulements (soit 6 parties).

à chaque roulement, tous les joueurs changent de table.

il faudrait qu'après les 6 parties, aucun joueur ne se soit rencontré 2 fois.

merci d'avance.

Eric
 
Re : Tirage au sort

bonsoir em34, Icedarts et le forum,


Un essai de tirage de six parties à 4 joueurs sur 6 tables.

1- Le tirage s'effectuer avec le bouton tirages parties.
2- Les scores des parties seplacent en regard des joueursdans les feuilles de chaque parties.
3- Le classement des joueurs s'effectue selon le nombre de victoires et de points.
4- Le bouton MISE A ZERO permet l'effacement des scores et des tirages précédents.
 

Pièces jointes

Re : Tirage au sort

Bonjour à tous
bonjour,

je cherche à réaliser un tirage au sort dont les hypothèses sont :

24 joueurs,
repartis par table de 4 joueurs (donc 6 tables)
et je voudrais faire 5 roulements (soit 6 parties).

à chaque roulement, tous les joueurs changent de table.

il faudrait qu'après les 6 parties, aucun joueur ne se soit rencontré 2 fois.

merci d'avance.

Eric
Je doute qu'il soit possible de satisfaire toutes les conditions.
En nommant les 24 joueurs A, B, C, ..., X, je ne parviens à trouver que 35 combinaisons telles que deux joueurs ne se rencontrent pas deux fois :
A B C D
A E F G
A H I J
A K L M
A N O P
A Q R S
A T U V
B E H K
B F I L
B G J M
B N Q T
B O R U
B P S V
C E I M
C F H N
C G K O
C J L P
C Q U W
C R T X
D E J N
D F K P
D G H L
D I O Q
D M R V
D S T W
E L O S
E P Q X
F J O T
F M S U
F V W X
G I N R
H M O W
I K S X
J K Q V
L N U X

Comment faites-vous pour trouver une trente-sixième possibilité ?​
ROGER2327
#3045
 
Re : Tirage au sort

merci à tous pour vos réponses,

je vais préciser ma question :

les 24 joueurs jouent individuellement sur 6 tables de 4 joueurs.

à chaque rotation, les 24 joueurs sont "redistribués".

à chaque rotation, il faut recomposer des tables avec des joueurs qui ne se soient pas rencontrés aux précédents tours.

merci d'avance.

Eric
 
Re : Tirage au sort

Re...
à roger2327,

comment faites vous pour obtenir ce tableau ?
Je procède en deux temps :
  1. Je crée la liste des 10625 combinaisons de quatre éléments pris parmi vingt-quatre ; procédure :
    Code:
    [COLOR="DarkSlateGray"][B]Sub toto()
    Dim a, b&, i&, j&, k&, l&, s$
       a = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X")
       For i = 0 To 20
          s = a(i)
          For j = i + 1 To 21
             s = s & a(j)
             For k = j + 1 To 22
                s = s & a(k)
                For l = k + 1 To 23
                   b = b + 1
                   Cells(b, 1) = s & a(l)
                Next l
                s = Left$(s, Len(s) - 1)
             Next k
             s = Left$(s, Len(s) - 1)
          Next j
          s = Left$(s, Len(s) - 1)
       Next i
    End Sub[/B][/COLOR]
  2. J'élimine de la liste toutes les combinaisons comportant une paire d'éléments figurant dans une combinaison précédente. Plus précisément, je prends la première combinaison : ABCD ; j'élimine dans les combinaisons suivantes toutes celles où figurent A et B, A et C, A et D, B et C, B et D, C et D.
    Cela étant fait, je prends la première des combinaisons restantes qui suit ABCD, c'est-à-dire AEFG ; j'élimine alors parmi les combinaisons suivantes toutes celles où figurent A et E, A et F, A et G, E et F, E et G, F et G.
    Et ainsi de suite ; procédure :
    Code:
    [COLOR="DarkSlateGray"][B]Sub titi()
    Dim b&, i&, j&, k&, s$, t$
       For b = 1 To 10625
          If Not IsEmpty(Cells(b, 1)) Then
             s = Cells(b, 1).Value
             For i = 1 To 3
                t = "*" & Mid$(s, i, 1) & "*"
                For j = i + 1 To 4
                   t = t & Mid$(s, j, 1) & "*"
                   For k = b + 1 To 10626
                      If Not IsEmpty(Cells(k, 1)) Then
                         If Cells(k, 1) Like t Then Cells(k, 1).ClearContents
                      End If
                   Next k
                   t = Left$(t, Len(t) - 2)
                Next j
             Next i
          End If
       Next b
       Range("A1:A10626").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
          OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    End Sub[/B][/COLOR]
Ce faisant, il reste les trente-cinq combinaisons que je donnai plus tôt.

Mon questionnement, que je répète autrement, est : comment peut-on respecter la règle que vous donnez, sachant que six rondes sur six tables requièrent trente-six parties ?
ROGER2327
#3046
 
Re : Tirage au sort

bonjour à tous,

les 35 combinaisons de roger2327 sont sans doute sans doublons, mais elles ne peuvent convenir car on ne peut pas les répartir sur 6 rondes, en effet certains joueurs se retrouvent plusieurs fois sur une ronde.
Je pense que les hypothèses ne peuvent être respectées, l'idée serait alors de récupérer le moins de doublons possible.
 
Re : Tirage au sort

Re...
bonjour à tous,

les 35 combinaisons de roger2327 sont sans doute sans doublons, mais elles ne peuvent convenir car on ne peut pas les répartir sur 6 rondes, en effet certains joueurs se retrouvent plusieurs fois sur une ronde.
Je pense que les hypothèses ne peuvent être respectées, l'idée serait alors de récupérer le moins de doublons possible.
On a là un problème assez compliqué. Je ne suis pas certain que ce que j'ai fait soit une bonne méthode d'approche. On peut certainement trouver plus de trente-cinq tables possibles (ce qui ne veut pas dire qu'on pourra les répartir en six rondes) mais je n'ai pas trouvé de méthode.

Si d'autres veulent se joindre à cette recherche, qu'ils n'hésitent pas !
ROGER2327
#3049
 
Re : Tirage au sort

Suite...
35 n'est effectivement pas la limite ; voici une série de 37 tables possibles sans que deux joueurs se retrouvent face à face :

ABCM BKPU DLNV HLSU
AENW BLTX DMPX HMQV
AFSV CDIR EGSX IMNU
AGIT CFUX EHJT IOWX
AHPR CJOV EIKQ JLPW
ALOQ CNPT FGHO NORS
BDHW CQSW FMTW QRTU
BERV DEOU GJKR
BGNQ DFJQ GUVW
BIJS DKST HKNX

Reste à voir si on peut faire mieux, et par quelle méthode ?​
ROGER2327
#3050
 
Re : Tirage au sort

Bonjour em34 ,Icedarts,Bernard,ROGER

En partant des macros de ROGER 🙂 , voici une liste de 39 tables possibles réalisées grace a la macro ci-jointe

Comme bien souvent , je souhaite qu'elle soit controlée n'etant pas tres doué pour cet exercice

Ensuite on pourra voir de plus pres le probléme initial
 

Pièces jointes

Re : Tirage au sort

Bonjour em34, CBernardT ,Icedarts, pierrejean
Merci à pierrejean de s'intéresser à la question. J'ai ouvert votre fichier avec OpenOffice.org faute de disposer d'Excel2007. Ce faisant, je n'ai pu accéder au code : pourriez-vous le déposer hors du classeur ?
En revanche, j'ai pu étudier la liste de trente-neuf tables et je constate que certains joueurs se retrouvent ; par exemple, A rencontre H deux fois (AEFH, AGHK), B rencontre G et N deux fois (BEGN, BFGP et BEGN, BLNW), etc.

J'ai l'intuition qu'il existe un moyen de calculer le nombre maximum de tables sans rencontre répétée de deux joueurs, mais je ne vois toujours pas lequel...
À suivre...
ROGER2327
#3053
 
Re : Tirage au sort

Bonjour à tous,

Comme le sujet m'intéresse mais que je suis bien incapable de faire progresser la discussion, je me contente de faire le facteur :

Code:
Sub titi()
    Set coll = New Collection
    Dim a, b&, i&, j&, k&, l&, s$
    a = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X")
    For i = 0 To 20
        For j = i + 1 To 21
            For k = j + 1 To 22
                For l = k + 1 To 23
                    quatre = quatre & a(i) & a(j) & a(k) & a(l) & ";"
                Next l
            Next k
        Next j
    Next i
    x = Split(Left(quatre, Len(quatre) - 1), ";")
    n = 0
    While UBound(x) > n
        u = x(n)
        coll.Add u, CStr(u)
        For i = 1 To 3
            For j = i + 1 To 4
                v = Mid(u, i, 1) & Mid(u, j, 1)
                c = InStr(quatre, v)
                While c <> 0
                    d = InStrRev(quatre, ";", c)
                    quatre = Replace(quatre, Mid(quatre, d + 1, 5), "")
                    c = InStr(quatre, v)
                Wend
                x = Split(quatre, ";")
            Next j
        Next i
        n = n + 1
    Wend
    For n = 1 To coll.Count
        b = b + 1
        Cells(b, 1) = coll(n)
    Next n
End Sub
A+ à tous
 
Re : Tirage au sort

Re...
Bonjour à tous,

Comme le sujet m'intéresse mais que je suis bien incapable de faire progresser la discussion, je me contente de faire le facteur :

(...)
Merci, JCGL !
Je n'étudierai peut-être pas la question cette nuit, mais j'y reviendrai.
Au passage, votre modestie vous honore, mais nous savons ce que le forum vous doit...
S'il vous vient une idée sur la question, elle sera bienvenue.
Bonne nuit.
ROGER2327
#3054
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
1
Affichages
450
Réponses
5
Affichages
1 K
Réponses
2
Affichages
878
Réponses
13
Affichages
4 K
Réponses
30
Affichages
3 K
Réponses
6
Affichages
973
J
  • Question Question
Réponses
6
Affichages
858
jilooou
J
M
  • Résolu(e)
Réponses
9
Affichages
3 K
Retour