Faire des groupes de 3 ou 4 personnes à partir d'une liste

Bonjour à tous,
Je suis nouveau et j’ai écumé quelques Forum sans trouver de solution à ce problème.
J’espère que vous pourrez m’aider. :pray:

Je possède une liste de noms de joueurs en colonne.
Le nombre de participants peut varier entre 8 et 32 joueurs.
En fonction du nombre de participant je veux affecter chaque joueurs à des groupes idéalement de 4 ou de 3 si nécessaire pour équilibrer le nombre de joueurs par groupe.
Exemple j’ai :

  • 8 joueurs: j’aimerai 2 groupes de 4
  • 9 joueurs : j’aimerai 3 groupes de 3 (car 2 groupes de 4 + 1 groupe de 1 serait déséquilibré)
  • 10 joueurs : 1 groupe de 4 et 2 groupes de 3
  • 11 joueurs : 2 groupes de 4 et 1 groupe de 3
  • 12 joueurs : 3 groupes de 4
  • etc…
    Bref, c’est facile d’équilibrer de tête mais je n’ai pas réussi à le formuler mathématiquement et surtout à le réaliser sur Excel en formule (ou en macro)

Voilà, j’espère m’être bien exprimé et que mon problème vous parlera.

Merci beaucoup par avance pour votre aide. :kissing_heart:

Sylian

Bonjour,

Consigne Rajout de fichier Excel

Illustre tes propos dans un fichier Excel avec écriture des résultats attendus. On verra par la suite comment mathématiser le problème.

Cordialement,

Bonjour Rod, Merci pour ta réponse rapide.
J’avais bien lu les règles avant de poster et j’ai essayer d’être le plus explicite et précis possible comme je l’ai mentionné : « Voilà, j’espère m’être bien exprimé »
Pour le détails, j’ai hésité mais … je me suis dit y-a-t-il un intérêt de fournir un fichier Excel avec une liste de nom ou de chiffre dans une colonne ? Le problème est simple mais bon si vous voulez un exemple : Exemplegroupe.xlsx (12,8 Ko)

Il n’y a aucune formule : juste le visuel qui j’espère vous aidera à comprendre.

Merci pour votre aide

Cordialement,

A mon avis, une solution en VBA est mieux pour résoudre ton problème. Si pas de solution là, reformule ta demande dans la catégorie VBA. Mes compétences sont limitées en la matière.

Merci pour ton avis Rod :handshake:
Je te rejoins totalement sur le fait qu’une solution VBA serait sûrement plus adaptée au problème.
Les formules ont rapidement leur limite.
Mais là, l’un comme l’autre, je sèche.

Espérons qu’une personne est la bonne idée :bulb:pour me dépanner.

Bonjour

Ci-joint ma proposition

Onglet « Feuil2 » clique sur le bouton « Traitement »
A l’invite saisies un nombre de joueurs de 6 minimum à 43 joueurs maximum
Résultat colonne A et B

J’ai fixé à 43 le nombre maximum de joueurs il peut être sans difficulté augmenté
Mais un nombre max doit être fixé
Plus il est important plus le temps de traitement augmente
à 43 joueurs c’est insignifiant je te rassure
ce ne sera certainement pas le cas à 1000 joueurs

Fais des essais et dis moi surtout pour ce paramètre de nombre

Le fichier joint est en type xlsm indispensable pour ce type de traitement
Ne pas le modifier

Exemplegroupe.xlsm (28,1 Ko)

:scream: Juste IMPRESSIONANT !
Ca fonctionne à 100% et sans aucun ralentissement. Bravo !
Je n’en demandais pas tant : pour moi, les joueurs vont seulement de 8 à 32 max pour mes besoins.

Pense-tu que le bouton qui déclenche la macro puisse ne pas demander le nombre de joueurs mais simplement le savoir en comptant le nombre de joueurs existant dans la colonne A ou par sélection ?

J’en demande surement un peu trop mais sache que même là maintenant, c’est vraiment au top !
Ce qui me rassure c’est que je n’y serai jamais arrivé seul avec des formules ou avec mes notions en macros.
Bravo :clap:

Edit : j’ai essayé de comprendre le code mais la fonction UBound même avec Google j’ai du mal à saisir. Chapeau ! :sweat_smile:

Heureux que cela te convienne

« Pense-tu que le bouton qui déclenche la macro puisse ne pas demander le nombre de joueurs mais simplement le savoir en comptant le nombre de joueurs existant dans la colonne A ou par sélection ? »

