Formule Excel/VBA complexe : copie automatique "intelligente"

super_newbie_pro

XLDnaute Junior
Bonjour

Je reviens vers vous pour ma seconde requête en VB concernant mon planning assisté. Le but de ce dernier est de faciliter la tâche de son utilisateur en calculant automatiquement heures effectuées, heures de nuit, heures de dimanche, jours ferriés etc... etc... et en accélérant la vitesse de saisie grâce à des données pré-entrées, grâce notamment au code de pierrejean qui a résolu ce problème-là dans ce topic-ci ==> https://www.excel-downloads.com/thr...i-txt-correspondant-alors-ecrit-ca-ici.86178/

Il me reste donc le problème qui, je pense, est le plus compliqué (de mont point de vue... mais peut être que pour vous... qui sait...). Je vais essayer d'être le plus clair possible dans ma description, au risque que celle-ci soit assez longue, et de prendre des exemples. Mon fichier fonctionne de la manière suivante ; on créé un planning individuel d'un agent en cliquant sur un simple bouton (créer une feuille agent) à partir du sommaire. Le planning de l'agent en question est créé à l'image d'un fichier qui sert de modèle et qui sera quant à lui caché. Jusque là tout allait bien. Tout joyeux, j'ai montré ma création à mon chef. Il a commencé à s'en servir puis... est revenu vers moi et s'est exclamé ; << bon sang, je n'arrive pas à utiliser ton planning, je suis perdu. >> Perdu lui répondis-je ? << Oui je suis perdu, je planifie des gars mais je ne sais plus qui fait quoi et je suis obligé de chercher dans tous les agents qui se trouve où... Je perds énormément de temps. >>

Il m'expliqua alors que pour certains services, pour certains clients, il était nécessaire d'avoir ce qu'on pourrait appeler un planning général, où tous les agents sont les uns à côté des autres et où tout est simplifié. On n'indique plus les heures de nuit, de dimanche etc... mais simplement les heures travaillées. Le but ; avoir plusieurs agents sous les yeux en même temps et ça aide ainsi à planifier les gars.

Voici ce qu'il faudrait :
- Conserver les plannings individuels. Ca c'est fait
- Créer un planning général pour un client (pour l'exemple). Ca c'est fait
- Que les vacations entrées dans le planning général soient recopiées automatiquement dans les plannings individuels. Le code VB doit pouvoir identifier le nom des agents situés dans le planning général et copier leurs vacations dans leurs plannings individuels et doit donc pour ça, pouvoir identifier le nom des onglets.

Je pensais à quelque chose du genre : Si sur la ligne 2 de la feuille "centre" se trouvent des noms, alors rechercher des onglets portant ces noms. Si pas trouvé de correspondance (ce peut être une erreur), alors ne rien faire. Si des agents de la ligne 2 ont été trouvés sur certains onglets, alors recopier les heures de début et de fin trouvées dans leur planning individuel.

Fonctionnement souhaité :
- Le membre Pierrejean m'a donné le code pour faciliter la saisie des vacations. 1°) Si on entre le nom d'une vacation connue dans un tableau, les heures de début et de fin sont automatiquement entrées. Ca gagne du temps. 2°) Si on entre une vacation ne figurant pas dans le tableau des vacations connues, on entre manuellement les heures de début et de fin. Pour le 3°) Voici ce qu'il faudrait :

==> chaque planning général est toujours dédié à un client précis IMPORTANT. C'est à dire qu'on va planifier plusieurs de nos agents pour ce même client durant le mois en cours. Les clients peu importants c'est à dire ceux qui ne nous commandent pas beaucoup d'agents n'ont pas besoin qu'on leur dédie un planning général puisqu'il est aisé de planifier nos gars. Mais tous nos agents peuvent très bien bosser sur d'autres sites et donc pour d'autres clients.

==> le planning général d'un client comporte deux colonnes par agent correspondant à deux vacations possibles. Un agent peut en faire une seule (8h-15h par exemple) ou peut en faire 2 (6h-12h puis 14h-18h) par jour. Il peut aussi travailler quelques jours dans la semaine et être de repos ensuite...


Vos compétences et votre aide me seraient utiles pour faire ce qui suit :

