XL 2019 Attribution valeur aléatoire dans une liste sans doublons.

Zhavina

XLDnaute Nouveau
Bonjour,
Je travail dans une boite avec les lignes de productions possédant chacune plusieurs postes de travail.
J'aurais besoin de pouvoir attribuer à chaque membre de mon équipe un poste de façon aléatoire sans que 2 personnes ait le même poste évidemment.
Petite difficultés supplémentaire : il faudrait que les premiers postes de la ligne soient attribués en priorité, s'ils sont utilisables.

Exemple :
Jour 1 : J'ai la ligne 1 qui possède 20 postes. Je dois y placer 10 personnes. Je voudrais que les 10 personnes soient placés aléatoirement uniquement sur les 10 premiers.
Jour 2 : Le poste 3 de la ligne 1 est inutilisable suite à un soucis matériel et j'ai cette fois 6 personnes à placer. Je voudrais les placer aléatoirement sans que personne ne soit sur le poste 18 19 20 mais non plus sur le 3 qui est inutilisable.

Je vous ais joint en pièce jointe un exemple de ce à quoi ressemble mon fichier.

Je comprend les fonction alea.entre.bornes et index.
Sauf que la fonction index, quand il n'y a pas de données dans une case, affiche une valeur 0. Ce qui fait que si la fonction tombe sur une case vide, un des membre de mon équipe n'aura pas de poste attribué.

Merci beaucoup pour votre aide.
 

Pièces jointes

  • ExemplePosteAlea.xlsx
    13.8 KB · Affichages: 6

Zhavina

XLDnaute Nouveau
Bonjour.
Pas vu de changement dans les données sur quoi baser une modification du tirage, en particulier pas de colonne correspondant à votre description :

Le commentaire ajouté dans mon code n'est pas bon. C'est plutôt :
VB:
         If TDon(L, C) <> "" Then 'S'il y a quelque chose dans la cellule alors...
            N = N + 1: If N > NMax Then Exit For '… il va produire ce prochain N, s'il en reste.

Édition: Vu maintenant deux colonnes à droite. Je vais tenter de les exploiter …
Mais je vois que je ne vais pas savoir comment l'exploiter: je ne vois pas à quoi correspondent A et B.

J'ai vu le dernier classeur joint ABC. Je croyais qu'il répondais seulement à @FlamXYZ … il répond un peu plus à la question, mais pas clairement. Il faudrait une seule lettre au dessus de chaque colonne.
Ou bien un nombre puissance de 2: 1, 2 ou 4. En face des noms la somme de ces compétences, par exemple 7 pour indiquer qu'il est compétent pour 1 + 2 + 4.

Les lettres correspondent à un type de marchandise. Sur les lignes 1 et 5 il peut y avoir les marchandises A et B. D'où le fait de vouloir y placer des personnes sachant traiter ces 2 cas et exclure les personnes sachant en faire que l'un des deux.
Edit : après avoir vu le fichier, je comprend votre demande. Cependant sur votre solution, certaines personnes ne sachant pas faire A y sont quand même placé. Pareil pour B. Par contre ça a l'air de fonctionner correctement pour C.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Est ce qu'il ne serait pas possible de mettre les "9D", "8G" etc jusqu' à "1D" au lieu des "A", "B" et "C" comme titres des croix pour déterminer si les codes de la colonne peuvent être attribuer à quelqu'un ? Parce que là je n'y comprends rien.
 

Zhavina

XLDnaute Nouveau
Oui bien sur.
J'ai utilisé cette façon de présenter les choses car cela est logique pour moi vue que je travail avec tout les jours. A B C représente juste le type de marchandises arrivant sur les lignes.
Je te laisse le loisir de modifier cela selon ce qui te semble le plus facile à programmer.
 

Dranreb

XLDnaute Barbatruc
Remarque: Je commence tout doucement à comprendre l'histoire des ABC
Il faudrait donc mettre la combinaison de lettres au dessus de chaque colonne du tableau de gauche, sans " et " dans les textes ni quoi que ce soit d'autre, et pour qu'un code **-** de la colonne puisse être retenu pour quelqu'un il faudrait qu'il ait au moins une compétence pour toutes ces lettres. Est-ce que ce serait gênant de spécifier les compétences non par des coches mais aussi par la suite de lettres ? Ainsi "ABC" serait compétent pour tout, "A", "B", "C", "AB", "AC", "BC" et bien sûr "ABC" si ça existait. "AB" serait seulement compétent pour les codes **-** des colonnes ne comportant pas "C" au dessus car ceux là ont toujours "A", "B" ou "AB".
 
Dernière édition:

Zhavina

XLDnaute Nouveau
Mais les lettres représentent juste le titre de marchandise. C'est pour éviter trop de détails inutile.
Mais dans mon cas ce serait la marchandise De petite taille, De grosse taille, Spéciale.
Je vois pas trop en quoi cela peut t'aider de connaitre cela.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous n'avez pas à m'aider, c'est moi qui vous aide, n'inversez pas les rôles !
Qu'est ce qu'elle change, votre réponse, au nécessaire codage rigoureux, au dessus de chaque colonne, des types de marchandises qu'elle peut contenir, si toutefois vous souhaitez bien toujours pouvoir spécifier comme compétences autre chose que l'intégralité des colonnes applicables à chacun comme dans ma proposition du #20 ? Mais ce serait un peu dommage d'en rester là, car j'ai quand même bien l'impression que ma proposition du #21 est assez proche de ce qu'il vous aurait fallu. Juste j'aurais voulu avoir votre avis quant à l'expression des compétences par une suite de lettre dans une seule colonne plutôt que des coches dans une grille. Avantage: si une nouvelle lettre venait à devoir être prise en compte il n'y aurait pas de colonne à ajouter, juste la nouvelle lettre à la combinaison de ceux y étant habilités et bien sûr aussi à celle des colonnes susceptibles de contenir ce nouveau type de marchandise.
Actuellement j'ai une version qui a les deux, les coches et la série de lettres déduite de celles ci.
Mais bien sûr si ça ne vous intéresse plus, ou si vous voulez identifier chaque compétence (qui est en même temps un titre de marchandise) par autre chose qu'une lettre unique majuscule non accentuée …
 