Je ne comprends trop bien ce que tu attends
Le traitement de ce que j’ai compris de tes premières directives devait en fonction d’un nombre de joueurs déterminés réaliser le remplissage de la colonne A (nom des joueurs incrémenté de 01 au dernier) et en colonne B faire la répartition par groupe de 3 ou de 4 joueurs

Si je me sers de la colonne A pour déterminer le nombre de joueur quid du traitement qui doit la remplir ?

Il me faut des explications supplémentaires

Si la colonne A est prérempli dois je l’effacer pour la reremplir ?
C’est tout à fait faisable et même souhaitable pour un résultat correct
Si cette colonne comporte des imperfections dans les données saisies celles-ci altèreront le résultat final
Je préfère récupérer le nombre de joueurs inscrits dans la colonne la vider et effectuer par le traitement son remplissage avec la colonnes B comme effectué sur mon fichier transmis

Voilà ce que je te propose

« Edit : j’ai essayé de comprendre le code mais la fonction UBound même avec Google j’ai du mal à saisir. Chapeau ! »

UBound(Split(multiple4, « / »)) - 1
calcule le nombre de portion que l’on trouve dans la donnée « multiple4 » morcelé par l’instruction Split avec le caractère « / »
La variable « multiple4 » est défini au départ du code :

multiple4 = « /4/8/12/16/20/24/28/32/36/40/ »

il y a 11 portions morcelées par le caractère « / »

C’est utilisé pour la boucle :

For j = 1 To UBound(Split(multiple4, « / »)) - 1

de 1 à 11-1 soit 10
la dernière portion (11) comme la première (portion 0) n’ont pas de valeur donc non prise en compte dans la boucle

Voilà pour les explications

1 J'aime

Oui ça me plait vraiment.
Je suis juste frustré de ne pas comprendre :sweat: mais c’est le résultat qui compte.

Pour reprendre la fin de ton message, ma colonne A sera pré-remplie. J’y inscris les participants.
C’est une colonne allant de 1 à 32 joueurs max. J’y inscrirai au minimum 8 participants mais peut-être y en aura-t-il 17 (donc 17 noms de joueurs suivi de 15 cellules vides dans la colonne A).
Ensuite, je fais correspondre le équipes générées par ta formidable macro en face du nom des joueurs. Exactement comme le fait ton programme.

Je pensais qu’en cliquant sur le bouton, la macro détermine il y a X joueurs présents dans la colonne A et qu’il affecte en face son groupe.

Mais honnêtement rien qu’avec ta macro initiale, je peux très bien associé un numéro à chaque joueurs et avec un système de correspondance, leur attribuer leur groupe grâce à ton programme.

Je te fais demain une nouvelle proposition ne traitant que la colonne B sur la base du nombre de joueur prérempli en colonne A
Il faut simplement que tes joueurs en colonne A soient regroupés sans coupure entre eux de la ligne 2 à la ligne x et qu’après le dernier joueur aucune donnée dans cette colonne ne soit présente (minimum 6 joueurs maximum 43 joueurs)
Attention au doublon malencontreux (2 fois le même nom dans la liste) mon traitement ne pourra pas réagir en conséquence

Un peu de patience donc une nouvelle version très prochainement

Pas d’inquiétude pour les doublons.
Ce sont des joueurs et ils ne veulent surtout pas avoir le même pseudo que le copain.
Merci énormément par avance ! C’est un boulot de dingue que tu fais (à mon échelle en tout cas)

Bonjour
Nouvelle version ci-jointe
A ta charge remplir la colonne A des noms des joueurs (minimum 6 maximum 43)
Le bouton Traitement réalise en colonne B la répartition des groupes de 3 et 4 joueurs

Fais des essais et dis moi

Exemplegroupe v2.xlsm (27,8 Ko)

Bonjour,
Je viens de tester ton programme.
Je rempli la colonne A et le bouton Traitement affecte la répartition des groupes comme demandée.
En revanche la répartition ne se fait pas aussi bien qu’avec la V1. Je m’explique :

Avec la V1 je rentrai 19 joueurs, la macro me mettait 5 groupe en tout (1 groupe de 3 et 4 groupes de 4) : NICKEL ! :clap:

Avec la V2 le bouton m’affecte 5 groupes de 3 et aucun groupe de 4.
Ce n’est malheureusement pas bon contrairement à la V1. :shushing_face:

Exemplegroupe v2 - TEST.xlsm (25,5 Ko)

Désolé chez moi cela fonctionne parfaitement :

