XL 2016 Diviser sur table

Seddiki_adz

XLDnaute Impliqué
bonsoir
je souhaite et si possible aide pour
comment repartie (diviser )les enveloppes sur tables pour que chaque table a le nombre des enveloppes a peut près
j'ai des centres d'examens et chaque centre a nombre des enveloppes varie d'un centre a l'autre
je vais diviser la somme des enveloppes sur 30 agents pourra traiter avec 2 critère
1) le nombre des enveloppes soit presque les même
2) les enveloppes de même centre
30 agents pourra traiter
82 centres
1400 enveloppes
agent = table

Merci
 

Pièces jointes

  • centres.xlsx
    11.2 KB · Affichages: 3
Solution
Après une semaine "off", je me suis de nouveau penché sur le problème de Seddiki que je trouve très intéressant.

J'ai automatisé le calcul par un algorithme qui n'est peut être pas optimal, mais qui est rapide à exécuter et pas trop mauvais. Il comporte plusieurs passes :
1) calcul de la moyenne entière des enveloppes par agent Moy = Arrondi(Ne / Na) = Arrondi(1400/30) = 47.
2) tri des centres par nb d'enveloppes décroissant.
3) affectation grossière de centres à tous les agents :
- Pour chaque agent, on affecte un centre (du plus "enveloppé" au moins "enveloppé") tant que le total des enveloppes obtenu est < Moy. Si le total est Moy, on s'arrête. S'il n'y a plus rien à ajouter, on retient le plus petit des centres > pour lequel le...

soan

XLDnaute Barbatruc
Inactif
Bonjour Seddiki,

ton fichier en retour. :)

regarde tout ce qui est à droite de la colonne H, de la ligne 1 à la ligne 40. 😉

attention : suis bien toutes les explications de haut en bas. (sans rien sauter !)

soan
 

Pièces jointes

  • centres.xlsx
    13.5 KB · Affichages: 7

Katido

XLDnaute Occasionnel
En fait c'est bien plus compliqué que ça. C'est un problème d'optimisation combinatoire, de la famille du "problème du sac à dos".

S'il n'y avait pas la liste des centres avec des nombres d'enveloppes différents, ce serait simple : pour E enveloppes et A agents, il suffirait de créer n1 tables de Int(E/A) enveloppes et n2 tables de Int(E/A) + 1 enveloppes pour une obtenir la répartition la plus équilibrée. On trouve facilement n2 = E - A * Int(E/A) et n1 = A - n2. Dans notre cas n2 = 20 et n1 = 10. C'est du niveau "Excel à la maternelle".

Mais puisqu'on a la contrainte liée aux centres, ça devient très très difficile. Avec Excel, il faut obligatoirement VBA. Peut être Query ??? Et certainement se contenter d'une répartition correcte mais pas forcément la meilleure.
Je n'ai pas la solution, mais on peut tenter des approches en combinant des paquets tout faits de 1, 2, 3 ou 4 centres ?
 

Seddiki_adz

XLDnaute Impliqué
En fait c'est bien plus compliqué que ça. C'est un problème d'optimisation combinatoire, de la famille du "problème du sac à dos".

S'il n'y avait pas la liste des centres avec des nombres d'enveloppes différents, ce serait simple : pour E enveloppes et A agents, il suffirait de créer n1 tables de Int(E/A) enveloppes et n2 tables de Int(E/A) + 1 enveloppes pour une obtenir la répartition la plus équilibrée. On trouve facilement n2 = E - A * Int(E/A) et n1 = A - n2. Dans notre cas n2 = 20 et n1 = 10. C'est du niveau "Excel à la maternelle".

Mais puisqu'on a la contrainte liée aux centres, ça devient très très difficile. Avec Excel, il faut obligatoirement VBA. Peut être Query ??? Et certainement se contenter d'une répartition correcte mais pas forcément la meilleure.
Je n'ai pas la solution, mais on peut tenter des approches en combinant des paquets tout faits de 1, 2, 3 ou 4 centres ?
Merci
le problème sont les critère les centres et nombre des enveloppe
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Seddiki, Katido,

Katido a bien raison ! :) 👍

➯ c'est inutile de faire plusieurs essais successifs comme j'avais proposé !

on peut faire directement :

* ENV = nombre d'Enveloppes : 1 400 ; AGT = nombre d'agents total : 30
* n = INT(ENV/AGT) : partie entière de (ENV/AGT) : ENT(1 400/30) = 46

* nombre d'agents AG1 = ENV - AGT * n = 1 400 - (30 * 46) = 1 400 - 1 380 = 20
* nombre d'agents AG2 = AGT - A1 = 30 - 20 = 10

