Re : mélanger une liste avec un critère de sélection vba
Bonjour et bienvenu
westerly,
J’ai pondu une "petite" macro pour tenter de résoudre ton problème de tirage aléatoire avec exclusion de certains binômes.
Pour cela, j’ai rajouté une zone "Liste exclusion" à gauche du tableau des groupes dans laquelle on saisit les couples s’excluant mutuellement.
Comme tu avais commencé à utiliser des collections, j’ai poursuivi avec des collections.
Il y a deux constantes qu’on peut modifier:
Const MaxNbEssais = 2000 => C’est le nombre max d’essais qu’on s’autorise.
Const BaseGroupe = "F5" => c’est la cellule du coin supérieur gauche de la zone des groupes.
Un compteur des essais est affiché en A1.
(J’aurais pu définir d’autres constantes - début de la liste des noms, cellule du nombre d’individus, cellule du nombre d’équipe, cellule du compteur etc. - mais j’ai eu la flemme de le faire ! Si jamais tu en as besoin, je le ferais)
En utilisant l’exemple du fichier (21 noms et une liste d’exclusion assez grande), on peut faire varier le nombre d’équipe de 1 à 18 et cliquer sur le bouton "Tirage…" pour lancer le tirage. Jusqu’à 3, je n’ai pas trouvé de solution. Ensuite (à partir de 4 équipes) plus on augmente le nombre d’équipe, moins la moyenne du nombre d’essai est grande pour trouver une solution.
J’ai essayé de commenter assez clairement le code.
La méthode utilisée n’offre pas la garantie de trouver une solution même s’il en existe une ou de montrer qu’il n’en existe pas et cela même si le nombre d’essai tend vers l’infini.
On ne saura pas distinguer entre l’impossibilité de trouver une solution parce qu’on n’est pas tombé sur la bonne combinaison (même si le nombre d’essais est très grand) et le fait que la liste d’exclusion entraine ipso facto un échec de par sa composition et des paramètres nombre d’individus et nombre d’équipes.
Néanmoins ça semble fonctionner dans pas mal de cas.