Tirage alétoire à 2 conditions

jacky49

XLDnaute Impliqué
Bonsoir,

après avoir regardé dans les autres messages, je n'ai pas trouvé exactement ce que je cherchais.
En me servant des cellues G4 :Nbrs de Poules et de la cellule H4: Nbrs de patineurs par poules,je cherche à faire un tirage aléatoire par poules de 6 patineurs maximum à 2 conditions qui se classe en feuille Série à partir de la cellule A5.
1ère conditions : que des patineurs du même clubs ne se rencontre pas dans la même poule( sauf si il n'y a pas le choix)
2ème conditions : que les têtes de séries(T D S dans la colonne observations) ne se rencontrent pas.(sauf si on ne peut pas faire autrement)
merci de l'aide que vous pourrez m'apporter.
jacky
 

Pièces jointes

  • Tirage Aléatoire à conditions.xls
    28 KB · Affichages: 43

Odesta

XLDnaute Impliqué
Re : Tirage alétoire à 2 conditions

Bonjour Jacky49
Après réflexion il semble qu'un code gérant toutes les situations soit relativement long à créer. Aussi, voici une première proposition (à coder), qui pourra être améliorer étape par étape :

Proposition de code :
-déterminer le nombre de ligne
-aléatoirement, et jusqu'à ce que les lignes soient toutes utilisées (faire un tableau #T1 avec marqueurs d'utilisation (un marque pour la poule en construction (voir plus bas) et un marqueur pour indiquer que le joueur est déja pris et dans quelle poule)


-Prendre le premier joueur ; déterminer son Club et son Observation
-Aléatoirement, prendre un joueur de club différent (avec un fonction qui se répète si le club est le même. La fonction doit remplir le tableau #T1 pour éviter que le programme ne boucle) ayant TDS. Si aucun trouver (c'est à dire que le marqeur sur #T1 est présent sur tous les joueurs ayant TDS), chercher TDS dans le même club, Si aucun trouvé(idem, sur le marqueur est présent sur les membre du club), Alors pas de TDS dans cette POULE, choix d'un joueur sans TDS club différent (et réinitialisation du marqeur).
-Remplir un tableau de marqueur pour POULE n°x
-Aléatoirement, continuer avec des clubs différents. Aucun joueur ne doit être TDS, sauf si il reste des joueurs TDS (condition en fonction du tableau #T1, à remplir de la même manière)
-Lorsque la poule est à "nombre de patineur par poule" faire une poule suivante.


-si le nombre de joueur n'est pas atteint alors que toutes les poules sont remplies : mettre les joueurs restant dans des poules, en réalisant au mieux les conditions.



j'espère que cette première réflexion peut vous aider à constuire votre code

cordialement

Odesta
 

Odesta

XLDnaute Impliqué
Re : Tirage alétoire à 2 conditions

Bonsoir
désolé du peu de réactivité, j'ai pas mal de travaux en cours.

Alors pour le code : avant de coder, le plus simple selon moi, c'est d'écrire au maximum ce que l'on veut faire. Puis les fonctions viendront toutes seules. en revanche, il faudra mettre un peu la main à la patte... La touche F1 est votre amie !

Donc :
Sub Nom_de_la_macro() 'je défini ma macro

'je cherche le nombre de ligne
'pour cela : comtper les lignes jusqu'à ce qu'il n'y en ai plus (temps que la cellule de la ligne que je lis n'est pas vide) Nous choisirons de lire la cellule de la colonne A
'à quelle ligne je commence ? :

ligne_cellule_lue = 4

'temps que cellule lue n'est pas vide :
while cells(ligne_cellule_lue, 1).value <> ""
'je vérifie la cellule suivante, pour cela, j'incrémente ma ligne en cours avant de faire le teste suivant
ligne_cellule_lue = ligne_cellule_lue + 1
wend 'si la condition est réalisée, je retourne au début du test, sinon fin de mon test

'lorsque le programme arrive ici, c'est que nous sommes sortie de la boucle :
'nous savons donc que la ligne en cours est vide
'il y a donc un nombre de ligne égale à ligne_cellule_lue - 1 - (4-1) (celles du départ étant à supprimer aussi)

nombre_ligne = ligne_cellule_lue - 4

'et ainsi de suite pour le reste des opérations. Ne pas hésitez à travailler bloc par bloc, à bien les commenter, et à les tester au fur et à mesure (merci le VBA qui permet cela).

'si vous ne savez pas faire un passage, explicitez le bien, et une réponse vous sera formulez ici.

'maintenant, à vous de jouer !!


End Sub 'fin