Zhavina

XLDnaute Nouveau
Bonjour Dranreb.

Autant pour moi, je n'avais pas vue votre proposition en #20.
Celle çi ne fonctionne pas pour moi. Vous avez mis des compétences différences pour chacun des 2 côtés de chaques lignes (8G et 8D c'est sur la même ligne, c'est juste qu'il y a des postes à gauche et à droite des lignes, d'où le G et D).

Pour répondre à votre question en #21, oui c'est gênant pour moi de mettre une combinaison de lettre car beaucoup moins lisible. Je dois manier une dizaine de compétences différentes.
Mais concrètement je n'ai besoin de trier aléatoirement que pour les 2 compétences principale (A et B, ou grande marchandise et petite marchandise), car ces personnes changent de places tout les jours.
Pour les autres compétences, C D E etc, les équipes ne changent pas où très très peu. Et la solution (#8) que vous m'avez proposé précédemment devrait me suffisent amplement pour ces lignes là.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi je trouve ça lisible, puisque ça évite d'avoir à se reporter aux titres, puisque les les lettres retenues y sont. Et la vérification par rapport aux combinaisons de marchandises indiquée au dessus des colonnes est aisée.
Regardez le classeur où il y a les deux.
 

Pièces jointes

  • ListeAléatZhavina.xlsm
    49.7 KB · Affichages: 2

Zhavina

XLDnaute Nouveau
Re bonjour.
Je n'avais pas compris que vous aviez besoin d'une colonne supplémentaire pour y afficher la somme des compétences.
est-ce que cela fonctionnerai aussi si les lettres étaient remplacées par des mots ? Je ne me vois pas écrire dans cette colonne petitgrandautre.

Sinon votre proposition #25 fonctionne comme je le voudrais.
 

Dranreb

XLDnaute Barbatruc
Non, ce n'est programmé que pour des lettres uniques majuscules non accentuées. Mais vous pouvez en utiliser d'autres que ABC comme PGA.
Cependant le codage effectué par la fonction CombinBinAZ ignore les autres caractères. Alors peut être quelques minuscules non significatives dedans ne gêneraient pas …
 

Zhavina

XLDnaute Nouveau
Très bien, merci Dranreb.

Je vais déjà essayer avec cette solution et voir ce que j'arrive à en faire.
Je reviendrais pour demander plus d'explications si besoin ou clore le sujet si j'ai pu m'en servir convenablement.

Bonne fin de journée !
 

Zhavina

XLDnaute Nouveau
Bonjour Danreb.
Je reviens vers toi pour te demander un peu d'aide concernant la compréhension de ton code.
Je n'ai aucune formation dans les langage de programmation. Je possède juste les bases que j'ai pu acquérir il y a longtemps quand j'ai voulu m'y intéresser un peu. Donc beaucoup de choses m'échappe, fatalement.

Du coup est il possible que tu annote ton code pour m'aider à le comprendre ?
J'aimerais comprendre :
- Où est la partie qui permet de cocher / décocher les compétences.
- Comment fait le code pour déterminer si une personne peut être placé à ce poste en fonction de ces compétences.

Je vais finalement mettre ici le fichier que j'utilise au travail. Tu comprendra peut être mieux ce que je voudrais accomplir.
J'utilisais la colonne G conjointement avec la E pour tirer les postes de façon aléatoire.
Seul la feuille 'HeraklesNight' demande un tri aléatoire par compétence entre les colonnes H et I. Les personnes sur les feuilles 'Prep' et 'NPC' étant tout le temps les même, pas besoin de les trier par compétence, juste faire un placement aléatoire.

Et donc j'essaye de transposer ta solution, qui fonctionne très bien, sur ce fichier. Je me rend compte que j'aurais peut être dû faire ça dès le départ.
 

Pièces jointes

  • HeraklesNight.xlsm
    81.1 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Bonjour
Dans le classeur que j'avais joint au #25 :
— Le code qui réagit à la sélection d'une cellule de la grille, en mettant une coche si elle est vide ou, sinon, en la nettoyant, est dans une Sub Worksheet_SelectionChange du module Feuil1 (Feuil1) c'est à dire le module de l'objet Worksheet Feuil1, qui assume la représentation dans VBA de la feuille Excel d'onglet "Feuil1" (les deux noms peuvent être complètement différents).
— Le code vérifie si la combinaison par un And du masque des compétences au masque des produits n'altère pas ce dernier. Elle l'altère si un bit de compétence est à 0 alors qu'il correspond à un bit à 1 du masque des produits.

Remarque: Les deux masques sont fabriqués par la Function CombinBinAZ d'après les majuscules contenues dans un String.
Je ne trouve aucune trace de cette programmation dans votre dernier classeur joint.
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
489

Statistiques des forums

Discussions
300 907
Messages
1 988 368
Membres
210 125
dernier inscrit
manager2015