VBA - Nouveau mystère

Bonjour,

J’ai à nouveau un gros mystère irrésolu. Avec le fichier ci-joint, je prépare des matchs de pétanque, le but étant d’arriver à un équilibre en fin de saison entre le nombre de fois joué avec la même personne et le nombre de fois ayant joué en triplette.

J’effectue donc tout d’abord - à l'aide du bouton ''Tirage'' placé sur la feuille ''Base'', un tirage au sort des personnes indiquées présentes en favorisant les personnes ayant déjà joué souvent en triplette puis un deuxième tirage au sort aléatoire des doublettes ou triplettes.

Les personnes choisies sont reportées dans la plage B2:G11 de la feuille ‘’Equipes’’.

De la ligne 244 à la ligne 286 de la macro ‘’Tirage’’ je relève dans la plage H2:M11 de cette feuille ‘’Equipes’’ les paires de joueurs reportées dans la plage B2:G11 qui joueraient ensemble ce match.

La suite de la macro contrôle que ces paires de joueurs aient joué le moins possible ensemble, relève ce tirage sur la feuille ‘’Mémoire Avec’’ et lance un prochain essai à la ligne 402

Le nombre d’essais (itérations) est déterminé par la valeur inscrite dans la cellule F9 de la feuille ‘’Base’’.

Lors de ce prochain essai, une comparaison est faite avec le meilleur tirage déjà enregistré sur la feuille ‘’Mémoire Avec’’ et éventuellement remplacé.

A la fin des itérations, le meilleur tirage de la feuille ‘’Mémoire Avec’’ est reporté sur la feuille ‘’Equipes’’ afin d’afficher le résultat final à la plage BA100:BG105 de cette feuille.

Mon problème est que lorsque je lance cette macro au pas-à-pas, je n’ai jamais de problème – bien que je ne puisse pas simuler 200 itérations – mais lorsqu’elle se déroule normalement, il y a une fois sur 5, une fois sur 10, des résultats bizarres dans la plage H2:M11 de la feuille ‘’Equipes’’ ; les paires de joueurs créées normalement à partir des noms de la plage B2:G11 sont alors farfelues, avec des données très bizarres (par exemple ‘’T’’ ou ‘’ 0.329366028308868’’) et des accouplements insolites. Tout ceci est visible sur l’état actuel le fichier ci-joint.

A noter que ces données ‘’T’’ ou ‘’ 0.329366028308868’’ semblent venir de la feuille ‘’Base’’, aux colonnes J et K, colonnes utilisées provisoirement durant le déroulement de la macro.

A noter enfin que le problème arrive plus souvent – semble-t-il – si 3 triplettes sont nécessaires, par exemple si 19 joueurs sont présents.

Avez-vous une idée afin de résoudre ce problème ?

Amicalement.

18demo.xlsm (124.78 Ko)

Salut Yvouille,

Ta Sub() Tirage étant dans un module, perso, j'utiliserais plutôt WITH pour être certain que chaque valeur atterrit au bon endroit.
En ayant spécifié précisément la feuille 'Base' à ces endroits ci-dessous, le problème a disparu (je n'ai plus testé mille fois non plus).

' i a toujours la valeur du dernier rang traité !
[J1] = "Aléatoire"
For j = 2 To Range("G" & Rows.Count).End(xlUp).Row
    If Range("I" & j) = i Then
        Worksheets("Base").Range("J" & j) = Rnd
    Else
        Worksheets("Base").Range("J" & j) = 0 ' Sinon ça ne prend pas en compte cette ligne pour le tri
    End If
Next j

Range("G:J").Sort Key1:=Range("J1"), Order1:=xlDescending, Header:=xlYes

' Soit il n'y a pas de triplettes, soit les joueurs pour les triplettes sont tout au sommet de la liste.
Préparation_des_équipes:  ' C'est en fait une étiquette de "Retour".

[K1] = "T ou D"
For i = 2 To Range("G" & Rows.Count).End(xlUp).Row

    If i <= Nombre_Joueurs_en_triplette + 1 Then
        Worksheets("Base").Range("K" & i) = "T"
    Else
        Worksheets("Base").Range("K" & i) = "D"
    End If

    ' Tous les joueurs reçoivent - à nouveau pour certains - un nombre aléatoire
    Worksheets("Base").Range("J" & i) = Rnd

À tester plus avant!

A+

bonjour Yvouille,

il faut supprimer le plus que possible les "Sheets("...").activate" et apprendre à écrire et lire dans une feuille qui n'est pas activée.

Je ne sais pas où, mais je suppose que vous quittez une macro vers une autre, quelque part au milieu sans retourner à la feuille souhaitée originale. (En principe, c'est la même remarque, ce With ... End With, que Curulis, salut!)

Salut Curulis,

J’ai testé ta solution, mais bizarrement, il semble que le brassage de joueurs ne se fait plus très bien.

J’ai effectué deux essais avec 30 tirages chacun : avec ton code, il y a jusqu’à 17 fois les mêmes joueurs ensemble alors qu’avec le code non corrigé, il y a de temps en temps le problème décrit dans mon premier message – ici 4 fois sur 30 – mais semble-t-il un meilleur brassage.

C’est un ancien fichier que j’avais abandonné à l’époque et que j’avais ressorti par hasard. Je crois donc que je ne vais pas continuer à me casser la tête là-dessus.

Merci donc infiniment pour ton aide.

Amicalement.

image image
Rechercher des sujets similaires à "vba nouveau mystere"