Suivi du planning et de l'activité du personnel

Pour partager vos applications (Excel, Calc et Google Sheets) avec les autres membres
Répondre
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'073
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 22 août 2018, 00:24

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é :oops:

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
M
Majouble
Nouveau venu
Nouveau venu
Messages : 3
Inscrit le : 8 août 2018
Version d'Excel : 2016

Message par Majouble » 22 août 2018, 09:16

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,
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'073
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 26 septembre 2018, 22:48

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'073
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 9 octobre 2018, 21:41

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
F
Fab22
Nouveau venu
Nouveau venu
Messages : 1
Inscrit le : 1 novembre 2018
Version d'Excel : 2016 fr

Message par Fab22 » 1 novembre 2018, 22:01

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
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'073
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 2 novembre 2018, 00:01

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
j
jeromeB
Membre habitué
Membre habitué
Messages : 95
Inscrit le : 17 avril 2016
Version d'Excel : 2013

Message par jeromeB » 23 janvier 2019, 20:33

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. ::D
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 :oops:
je vous remercie d'avance et vous remercie
respectueusement
jb
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'073
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 23 janvier 2019, 21:42

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 ! :lol:

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'073
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 23 janvier 2019, 22:03

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
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 7'073
Appréciations reçues : 370
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 23 janvier 2019, 22:27

Bonsoir,

voici SPASME modifié avec une partie de vos demande :
SPASME_V3.0_JB.xlsm
(134.61 Kio) Téléchargé 38 fois
ATTENTION ! Ce lien ne restera pas longtemps afin de ne pas perturber mes stats de téléchargement ! :lol:

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message