une fois qu'on a les 2 nombres d'agents 20 et 10,
c'est très facile de faire ce tableau :

Image.jpg



Mais puisqu'on a la contrainte liée aux centres, ça devient très très difficile.

oui, je confirme : pour moi aussi, c'est très très difficile ! 😭
(alors pour la suite, je passe ! un autre contributeur svp !)
soan
 

Seddiki_adz

XLDnaute Impliqué
Bonjour Seddiki, Katido,

Katido a bien raison ! :) 👍

➯ c'est inutile de faire plusieurs essais successifs comme j'avais proposé !

on peut faire directement :

* ENV = nombre d'Enveloppes : 1 400 ; AGT = nombre d'agents total : 30
* n = INT(ENV/AGT) : partie entière de (ENV/AGT) : ENT(1 400/30) = 46

* nombre d'agents AG1 = ENV - AGT * n = 1 400 - (30 * 46) = 1 400 - 1 380 = 20
* nombre d'agents AG2 = AGT - A1 = 30 - 20 = 10

une fois qu'on a les 2 nombres d'agents 20 et 10,
c'est très facile de faire ce tableau :

Regarde la pièce jointe 1140984




oui, je confirme : pour moi aussi, c'est très très difficile ! 😭
(alors pour la suite, je passe ! un autre contributeur svp !)
soan
Merci Tu fait un énorme de travail
moi je veut appliquer la solution , mais comment je repartie suivant le critère même centre je vais faire un model
 

Pièces jointes

  • centres (2).xlsx
    13.4 KB · Affichages: 0
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Seddiki

Merci Tu fais un énorme travail

merci pour ton retour ! 😊 il faut remercier aussi Katido ! c'est grâce à ses infos qu'on a une méthode directe au lieu de plusieurs essais par tâtonnements successifs ! :) 👍



moi je veux appliquer la solution

il suffit de suivre la procédure détaillée que j'ai indiquée dans mon post #7 ; j'ai mis plusieurs couleurs tout exprès pour que tu puisses mieux voir les différents éléments du problème. :)



comment je fais la répartition suivant le critère "même centre" ?

la procédure détaillée du post #7 est pour 1 centre de 30 agents (= 1 centre de 30 tables) ; rappel : il y a 1 seul agent par table, donc 1 table = 1 agent.​



je vais faire un modèle

ok, mais si c'est trop difficile pour moi, je ne pourrai rien faire ; dans ce cas, un autre contributeur plus calé en maths que moi pourra sûrement t'aider. 🍀

soan
 

Katido

XLDnaute Occasionnel
merci pour ton retour ! 😊 il faut remercier aussi @Katido ! c'est grâce à ses infos qu'on a une méthode directe au lieu de plusieurs essais par tâtonnements successifs !
Rebonjour,

Merci pour le remerciement, mais ce n'est pas ce qu'il faut car on doit tenir compte des centres !

Pour cela, je viens d'essayer une répartition à la main avec les données du fichier de Seddiki, en m'aidant d'un bout de code VBA/SQL. Il faudrait idéalement automatiser tout ça. Comme résultat, on a un nombre d'enveloppes par table de 45 à 49. On peut peut-être faire mieux mais je trouve que c'est déjà pas trop mal.

Le fonctionnement est le suivant (voir Feuille 2) :
- Les colonnes A et B contiennent les données initiales de Seddiki
- En colonne C, on renseigne à la main le nº de l'agent (de 1 à 30) qui s'occupe du centre. Chaque nº apparait plusieurs fois (en fait 2 ou 3 fois) puisqu'il y a plus de centres que d'agents

A chaque saisie, les colonnes H, I et J sont calculées, ainsi que les petites statistiques en colonnes K, L, M, N et O.
 

Pièces jointes

  • centres.xlsm
    35.4 KB · Affichages: 5

soan

XLDnaute Barbatruc
Inactif
@Seddiki

je poste ici un exemple qu'on avait déjà vu ensemble en MP ; je m'étais dit que c'était inutile de le poster sur le forum car c'était juste de l'arithmétique, pas de l'Excel ; mais je pense que ça peut quand même être utile pour ce présent sujet.​



* ENV = nombre d'Enveloppes : 2 548 ; AGT = nombre d'agents total : 30
* n = ENT(ENV/AGT) = ENT(2 548/30) = 84 enveloppes.



* 1er essai :
* 30 agents - 1 agent = 29 agents
* 29 agents × 84 enveloppes = 2 436 enveloppes
* 2 548 enveloppes - 2 436 enveloppes =
112 enveloppes (pour le dernier agent)