Quand on rentre des vacations dans le planning général d'un client (le nom du client figure en haut de ce planning), alors il faudrait que les heures de début et de fin de service qu'on y a entré, soient automatiquement copiées sur les plannings individuels pour gagner du temps. Quand au nom du site, et bien on indique le nom du client de la feuille d'où provient la copie des heures.

Par exemple si l'agent A fait 8h-12h sur le planning général du client "youpi", alors excel aidé du code VB, devrait chercher l'onglet (le planning individuel) de l'agent A et s'il le trouve, copier en vacation 1, 8h dans heure de début et 12h heure de fin. Si l'agent A fait 9h-11h et 14h-18h dans la même journée sur le planning général du client "youpi", copier dans son planning individuel 9h-11h dans vacation 1 et copier 14h-18h dans vacation 2.

subtilité du code "intelligent" souhaité : Si l'agent A dispose dans son planning individuel d'une vacation chez le client "cora" de 8h à 12h et qu'on plannifie sur le planning général du client "youpi" une vacation de 14h à 18h, alors copier 14h à 18h dans la seconde colonne vacation de son planning individuel puisque la première est occupée par le client cora. Ainsi, il faudrait que la formule "décale" l'écriture si jamais c'est pris.

Seconde subtilité du code "intelligent" souhaité : Si l'agent A est planifié sur deux plannings généraux le même jour, alors le code devrait recopier les vacations en fonction des heures. Par exemple imaginons que le 25 du mois, l'agent A soit planifié sur le planing Général du client "youpi" de 15h à 18h puis qu'on le planifie le même jour sur le planing général du client "hourra" de 8h à 14h. Il faudrait que le code range dans l'ordre croissant de commencement des vacations ; qu'il mette dans son planning individuel dans vacation 1 le client hourra de 8h à 14h puis dans vacation 2 le client "youpi" de 15h à 18h. Exemple de fonctionnement souhaité : Imaginons qu'on aurait planifié en premier le client "youpi" (qui s'inscrira dans vacation 1 de son planning individuel) puis qu'on planifie aprés le second client "hourra", comme hourra commence à 8h alors que youpi commence à 14h, alors décaler youpi en vacation 2 et mettre hourra en vacation 1.

Dans le fichier ci-dessous :
Ce lien n'existe plus

J'ai mis un planning général qui est sous le nom "centre". Le client concerné est en haut "centre comm". Par contre, pour que ça marche, il faut que les noms concordent. Ainsi, renommez Jean en Pierrejean (sur la feuille centre).

S'il y en a un qui trouve le code VB à entrer, ça sera formidable :eek:
D'avance merci
 
Dernière édition:

super_newbie_pro

XLDnaute Junior
complément

up up...

peut être qu'avec des images et une ré-explication, ça vous aiderait ?
---------
Mon fichier, outre les pages paramètres, contient principalement deux types de plannings :
- Un planning général par client important nécessitant un tas de nos agents.
- Un planning individuel par agent et par feuille

==> chaque planning général est toujours dédié à un client précis IMPORTANT. C'est à dire qu'on va planifier plusieurs de nos agents pour ce même client durant le mois en cours. Les clients peu importants c'est à dire ceux qui ne nous commandent pas beaucoup d'agents n'ont pas besoin qu'on leur dédie un planning général puisqu'il est aisé de planifier nos gars. Mais tous nos agents peuvent très bien bosser sur d'autres sites et donc pour d'autres clients. Le but de ce planning général est de faciliter la plannification de nos gars, en en ayant un maximum sous les yeux.



==> le planning général d'un client comporte deux colonnes par agent correspondant à deux vacations possibles. Un agent peut en faire une seule pour ce client (8h-15h par exemple) ou peut en faire 2 (6h-12h puis 14h-18h) par jour pour ce même client. Il peut aussi travailler quelques jours dans la semaine et être de repos ensuite...



Vos compétences et votre aide me seraient utiles pour faire ce qui suit :

Quand on rentre des vacations dans le planning général d'un client (le nom du client figure en haut de ce planning), alors il faudrait que les heures de début et de fin de service qu'on y a entré, soient automatiquement copiées sur les plannings individuels pour gagner du temps. Quand au nom du site, et bien on indique le nom du client de la feuille d'où provient la copie des heures.

Exemple : on inscrit dans le planning général cora le nom de l'agent "Dupont". On le planifie le 5 du mois de 20h à 23h. Alors le code VB cherche un onglet portant le nom "dupont" et s'il le trouve, copie dans "vacation 1" le nom du client de ce planning général "cora" (première ligne) puis inscrit dans heure de début et heure de fin de la première vacation, le 20h et 23h entrés dans le planning général. Si l'agent A fait 9h-11h et 14h-18h dans la même journée sur le planning général du client "cora", copier dans son planning individuel 9h-11h dans vacation 1 et copier 14h-18h dans vacation 2.


subtilité du code "intelligent" souhaité : Si l'agent A dispose dans son planning individuel d'une vacation chez le client "cora" de 8h à 12h et qu'on plannifie sur le planning général du client "youpi" une vacation de 14h à 18h, alors copier 14h à 18h dans la seconde colonne vacation de son planning individuel puisque la première est occupée par le client cora. Ainsi, il faudrait que la formule "décale" l'écriture si jamais c'est pris.





Seconde subtilité du code "intelligent" souhaité : Si l'agent A est planifié sur deux plannings généraux le même jour, alors le code devrait recopier les vacations en fonction des heures. Par exemple imaginons que le 25 du mois, l'agent A soit planifié sur le planing Général du client "youpi" de 15h à 18h puis qu'on le planifie le même jour sur le planing général du client "hourra" de 8h à 14h. Il faudrait que le code range dans l'ordre croissant de commencement des vacations ; qu'il mette dans son planning individuel dans vacation 1 le client hourra de 8h à 14h puis dans vacation 2 le client "youpi" de 15h à 18h.

Exemple de fonctionnement souhaité : Imaginons qu'on a entré sur le planning inviduel de l'agent A la vacation 1 intitulée "soirée" de 20h à 23h. Puis dans le planning général du client "youpi" on entre pour le même jour, pour cet agent, la vacation 14h45 17h. Le code VB voyant que la vacation 1 est déjà occupée dans le planning individuel, copierait 14h45 à 17h en vacation 2 et indiquerait comme nom de cette vacation "youpi" (ligne 1 des plannings généraux qui comportent le nom du client). Mais aprés, sur un autre planning général du client "hourraaa", on planifie le même jour, ce même agent de 8h à 12h. Comme vacation 1 et 2 sont déjà occupées sur le planning général, alors copier 8h à 12h dans la vacation 3 et appeler celle-ci "hourraaa". Mais on aura alors ceci :

20h-23h soirée, 14h45-17h youpi, 8h-12h hourraaa. pas top le rangement. Donc faudrait que la formule range dans l'ordre :

8h-12h hourraaa en vacation 1, 14h45-17h youpi en vacation 2, 20h-23h soirée en vacation 3


Je m'interrogeais concernant ce "rangement" dans l'ordre... Peut-être qu'il faudrait le séparer du code VB de la copie automatique des plannings généraux vers les plannings individuels afin de rendre plus facile l'écriture du code, non ?

Je pensais notamment à ce détail ; Ne faudrait-il pas un bouton supplémentaire sur le sommaire intitulé "ranger les vacations". Ainsi, une fois qu'on aurait rempli nos plannings individuels et généraux, qu'excel avec VBA et le code que vous auriez créé, aurait tout copié où il faut, on repartirait sur le sommaire et on cliquerait sur ranger les vacations et elles seraient mises dans l'ordre horraire... Enfin c'est une idée. Aprés si ça peut être intégré directement dans le code VB de la copie automatique "intelligente" pourquoi pas.

D'avance merci à celui qui y arrivera !

Le fichier excel se trouve ici (je vous ai créé 2 plannings généraux et 3 agents) ==> Ce lien n'existe plus
 

super_newbie_pro

XLDnaute Junior
Re : Formule Excel/VBA complexe : copie automatique "intelligente"

up ?
argv23.gif
 

Statistiques des forums

Discussions
291 805
Messages
1 918 120
Membres
179 933
dernier inscrit
louys
Haut Bas