mélanger une liste avec un critère de sélection vba

westerly

XLDnaute Nouveau
Bonjour
je suis nouveau sur le forum, mais j'y ai déjà appris beaucoup de choses. J'ai réussi à faire mélanger une liste d'individus et à répartir cette liste en groupes (en indiquant le nombre de groupes) par une macro. Maintenant je bloque un peu car je voudrais que lorsque les groupes sont constitués certains individus ne se retrouvent pas ensembles. Par exemple j'ai une liste avec les individus "a,b,c,d,e,..." que je répartis en 5 groupes mais une fois les groupes formés je voudrais que "a" ne se retrouve pas dans le même groupe que "c" et "b" ne se retrouve pas dans le même groupe que "e" et c'est là que je bloque. Quelqu'un pourrait-il m'aider? Merci d'avance.
 

Pièces jointes

  • groupes aleatoires.xlsm
    21.1 KB · Affichages: 109
J

JJ1

Guest
Re : mélanger une liste avec un critère de sélection vba

Bonjour et bienvenue sur le Forum,

Fais une recherche avec des mots clés comme tournoi, équipe...tu trouveras une multitude d'exemples.
Bonne journée
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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.
 

Pièces jointes

  • groupes aleatoires v2.xlsm
    31.3 KB · Affichages: 93

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : mélanger une liste avec un critère de sélection vba

(re)Bonjour westerly,

Il y a sans doute plus rapide:confused:
  1. Commencer par ventiler les individus de la liste des exclusions (théoriquement en moins grand nombre que ceux de la liste initiale)
  2. Puis ventiler les autres individus qui sont compatibles chacuns avec tous les individus.

On verra plus tard...
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : mélanger une liste avec un critère de sélection vba

(re)Bonjour westerly,
Il y a sans doute plus rapide:
  1. Commencer par ventiler les individus de la liste des exclusions (théoriquement en moins grand nombre que ceux de la liste initiale)
  2. Puis ventiler les autres individus qui sont compatibles chacuns avec tous les individus.
On verra plus tard...

Un essai en séparant la ventilation en deux sous-listes. Le gain n'est vraiment pas évident! Voire une perte :confused: (on travaille sur un ensemble plus restreint mais on fait plus d'essai)

Edit : une erreur à corriger, remplacer (correction faite dans fichier v3.1):
Code:
ReDim TailEqpe(1 To liste1.Count)
par
Code:
ReDim TailEqpe(1 To nbEqpe)
 

Pièces jointes

  • groupes aleatoires v3.xlsm
    33.7 KB · Affichages: 82
  • groupes aleatoires v3.1.xlsm
    33.5 KB · Affichages: 102
Dernière édition:

westerly

XLDnaute Nouveau
Re : mélanger une liste avec un critère de sélection vba

wwaouf
Je ne pensais pas que mon petit problème de tri d'une liste allait entraîner un tel engouement !
Merci à tous pour vos réponses, et la rapidité avec laquelle vous les avez concoctées. J'aimerais bien un jour pouvoir faire ce genre de macro mais quand je vois l'ampleur du travail ça m'décourage un peu...
En tout cas les fichiers joints fonctionnent parfaitement merci "mapomme" et "jj1"
 

Discussions similaires

Statistiques des forums

Discussions
311 729
Messages
2 081 970
Membres
101 852
dernier inscrit
dthi16088