* vérification de ce 1er essai :
(29 agents × 84 enveloppes) + (1 agent × 112 enveloppes)
= 2 436 enveloppes + 112 enveloppes = 2 548 enveloppes
ici : 29 agents + 1 agent = 30 agents

d'où ce 1er tableau (car c'est plus visible ainsi) :

Image 1.jpg


bien sûr, ça serait vraiment injuste qu'un seul agent doive traiter 112 enveloppes quand tous ses collègues ont à traiter 84 enveloppes seulement ! ça lui fait 112 - 84 = 28 enveloppes de plus que ses collègues ! c'est pourquoi il faut chercher une meilleure répartition !​



* après plusieurs essais d'optimisation (méthode empirique, par tâtonnements successifs) :
(16 agents × 84 enveloppes) + (14 agents × 86 enveloppes)
= 1 344 enveloppes + 1 204 enveloppes = 2 548 enveloppes
ici : 16 agents + 14 agents = 30 agents

* 14 agents auront 2 enveloppes à traiter de plus que leurs collègues : 86 enveloppes au lieu de 84 enveloppes ; cette répartition est vraiment très raisonnable ! :)

ça donne ce 2ème tableau :

Image 2.jpg



j'ai essayé ensuite la méthode directe de Katido :​

* nombre d'agents AG1 = ENV - AGT * n = 2 548 - (30 * 84) = 2 548 - 2 520 = 28
* nombre d'agents AG2 = AGT - A1 = 30 - 28 = 2

d'où ce 3ème tableau :​

Image 3.jpg


c'est donc une bonne confirmation que la méthode directe de Katido marche très bien ! 🙂 👍 mais il y a quand même 2 agents qui ont à traiter 98 - 84 = 14 enveloppes de plus que leurs collègues. ; éventuellement, attribuer à ces 2 agents une petite prime en compensation ! 😜 réservé aux employeurs pas trop pingres ! 😄


pour « n = ENT(ENV/AGT) = ENT(2 548/30) = 84 enveloppes. » j'avais arrondi à l'entier inférieur ; si je fais maint'nant un arrondi à l'entier supérieur, ça donne : 85 enveloppes.

d'où ce 4ème tableau :

Image 4.jpg


y'a une bonne amélioration, car 28 agents ont 1 seule enveloppe de plus à traiter que la minorité des 2 autres collègues : 85 au lieu de 84 ; on peut dire aussi :

TOUS les agents doivent traiter 85 enveloppes, SAUF 2 agents qui sont privilégiés vu qu'ils ont à traiter 1 enveloppe de moins que les autres !

je tiens quand même à vous rassurer sur ce point : les 28 agents défavorisés pour avoir eu à traiter 1 enveloppe de plus que les 2 autres n'en mourront pas ! 😁 🤪 😂 🤣 (enfin, j'crois pas ! si jamais y'a eu une hécatombe, ça doit plutôt être dû au covid-19 ou à la variole du singe !)

je ne peux pas affirmer ni garantir qu'en prenant l'entier supérieur, ça marchera toujours ! je crois que parfois, ça peut aboutir à un nombre d'enveloppes à traiter par agent négatif ! quelqu'un de plus matheux que moi pourra peut-être le confirmer ?​



Merci pour le remerciement, mais ce n'est pas ce qu'il faut car on doit tenir compte des centres !

ça, je ne m'en suis pas occupé, et je le laisse à un autre intervenant. 🍀

soan
 

Seddiki_adz

XLDnaute Impliqué
En fait c'est bien plus compliqué que ça. C'est un problème d'optimisation combinatoire, de la famille du "problème du sac à dos".

S'il n'y avait pas la liste des centres avec des nombres d'enveloppes différents, ce serait simple : pour E enveloppes et A agents, il suffirait de créer n1 tables de Int(E/A) enveloppes et n2 tables de Int(E/A) + 1 enveloppes pour une obtenir la répartition la plus équilibrée. On trouve facilement n2 = E - A * Int(E/A) et n1 = A - n2. Dans notre cas n2 = 20 et n1 = 10. C'est du niveau "Excel à la maternelle".

Mais puisqu'on a la contrainte liée aux centres, ça devient très très difficile. Avec Excel, il faut obligatoirement VBA. Peut être Query ??? Et certainement se contenter d'une répartition correcte mais pas forcément la meilleure.
Je n'ai pas la solution, mais on peut tenter des approches en combinant des paquets tout faits de 1, 2, 3 ou 4 centres ?
Merci
@Seddiki

je poste ici un exemple qu'on avait déjà vu ensemble en MP ; je m'étais dit que c'était inutile de le poster sur le forum car c'était juste de l'arithmétique, pas de l'Excel ; mais je pense que ça peut quand même être utile pour ce présent sujet.​



