Suivi du planning et de l'activité du personnel

Pour la liste des entreprises, vous pouvez commencez avec ces entreprises sauf Challancin qui ne fait pas partir de nos clients (peut être dans l'avenir) mais la liste n'est pas exhaustive (on peut en ajouter comme en enlever). S'agissant du tableau, une extraction en fonction du mois serait l'idéal.

A ta disposition!

N'hésitez pas à supprimer le fichier de votre post car il n'est pas anonyme que ce soit au niveau des noms et ou des entreprises

@ bientôt

LouReeD

Bonjour,

voici une proposition de modification :J'ai supprimé beaucoup de chose pour que le fichier rentre dans le message

Je ne l'ai du coup pas testé...

Le principe :

bouton "saisie activité" pour soit donner une position d'absence du personnel ou de stage, soit pour lui donner une activité dans une entreprise.

Si c'est l'activité dans une entreprise, il suffit de sélectionner l'entreprise et alors chaque case colorée vaut une heure.

Les entreprises sont repérées par un trigramme, que vous pouvez modifier sur la feuille "BD".

@ vous relire pour savoir si cela convient.

@ bientôt

LouReeD

Bonjour Lou Reed

D'abord merci pour l'immense travail que vous avez accompli et que vous mettez à disposition de la communauté, c'est rare, voir unique.

Je suis actuellement en train de me servir d'APACHES pour configurer le nouvel outil de gestion de plannning de ma boîte et j'ai voulu y apporter quelques modifications. J'ai utilisé les lignes "Agenda" sur la feuille planning pour calculer le nombre de personnel dont je dispose en fonction de l'activité horaire. J'ai donc utilisé la fonction NB.SI pour additionner les occurences de code d'activité horaire afin d'obtenir le nombre de personnes présentes en fonction de l'activité. Jusque là, tout semble fonctionner, mais quand je fais dérouler ma formule sur l'ensemble du classeur, (de janvier n à janvier n+1= celle-ci ne fonctionne pas les dimanches.

Auriez-vous une solution à mon problème ? Je peux vous transmettre mon classeur en privé, car il contient déja l'identité de mes salariés que je ne souhaite pas voir afficher sur Internet.

Bien cordialement,

Majouble

Bonjour,

veuillez m'excuser pour le retard de ma réponse...

Pour ce que vous demandez, je crois que la feuille "existante" pôle activité ressemble à ce que vous cherchez à faire, non ?

Désolé de ne pas pouvoir plus me pencher sur le problème, manque de temps en ce moment

Mais comme vous l'avez suggéré dans votre message vous pouvez m'envoyer votre fichier par mail, l'adresse doit être "trouvable" sur le fichier, non ?

@ (très) bientôt alors

LouReeD

Bonsoir LouReed,

J'ai finalement trouvé un moyen, il se trouve simplement que tous les dimanches des lignes agenda de la feuille planning sont en couleur de police blanche,j'ai donc appliqué une couleur de cellule foncée pour contraster et hop le tour est joué !

Cependant j'ai un autre soucis actuellement. Je n'arrive pas à trouver dans le code la partie qui s'occupe de la définition de la Print Area afin de l'adapter a mes besoins. Je n'ai pas le code sous les yeux mais de mémoire je n'arrive pas à retrouver de variable qui définissent la zone d'impression. Certaines sont affectées a [Lig-Ref], mais je ne comprends pas ce a quoi cela correspond puisque je ne trouve pas de définition de la variable [Lig-Ref]. L'idée serait simplement d'avoir en print area les lignes de personnels et la date, afin de faire tenir tout mon personnel sur la même page.

Peut être pouvez vous m'éclairer ?

il y a deux types d'affichage :

une vue planning et une vue activité, la "planning" permet d'afficher le calendrier avec une seule ligne par personnel (celle de leur position) et la vue "activité" affiche toutes les lignes des différents personnels.

Dans les deux cas le code fait de façon à ne pas "découper" les personnels et les mois.

Pour le question du [Lig_Ref], il faut savoir que les références de variables sous VBA qui se trouvent entre crochet, c'est que le nom utilisé est un nom donné dans le classeur, il suffit donc dans la liste de choix d'une feuille de classeur, ici planning par exemple, liste de choix qui est la zone "texte" qui se trouve au dessus des numéros de ligne de la feuille et à gauche de la barre de formule, de rechercher le nom se trouvant entre crochet, une fois trouvé et cliqué, Excel vous "amène" directement à l'endroit où ce nom se trouve.

Dans notre cas cela vous renvoie sur la feuille système à la cellule H30 où se trouve une formule qui est :

=LIGNE(debut)

formule qui renvoie 9

"debut" est aussi un nom de cellule qui correspond à la première cellule du calendrier, c'est à dire sur la feuille planning la cellule D9.

Je sais c'est alambiqué, mais c'est du aux différentes modifications de l'application au fil du temps... Il y a beaucoup de redondance dans les variables !

Désolé

Sinon le code pour le print aréa en fonction du mode d'affichage choisi est celui ci :

Sub découpage_print(maj_print)
    Dim per_par_page
    Dim La_Ligne As Integer
    Dim les_lignes As Integer
    Dim nom_de_la_feuille As String
    nom_de_la_feuille = [N_Feuille_Planning].Value
    Dim la_ligne_de_référence As Integer
    la_ligne_de_référence = [Lig_Ref]
    Dim nombre_de_ligne_par_personnel As Integer
    nombre_de_ligne_par_personnel = [nb_ligne_personnel]
    La_Ligne = [Personnels].Row
    les_lignes = [max_imprim_ligne]
    per_par_page = WorksheetFunction.RoundDown((les_lignes - La_Ligne) / nombre_de_ligne_par_personnel, 0)
    If [An] <> [an_print] Or maj_print = True Then
        Sheets(nom_de_la_feuille).Activate
        ActiveWindow.View = xlPageBreakPreview
        Sheets(nom_de_la_feuille).ResetAllPageBreaks
        ActiveSheet.PageSetup.PrintArea = "A1:" & [f_de] & [Ligne_max]
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_fe] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_ms] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_av] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_mi] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_jn] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_jt] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_at] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_se] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_oc] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_no] & la_ligne_de_référence)
        Sheets(nom_de_la_feuille).VPageBreaks.Add Before:=Range([d_de] & la_ligne_de_référence)
        Dim la_ligne_du_dessous As Long
        If Cells(la_ligne_de_référence, [découp_journée].Column).EntireColumn.Hidden = True Then
            la_ligne_du_dessous = (([max_imprim_ligne] - La_Ligne) * nombre_de_ligne_par_personnel) + la_ligne_de_référence
            Do
                If la_ligne_du_dessous > ([Ligne_max] + 1) Then
                    Cells(([Ligne_max] + 1), 1).Activate
                    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
                    Exit Do
                End If
                Cells(la_ligne_du_dessous, 1).Activate
                ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
                la_ligne_du_dessous = la_ligne_du_dessous + ([max_imprim_lig] - [Personnels].Row * nombre_de_ligne_par_personnel)
            Loop
            Sheets(nom_de_la_feuille).PageSetup.Zoom = 68
            Sheets(nom_de_la_feuille).PageSetup.CenterVertically = False
        Else
            la_ligne_du_dessous = la_ligne_de_référence + (per_par_page * nombre_de_ligne_par_personnel) + 1
            Do
                If la_ligne_du_dessous > ([Ligne_max]) Then
                    Cells(([Ligne_max] + 1), 1).Activate
                    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
                    Exit Do
                End If
                Cells(la_ligne_du_dessous, 1).Activate
                ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
                la_ligne_du_dessous = la_ligne_du_dessous + (per_par_page * nombre_de_ligne_par_personnel)
            Loop
            Sheets(nom_de_la_feuille).PageSetup.Zoom = 64
            Sheets(nom_de_la_feuille).PageSetup.CenterVertically = False
        End If
        ActiveWindow.View = xlNormalView
        [an_print] = [An]
    End If
    maj_print = False
