XL 2021 tirage au sort aléatoire sans doublon

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 !

aubaluc

XLDnaute Nouveau
bonjour
je me penche vers vous car je sèche sur un problème que je vais essayer de vous expliquer clairement
je souhaite effectuer un tirage au sort de 2 tours avec 40 équipes maximum ( le nombre peut être différent )
il faut que dans les 2 tirages il n'y ait pas de doublon c'est à dire que dans chaque match 2 équipes ne se rencontrent pas
j'ai essayé avec la formule ALEA mais je ne suis pas certain de ne pas avoir de doublon
je pense qu'avec une macro se serai plus certain
je vous mets en pièce jointe l'exemple
merci d'avance à celles ou ceux qui voudront bien me dépanner
aubaluc
 

Pièces jointes

VB:
Option Explicit
   #If VBA7 Then
Private Declare PtrSafe Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Private Declare PtrSafe Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
   #Else
Private Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Private Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
      #End If
Sub Essai()
   Dim I&, C0 As Currency, C1 As Currency, F As Currency
   QueryPerformanceFrequency F
   QueryPerformanceCounter C0
   For I = 1 To 40
      Next
   QueryPerformanceCounter C1
   MsgBox 1000000 * (C1 - C0) / F & "µs"
   End Sub
Affiche 3,1µs chez moi.
100 fois plus pour remplir un tableau de long de 40*2 éléments ce n'est pas si déconnant, non ? Après tout s'il n'y a aucun échec les postes de la pile se dépilent aussi vites qu'ils s'étaient empilés. Mais bon, c'est vrai que c'est un peu étonnant …
 
Dernière édition:
oui c'est étonnant après ton algo il fait ce qu'il est sensé faire y a pas de soucis
c'est juste tes chronos qui sont incohérents, demain je fait sauter ton userform et je le remplace par un benchmarck avec celle là ou le module classe pour tester toutes les étapes j'aurais la réponse savoir quand le chrono s'arrête
là je suis crevé j'arrête un peu
 
re Bonjour @Dranreb
oui de toute facon on utilise les mêmes api ça peut pas être différent
et là ton exercice montre bien que tes temps ne sont pas comptabilisés au bon moment dans listaleatoire
puisque ici
pour 500 j'ai eu au départ 999 puis 506 puis 504 puis 506
pour 1000 j'ai eu 1003 1001 1003 1003
c'est correcte donc on en revient a ce que je disais hier
touts ton attirail ne peut pas moins consommer que la simple ouverture du userform
surtout que le code continue de s’exécuter pendant le intialyse du userform puisque dans le initialyse il n'est pas encore modal ,donc même la on a pas vraiment une vraie lecture

petite parenthèse
ce matin avec chatGpt j'ai débattu du bien fondé de l'argumentation de l'ago fisher-yates
tous les tests montrent que soit disant le séquençage de sélection unilatéral avec rnd est faux dans la pratique
bon on parle de nano sec mais bon sur 50000 1000000 ca commence a se voir
mieux vaut utiliser rnd sur la totalité du tableau c'est moins couteux
et voir même biaiser en jouant sur un pivot mais ce n'est plus complétement du hasard même si on a le visuel qui dit le contraire
 
Oui, j'avais aussi constaté à la 1ère exécution des temps exagérés. Probablement dû à des mises en place de ressources par MSForms …
Comment ça pas au bon moment ? Tout pareil que dans ce classeur de test, au démarrage des TirageNvsNOK et autres TiragePostesOK et et avec UFmVisu.Conclure comme dernière instruction.
 
non pas dans celui là de test mais dans l'autre je ne sais plus comment te le dire
si ce test aujourd'hui est juste
celui de hier ne peut pas l'etre autant que le test de hier avec la pause
si une boucle sur 40 sans rien faire dedans fait 3.1µs chez toi tout ton barda ne peut pas faire que1.47µs
même si on prend en compte uniquement le boucles de l'algorytme
après j'ai cherché a part la 2d boucle M qui se déclenche jamais chez moi je vois pas
avec le benchmark et ma fonction je suis entre 150 et 190 µs ce qui est normal et plausible surtout
après ou ca coince la je sais pas c'est tellement imbriqué qu'il y a que toi pour trouver la couleuvre
après on a un depart et une arrivé c'est ca q'il faut tester un tableau de depart un tableau à l'arrivé
tester q'une partie n'a de sens que pour celui qui developpe l'ago le benchmark fait ça tres bien chaque ligne d'un code peut être testé
 
M c'est l'indice de la manche ou du tour si tu préfère.
Il n'y a pas de données de départ hormis le nombre de joueurs et de manches désirés passés en paramètres à la Function Tirage1vs1OK
Celle ci ne produit que le tableau résultant Public Tirage() As Long dimensionné dans la Tirage1vs1OK et garni par la Function RencTrouvée.
Les noms sont appliqués complètement en dehors du processus de tirage par la procédure exploitante d'après un tableau Excel des inscrits et selon les indices contenus dans le tableau Tirage.
 
- 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

Discussions similaires

Réponses
1
Affichages
380
Réponses
5
Affichages
1 K
Réponses
2
Affichages
846
Réponses
6
Affichages
931
Réponses
30
Affichages
3 K
Réponses
6
Affichages
836
Réponses
13
Affichages
4 K
Retour