* ENV = nombre d'Enveloppes : 2 548 ; AGT = nombre d'agents total : 30
* n = ENT(ENV/AGT) = ENT(2 548/30) = 84 enveloppes.



* 1er essai :
* 30 agents - 1 agent = 29 agents
* 29 agents × 84 enveloppes = 2 436 enveloppes
* 2 548 enveloppes - 2 436 enveloppes =
112 enveloppes (pour le dernier agent)

* vérification de ce 1er essai :
(29 agents × 84 enveloppes) + (1 agent × 112 enveloppes)
= 2 436 enveloppes + 112 enveloppes = 2 548 enveloppes
ici : 29 agents + 1 agent = 30 agents

d'où ce 1er tableau (car c'est plus visible ainsi) :

Regarde la pièce jointe 1141009

bien sûr, ça serait vraiment injuste qu'un seul agent doive traiter 112 enveloppes quand tous ses collègues ont à traiter 84 enveloppes seulement ! ça lui fait 112 - 84 = 28 enveloppes de plus que ses collègues ! c'est pourquoi il faut chercher une meilleure répartition !​



* après plusieurs essais d'optimisation (méthode empirique, par tâtonnements successifs) :
(16 agents × 84 enveloppes) + (14 agents × 86 enveloppes)
= 1 344 enveloppes + 1 204 enveloppes = 2 548 enveloppes
ici : 16 agents + 14 agents = 30 agents

* 14 agents auront 2 enveloppes à traiter de plus que leurs collègues : 86 enveloppes au lieu de 84 enveloppes ; cette répartition est vraiment très raisonnable ! :)

ça donne ce 2ème tableau :

Regarde la pièce jointe 1141010


j'ai essayé ensuite la méthode directe de Katido :​

* nombre d'agents AG1 = ENV - AGT * n = 2 548 - (30 * 84) = 2 548 - 2 520 = 28
* nombre d'agents AG2 = AGT - A1 = 30 - 28 = 2

d'où ce 3ème tableau :​

Regarde la pièce jointe 1141018

c'est donc une bonne confirmation que la méthode directe de Katido marche très bien ! 🙂 👍 mais il y a quand même 2 agents qui ont à traiter 98 - 84 = 14 enveloppes de plus que leurs collègues. ; éventuellement, attribuer à ces 2 agents une petite prime en compensation ! 😜 réservé aux employeurs pas trop pingres ! 😄


pour « n = ENT(ENV/AGT) = ENT(2 548/30) = 84 enveloppes. » j'avais arrondi à l'entier inférieur ; si je fais maint'nant un arrondi à l'entier supérieur, ça donne : 85 enveloppes.

d'où ce 4ème tableau :

Regarde la pièce jointe 1141021

y'a une bonne amélioration, car 28 agents ont 1 seule enveloppe de plus à traiter que la minorité des 2 autres collègues : 85 au lieu de 84 ; on peut dire aussi :

TOUS les agents doivent traiter 85 enveloppes, SAUF 2 agents qui sont privilégiés vu qu'ils ont à traiter 1 enveloppe de moins que les autres !

je tiens quand même à vous rassurer sur ce point : les 28 agents défavorisés pour avoir eu à traiter 1 enveloppe de plus que les 2 autres n'en mourront pas ! 😁 🤪 😂 🤣 (enfin, j'crois pas ! si jamais y'a eu une hécatombe, ça doit plutôt être dû au covid-19 ou à la variole du singe !)

je ne peux pas affirmer ni garantir qu'en prenant l'entier supérieur, ça marchera toujours ! je crois que parfois, ça peut aboutir à un nombre d'enveloppes à traiter par agent négatif ! quelqu'un de plus matheux que moi pourra peut-être le confirmer ?​





ça, je ne m'en suis pas occupé, et je le laisse à un autre intervenant. 🍀

soan
bonsoir
mes données 1400 env pour 30 agent
1148 env pour 30 agent
le tot 2548 pour 60 agent
Merci pour tous
j'ai réaliser tous manuels
 

soan

XLDnaute Barbatruc
Inactif
@Seddiki

j'ai réalisé tous les calculs manuellement

c'est très bien ! ça fait faire de l'exercice ! 😄 😂 🤣



mes données :
1 400 enveloppes pour 30 agents
1 148 enveloppes pour 30 agents
total : 2 548 enveloppes pour 60 agents

ta ligne de total est bien exacte ! 🙂 👍

maint'nant, il te reste plus qu'à faire les calculs !
(avec la méthode indiquée précédemment)

Seddiki : "youpi ! encore un autre exercice !"

soan
 

Discussions similaires

Réponses
18
Affichages
716