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 ~