image

groupe 1 : 3 joueurs
groupe 2 à 5 : 4 joueurs

soit 1 groupe de 3 et 4 groupe de 4

Et oui c’est ce que je craignais et qui m’a fais insister sur une prise en charge intégrale par le traitement
Ta colonne A présente très certainement une anomalie

Après ton derniers joueurs dans les cellules suivantes l’une voir plusieurs d’entre elles ne sont pas totalement vide (caractères blancs ou formules etc…)
Il faut bien passer le plumeau
Ma première version avait l’avantage d’être une soubrette de compétition et donc bien utile pour éviter ce type de désordre" ce qui n’est pas toujours le cas d’un utilisateur

Vérifies et dis moi car pour moi tout est nickel

Je viens d’ouvrir ton fichier
Il n’y a pas 19 joueurs mais 18 joueurs qui aboutissent à la ligne 19 certes mais il faut supprimer la ligne de titre 1° ligne qui n’est pas un joueur donc ligne 19 mais 18 joueurs
Pour 19 il en manque un
Là aussi le traitement intégral proposé aurait évité cette erreur
Corriges et dis moi

Tu as entièrement raison, il n’y a que 18 noms dans l’exemple. Mea Culpa :sweat:

En revanche cela montre un problème récurent à la V1 et à la V2 :
Pour l’exemple de 18 joueurs, nous devrions avoir 5 groupes :
3 groupes de 4 (12 joueurs) + 2 groupes de 3 (6 joueurs)
Et là quelque soit la version, il génère 6 groupes de 3.

Et pourquoi ???
N’est il pas mieux d’avoir des groupes homogènes plutôt qu’hétérogène l’essentiel étant que l’ensemble des joueurs soient bien réparties et il me parait plus logique d’avoir 6 groupes de 3 (équilibré) que 3 groupes de 4 et 2 groupes de 3 (déséquilibré)
Même mentalement sans automatisation on peut autant s’orienter vers une configuration ou l’autre les 2 étant concevables mais l’une bien répartie l’autre pas
Quoi qu’il en soit pour obtenir un résultat attendu il faut une logique
Merci donc de me la fournir qui dans ce cas (18 joueurs) nécessitera la version hétérogène et non homogène
Il est fort à parier que d’autres situations soient à l’identique
Dans tes directives à l’origine seule la répartition en groupe de 3 et de 4 était à obtenir sans privilégier une option plutôt qu’une autre si plusieurs étaient envisageables

Je comprends ta surprise et dans la logique tu as parfaitement raison.
Que des groupes identiques seraient équilibrées.
Dans ma demande initiale j’avais demandé

des groupes idéalement de 4 ou de 3 si nécessaire

A vrai dire les groupes générés font partie de la même équipe. Ils sont plus fort à 4 (qui est le maxi par groupe). Par contre si je n’ai que des groupes de 3 alors l’équipe n’aura pas de groupe « fort » par rapport à l’équipe adversaire.
Dans l’exemple de 18 joueurs pour l’équipe 1, si j’ai 6 groupes de 3.
Alors que même avec un joueur de plus que l’équipe 2 composé de 17 joueurs n’aura que 5 groupes dont2 groupes de 4.
Bref, j’essaye de mettre des groupes de 4 au maxi et de compléter avec des groupes de 3 si besoin sans jamais tomber dans des groupes de 1 ou 2.

Désolé, c’est vrai qu’il est très difficile de s’exprimer sur un problème. On essaye d’être simple mais forcément on oublie des variables. En tout cas, ne te casse pas la tête. Ton programme de groupe équitable fera l’affaire. Ce n’est pas bien grave au final. Ce n’est qu’un jeu et les participants n’y verront aucunes contraintes.

Ne te désoles pas c’est seulement que les bases au départ étaient mal posées ou mal comprises
J’ai dans mon traitement privilégié en priorité un résultat homogène à obtenir avant de l’orienter sur celui hétérogène
Cela me semblait plus propre
J’ai revu ma copie et inversé cette logique pour privilégier hétérogénéité à l’homogénéité
Ci-joint donc dans cet esprit une nouvelle version
Gardes malgré tout la précédente et d’avoir les 2 pour si l’une selon le cas donne un meilleurs résultat que l’autre
Pour 18 joueurs j’obtiens bien 2 groupes de 3 joueurs et 3 groupes de 4 joueurs
J’espère que cela te conviendra mieux
Fais des essais
Exemplegroupe v3.xlsm (27,3 Ko)