End Sub

qui se trouve dans le module "Routines"

Maintenant je n'ai pas forcément compris ce que vous vouliez dire par :

L'idée serait simplement d'avoir en print area les lignes de personnels et la date, afin de faire tenir tout mon personnel sur la même page.

@ bientôt

LouReeD

Bonjour,

Je comprends mieux le fonctionnement de la Lig-REF, elle renvoie à la première ligne de personnel. Mon problème n'est donc pas là. Je cherche à faire disparaître de l'impression la plage A1:A8 de sorte que n'apparaissent plus les feuilles agenda, et qu'il ne reste que le jour, la date, et les lignes personnels en vue activité. Je me suis dit avec ma fragile compréhension du VBA que je pouvais tout simplement modifier le code de cette manière :

ActiveSheet.PageSetup.PrintArea = "A8" & [f_de] & [Ligne_max] 

Mais ça n'a pas l'air de fonctionner...

Bonne journée,

Bonjour,

il faut aussi jouer sur la mise en page car dans cette dernière j'ai demandé une répétition de ligne...

Ou bien alors lors de la mise en place de l'impression il faut ajouter des lignes de codes pour masquer ces lignes "indésirables", c'est un peu le même principe que le bouton aperçue planning ou activité.

@ bientôt

LouReeD

Bonsoir,

