Planning assisté excel; besoin de formules VB pour deux problématiques

Planning assisté excel; besoin de formules VB pour deux problématiques - VB/VBA/VBS - Programmation

Marsh Posté le 15-12-2007 à 16:22:33    

Bonjour.
 
Je viens vers vous pour obtenir des formules pour mon fichier de gestion des plannings. Je l'ai créé dans un but de faire gagner un maximum de temps à ceux qui le rempliront. Ce dernier faisant 279ko, est hébergé ici ==> http://www.rugbyclubvichy13.fr/web/Planning.xls
 
Il se présente sous la forme suivante :
 
- Chaque agent a un planning individuel dont l'onglet porte son nom.
- La création de nouveaux agents se base sur une feuille vierge qui sert de modèle et qui sera cachée.
- Une page sommaire contenant deux menus déroulant permettant d'accéder directement à un client ou à un agent, ainsi que 3 boutons permettant soit de créer un nouvel agent, soit d'accéder directement à la feuille des paramètres (heures de nuit, jours ferriés etc...), soit d'effectuer un calcul visant à vérifier si on n'a pas oublié d'agents ou si on n'en a pas mis en trop (le résultat est indiqué par des cases rouges dans la feuille clients).
 
Problème ; ma direction m'a fait part de deux soucis.
 
Le premier
, les plannings individuels c'est très bien mais pour de rares clients, il faut tellement d'agents qu'un planning général est nécessaire pour aider à plannifier visuellement les gars. En gros, une page dédiée à ce client. Je l'ai donc créé sous le nom "_-centre-_". Il faudrait que toutes les vacations qu'on y entre, soit recopiées dans les plannings des agents concernés.
Si l'agent A fait une vacation le 10 du mois sur le planning général, il faudrait que  ce soit automatiquement copié dans son planning indviduel et que dans "vacation", soit automatiquement copié le nom qu'on a entré en première ligne du planning général "centre comm".
 
J'avais pensé à une formule à variables du genre ;
===========
Si tu trouve un agent dans planning général intitué "xxx" (ici c'est _-centre-_) alors copie toutes les heures de début et de fin que tu trouve pour lui et colle les dans son planning individuel qui porte son nom. Dans "vacation1", indique le nom figurant ici xxxx (première ligne de la page _-centre-_). S'il n'y a rien de planifié, alors ne rien copier (et permettre de marquer d'autres sites/clients). S'il y a plusieurs vacations de planifiées dans le planing général, alors recopier autant de vacations qu'il y en a. Par exemple, si le 07 du mois l'agent A fait 8h-12h puis reprend à 14h jusqu'à 18h, et que c'est marqué dans le planning général _-centre-_, alors copier dans "vacation1" le nom figurant ici xxxx (première ligne de la page _-centre-_) puis l'heure de début et l'heure de fin (8h-12h) et dans vacation 2, recopier pareillement la seconde vacation de 14h à 18h.
 
Ainsi, le travail est plus facile. La direction planifie les agents sur ce gros client sur le planning général, excel dispatche les vacations entrées sur les plannings individuels, puis la direction complète les plannings individuels avec les autres clients/vacations.
 
==> Sauriez-vous quelles lignes de code en VB entrer pour cette "copie automatique" des vacations entrées sur le planning général vers les plannings individuels, où mettre ces lignes de code, sur quelle page ?
 
------------------------------------------
 
Le second problème :
 
Ils m'ont dit qu'ils perdaient un temps fou à rentrer les heures de début et heures de fin pour certains clients dont on connaissait par avance, à l'année, les vacations.
Par exemple, pour les commandes de la mairie, on sait que lorsqu'ils nous commandent des agents, ce sera systématiquement de 21h à minuit.
Ils m'ont demandé s'il était possible de faire une sorte de raccourci.
 
J'ai donc créé dans la page paramètre, en bas, un tableau intitulé "vacations connues" comportant : le nom des vacations, leur heure de début et de fin. Par contre aprés je ne sais pas comment faire.
 
