Répartition de charge
Bonjour à tous
j'ai besoin de l'aide d'experts; voilà mon problème :
- j'ai 10 groupes nommés : A,B,C,....I et J ====> colonne D
- Chaque groupe a un poids précis par rapport au poids total ====> colonne E
- j'ai une charge= variable (dans mon exemple = 10) ====> cellule E4
- chaque groupe doit prendre en charge une partie de la charge en fonction de son poids
mais ma problématique est que cette charge par groupe ne peut être qu'un entier avec la règle que j'arrondis au supérieur dés que j'atteints les 0,5 et que la charge totale (10) doit être distribuée :
- dans un premier temps je détermine la part entière de chacune des charges (au total : 6) ====> colonne H
- il reste alors les décimales (au total : 4) ====> colonne I
* 1er ==> groupe D : j'attribue 1 charge
* 2eme ==> groupe C : j'attribue 1 charge
* 3eme ==> groupe H : j'attribue 1 charge
* 4eme ==> groupe F ou groupe A : j'attribue 1 charge
Le résultat que je souhaiterai obtenir en automatique correspond à la colonne L ou M.
J'espère avoir été le plus clair possible. Merci de votre appui.
Bonjour Blob et le forum,
Après quelques suées, voilà une réponse sans macro. Pas forcément des plus élégant mais ça semble marcher dans tous les cas. Je l'ai testé en rendant aléatoire la charge et les poids.
Dans les cas extrêmes il peut y avoir une erreur d'1 reste non distribué, mais en ce cas je crois que ce ce sont les limites d'Excel lorsqu'il s'agit de décider qui est le plus grand de deux nombres et que cela se joue à des quantités dépassant la précision virgule flottante.
Par exemple :
Les poids aléatoires entre 1 et 100 et la charge entre 1 et 10000000 il y a un écart d'1 environ tous les 40-80 essais
Les poids aléatoires entre 1 et 100 et la charge entre 1 et 1000000 j'ai rencontré un échec à 750 puis plus rien pour les 5000 suivants.
Les poids aléatoires entre 1 et 100 et la charge entre 1 et 100000 j'ai arrêté les essais à 5000.
Les poids aléatoires entre 1 et 100 et la charge entre 1 et 10 j'ai arrêté les essais à 7000.
Je n'ai pas constaté d'échecs non plus sur 20000 essais sur des échantillons plus raisonnables.
J'ai laissé cette macro dans le classeur, qui ne sert qu'à simuler l'appui sur F9 (et à économiser mon majeur et mon endurance...), on peut bien sur la désactiver à l'ouverture sans incidences:
Sub Macro1()
Randomize
Calculate
cpt = 0
Do While Cells(17, 8) = 0
Randomize
Calculate
cpt = cpt + 1
Loop
MsgBox cpt
End SubCordialement.
Jules
edits synthèse: corrections et optimisation diverses
Merci infiniment pour votre aide. Bravo !