ma deuxième application... Et ce n'est pas la plus "petite" : elle totalise à ce jour 59 506 téléchargements !

Merci @ vous !

@ bientôt

LouReeD

Bonjour

Bravo pour ce formidable travail.

Une suggestion en passant : que la saisie d’une absence efface les occupations déjà saisies de la journée.

Bonne continuation

Fab

Bonsoir,

Merci de l'intérêt que vous portez sur l'application !

Maintenant pour répondre à votre suggestion "en passant" :

Le fait de mettre une absence sur une journée qui contient déjà de l'activité est géré de cette manière :

si l'absence est compatible avec l'activité alors elle est inscrite, sinon rien n'est inscrit.

Pourquoi ? Tout simplement pour éviter d'effacer des données "par erreur".

Dans votre suggestion, si vous cliquer une absence par erreur sur un personnel alors son activité sera effacée... Est avec les macros, point de "UNDO" possible... Du coup si vous voulez mettre une absence alors qu'une activité est présente ET incompatible avec l'absence, il faut supprimer cette activité, et du coup c'est une action "volontaire" donc "normalement" pas d'erreur...

Par contre si l'absence est compatible avec l'activité alors il y a inscription de cette dernière (par exemple activité en après midi et mise en place d'une absence le matin)

@ bientôt

LouReeD

bonjour,

avant toutes choses , je vous souhaite une très bonne année 2019 pour vous et vos applications.

je vous félicite pour votre application qui est très bien construite.

je débute en vba et avant de faire des erreurs j'aimerai avoir vos lumières.

je souhaiterai rajouter deux colonnes avant le nom du personnel et 1 après pour rajouter:

le service (1er colonne)

le grade (2eme colonne)

la fonction (après le nom, 4°colonne)

de plus, est il possible de rajouter dans les lignes "agenda" une saisie automatique sur le même principe que les activités dans le planning

j'espère être simple et clair dans mes propos

je vous remercie d'avance et vous remercie

respectueusement

jb

Bonsoir,

merci pour tout ce qui a été dit !

Bon alors pour vos questions : comme il est dit dans la feuille "à lire" il est dit qu'il est possible d'ajouter des colonnes à gauche du tableau "planning", donc pour vos deux premières colonnes, normalement pas de soucis... J'utilise avec "précision" le mot "normalement"... Au vu des intitulés de vos colonnes, bref.

ensuite la futur 4ième colonne, cela est impossible... (enfin non, mais il faudrait reprendre "trop" de code pour l'adaptation), en effet le code VBA n'étant pas un de mes meilleurs (je me suis fais la main dessus et il faudrait aujourd'hui encore que je me la fasse...) code VBA, il y a beaucoup de valeurs "en dur", du coup l'ajout d'une colonne en plein milieu d'une zone définie en dur provoquerait, et là j'en suis sur, des erreurs de fonctionnement.

Pour ce qui est d'ajouter un code de saisie d'activité pour les lignes "agenda", je vous laisse le soin de vous faire la main dessus. En effet, comme je le dis dans plusieurs réponses depuis septembre, je manque de temps pour pouvoir me "plonger" dans l'écriture de code, mon niveau n'étant pas celui de certains ici, il m'en faut du temps !

Pour être clair dans vos propos, je pense les avoir compris, maintenant ai-je moi été clair...

Avez vous SPASME ? c'est également une appli de gestion de personnel, qui cette fois est peut-être plus simple à adapter...

J'en ai une autre sous le coude mais un problème de transfert m'empêche à l'heure actuelle de la proposer ici...

@ bientôt

LouReeD

Bon j'ai fait un petit test chez moi :

cela résiste bien à première vue pour les colonne 1 et 2, et aussi pour la 4 !

Seul "hic" c'est au niveau des MFC qui sont "re créées" à l'issue de l'ajout d'une activité ou d'une position, et c'est la que le code contient une valeur en "dur" c'est le nom de la colonne de départ de la MFC qui est "D" du coup la nouvelle colonne D se voit attribuées des couleurs qui ne sont pas les siennes normalement...

Donc ce qu'il faut faire c'est que dans les codes VBA partout où il y a un code de ce type :

Worksheets(nom_de_la_feuille).Range("D" & ligne_la_personne + (Décal_Agenda)).Activate
With Worksheets(nom_de_la_feuille).Range("D" & ligne_la_personne + 1 & ":" & [fin_planning] & ligne_la_personne + nombre_de_ligne_par_personnel - 1)
                .FormatConditions.Delete
                .FormatConditions.Add Type:=xlExpression, Formula1:="=ET(D$1=0;D" & ActiveCell.Row & "="""")"
                .FormatConditions.Add Type:=xlExpression, Formula1:="=ESTNUM(D" & ActiveCell.Row & ")"

il faut remplacé "D" par "G"

C'est un peu fastidieux mais pas insurmontable...

A vous de voir

Il y a aussi une manipulation à faire pour pouvoir ajouter les colonnes :

Clic droit sur le nom de l'onglet "Planning", "Visualiser le code" dans le menu qui s'ouvre, puis dans la fenêtre qui s'ouvre (VBA)

vers le bas à gauche il faut supprimer les valeurs en face de la propriété : "ScrollAera" afin de vous permettre de modifier cette "zone de scroll" sinon point d'ajout de colonne possible.

Ensuite une fois les colonnes ajoutés, vous allez voir que vous ne verrez rien, il faut les "démasquer", pour ce faire sélectionnez la colonne C au niveau de son entête, glisser la souris avec le bouton gauche appuyé (comme pour faire une sélection multiple de colonne) vers la gauche en "sortant" de la zone des colonnes de la feuille, clic droit sur l'entête de la colonne C puis "afficher", les colonnes A et B apparaissent ! Facile, non ?

Bon courage à vous pour ces futures modifications !

@ bientôt

LouReeD

Bonsoir,

voici SPASME modifié avec une partie de vos demande :

53spasme-v3-0-jb.xlsm (134.61 Ko)

ATTENTION ! Ce lien ne restera pas longtemps afin de ne pas perturber mes stats de téléchargement !

@ bientôt

LouReeD

re,

merci pour vos réponses.

pas de problème pour :

  • rechercher et modifier les "D" par "G"
  • ajouter des colonnes

sans vouloir abuser:

  • pouvez m'indiquer quelle est la ligne de code qui vous permet de fusionner les ligner afin de mettre le nom ( je suppose lors de la creation du nom)
  • pouvez vous m'orienter vers un code qui pourrez mettre une liste déroulante par défaut dans la colonne "A" afin d'ajouter le service de la personne ( je ferais la meme chose pour la colonne B et D)

j'espère ne pas être trop compliquer

merci d'avance

jb

Une liste déroulante ? Il y a tant de données à choisir ? Sinon je crois que vous pouvez faire un "[alt] + flèche du bas, cela permet de proposer ce qui a déjà été entré, et si la valeur n'existe pas alors la mettre en manuelle, elle sera affichée la prochaine fois.

Ou bien alors dans le menu "Données" puis "validation de données" et un petit tour sur le net ou ici sur le site pour le reste !

@ bientôt

LouReeD

Et SPASME ?

@ bientôt

LouReeD

bonjour,

merci pour vos réponses,

  • pour spasme l'esprit est bien au RDV, mais je vous avoue que APACHES corresponds nettement plus aux besoins.
  • pouvez vous m'orienter vers le code VBA de APACHES qui fusionne les lignes lors de la création d'un nouveaux noms?
merci à vous bonne journée à vous

cordialement

jb

Rechercher des sujets similaires à "suivi planning activite personnel"