Il faudrait que quand on entre dans un planning individuel, dans une colonne "vacation" un nom figurant dans ce tableau, qu'excel copie automatiquement l'heure de début et heure de fin entrés dans le tableau dans la page paramètres, directement dans l'heure de début et heure de fin du planning de l'agent. Ce raccourci ferait gagner un temps précieux.
 
==> Sauriez-vous quelles lignes de code en VB entrer pour cela, où les mettre, sur quelle page ?
 
D'avance merci.
PS : je ne maitrise absolument pas le VB, toutes les formules déjà créées dans ce fichier ont été écrites par mon Frangin mais il bloque sur ces deux points, d'où le fait que je vienne vers vous. http://www.delta-sierra.com/images/smiley_prosterne.gif


Message édité par super_newbie_pro le 15-12-2007 à 16:23:29

---------------
~ Camping thématique LA RESSOURCE sur l'autonomie ~
Reply

Marsh Posté le 15-12-2007 à 16:22:33   

Reply

Marsh Posté le 16-12-2007 à 13:26:47    

bjr ,   j'ai   bien lu  votre messge , pour  me permettre de vous  trouver la solution à votre prob , vous  est-il possible de m'envoyer  un model de votre tableau sur excel en fesant apparaittre des   cellules comportant des formules. et  mème  sil  faut  écrire  vos  formules  en  texte , peut  etre  avec ça,  ça va me faciliter la tache ça doit  etre  un ptit detail oublié quelque  part ok l'ami à +

Reply

Marsh Posté le 18-12-2007 à 03:17:59    

Bonjour.
merci pour votre proposition d'aide. Les deux ensemble de codes en VB dont j'avais besoin n'ont pas été écrits puisqu'on ne savait pas comment procéder. Cependant, le second problème exposé dans mon premier post vient d'être trouvé par un forumeur et le fichier mis à jour comportant les nouvelles lignes de code VB se trouve ici : http://www.rugbyclubvichy13.fr/web/planning.rar
 
Ces nouvelles lignes de code VB se trouvent dans les pages agents :
----------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, Target.Column) = "" Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Column = 2 Or Target.Column = 6 Or Target.Column = 10 Then
 If Target.Row > 2 And Target.Row <> 44 Then
  If insvac(Target.Value) <> "non connue" Then
   x = Split(insvac(Target.Value), "!" )
   Target.Offset(0, 1) = CDbl(x(0))
   Target.Offset(0, 2) = CDbl(x(1))
   End If
 End If
End If
End Sub
 
et dans un module de prog :
----------------
Function insvac(ach As String)
Dim vac As Range
Dim vacation As Range
Set vac = Sheets("PARAMETRES" ).Range("A:A" ).Find("Nom de la vacation", LookIn:=xlValues, lookat:=xlWhole)
Set vacation = Sheets("PARAMETRES" ).Range("A" & vac.Row + 1 & ":A" & vac.End(xlDown).Row).Find(ach, LookIn:=xlValues, lookat:=xlWhole)
If Not vacation Is Nothing Then
 insvac = vacation.Offset(0, 1) & "!" & vacation.Offset(0, 2)
Else
 insvac = "non connue"
End If
End Function
 
================
Il me reste donc le premier 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 (re)description de celui-ci, 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.


---------------
~ Camping thématique LA RESSOURCE sur l'autonomie ~
Reply

Marsh Posté le 20-12-2007 à 13:34:18    

up up...
 
peut être qu'avec des images et une ré-explication, ça vous aiderait mieux ?
---------
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.
 
http://www.rugbyclubvichy13.fr/web/02_planning_g.jpg
 
==> 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...  
 
http://www.rugbyclubvichy13.fr/web/01_planning_g.jpg
 
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.
 
http://www.rugbyclubvichy13.fr/web/03_planning_g.jpg
 
http://www.rugbyclubvichy13.fr/web/04_planning_g.jpg
 
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) ==> http://www.rugbyclubvichy13.fr/web [...] _cours.rar


Message édité par super_newbie_pro le 20-12-2007 à 13:34:57

---------------
~ Camping thématique LA RESSOURCE sur l'autonomie ~
Reply

Marsh Posté le 02-01-2008 à 19:16:54    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed