formateur informatique

Marquer les absences dans un planning au clic droit

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Marquer les absences dans un planning au clic droit
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Marquer les absences

Dans le volet précédent, nous avons appris à créer un menu contextuel personnalisé par le code VBA Excel. Ici, nous suggérons de prolonger la solution pour offrir des actions adaptées aux choix de l'utilisateur.

Marquer les absences sur un planning Excel avec un menu contextuel créé en VBA

Sur l'exemple illustré par la capture, l'utilisateur travaille à partir d'un planning des absences des salariés. Faut-il encore qu'il puisse en invoquer les raisons. Pour cela et pour un salarié désigné, il sélectionne une plage de cellules correspondant à une période, puis il réalise un clic droit sur la sélection. C'est alors un menu contextuel personnalisé qui se déclenche. Il peut prétexter une absence pour déplacement, pour congés ou encore pour raison médicale. Il peut aussi réinitialiser la plage en cas d'erreur. Bref, un clic sur l'une des rubriques de ce menu contextuel, affecte la plage d'une couleur dédiée avec une mention répétée, confirmant la nature de l'indisponibilité. Cette solution constitue une méthode ergonomique et productive pour synthétiser rapidement les disponibilités d'une flotte, sur des périodes zonées.

Classeur Excel à télécharger
Nous suggérons d'appuyer les travaux sur un classeur offrant déjà ce planning et récupérant quelques éléments VBA développés à l'occasion du volet précédent.
  • Télécharger le classeur barres-menus-conges-absences.xlsm en cliquant sur ce lien,
  • Cliquer avec le bouton droit de la souris sur le fichier réceptionné,
  • En bas du menu contextuel, choisir la rubrique Propriétés,
  • En bas de la boîte de dialogue, cocher la case Débloquer et valider par Ok,
  • Dès lors, double cliquer sur le fichier pour l'ouvrir dans Excel,
Nous retrouvons le planning de la présentation avec les noms des salariés énumérés en colonne B et les jours du mois énumérés en ligne 4. Les jours de Week-End sont marqués par de fines hachures. Les jours de semaine apparaissent en vert. A ce stade, si vous réalisez un clic droit sur une cellule ou une plage présélectionnée, c'est encore le menu contextuel classique d'Excel qui se déclenche. Nous devons remédier à tout cela.

Le menu contextuel
Comme nous l'avons développé à l'occasion du volet précédent, le code VBA permettant de créer le menu contextuel, moyennant quelques adaptations, existe déjà. Nous proposons de le constater.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
C'est ainsi et dans un premier temps que nous découvrons l'appel de la procédure menuContext à l'ouverture du classeur.

Sub Auto_Open()
menuContext
End Sub


Celle-ci se charge de créer la barre de menu contextuelle avec toutes ses rubriques ou boutons, comme nous l'avons appris à l'occasion du volet précédent.

Sub menuContext()
Dim barreC As CommandBar
Dim elemC As CommandBarControl

On Error Resume Next
CommandBars("clicDroit").Delete

Set barreC = CommandBars.Add("clicDroit", msoBarPopup, Temporary:=True)

Set elemC = barreC.Controls.Add(msoControlButton)
With elemC
.Caption = "Déplacement"
.OnAction = "dplcmt"
.FaceId = 3078
End With

Set elemC = barreC.Controls.Add(msoControlButton)
With elemC
.Caption = "Congés"
.OnAction = "conges"
.FaceId = 3018
End With

Set elemC = barreC.Controls.Add(msoControlButton)
With elemC
.Caption = "Maladie"
.OnAction = "malade"
.FaceId = 108
End With

Set elemC = barreC.Controls.Add(msoControlButton)
With elemC
.Caption = "Effacer"
.OnAction = "eff"
.FaceId = 128
.BeginGroup = True
End With

End Sub


Nous générons le menu contextuel clicDroit. A l'intérieur, nous générons des rubriques (barreC.Controls.Add). Pour chaque rubrique ainsi créée, nous appellons une procédure au clic, comme celle-ci pour la première .OnAction ="dplcmt".

Gérer le clic droit
Avant de créer ces procédures respectives appelées au clic droit puis au clic sur l'une des rubriques du menu contextuel, nous devons commencer par gérer l'événement du clic droit lui-même. De plus, nous devons nous assurer que ce clic droit est bien effectué dans une zone du planning.
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Feuil1 (Presences),
  • En haut de la feuille de code, déployer la liste déroulante de gauche,
  • Dans les propositions, choisir l'objet Worksheet,
  • Dès lors, déployer la liste déroulante de droite,
  • Dans les propositions, choisir l'événement associé BeforeRightClick,
Déclencher un code VBA Excel au clic droit sur les cellules de la feuille

Cette action a pour effet de créer la procédure événementielle Worksheet_BeforeRightClick. Son code VBA se déclenchera au clic droit sur une cellule de la feuille active. De fait, la procédure Worksheet_SelectionChange qui a été automatiquement générée par le premier choix, peut être supprimée.
  • Dans les bornes de cette procédure, ajouter le code VBA suivant :
...
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim croisement As Range

Set croisement = Application.Intersect(Range("planning"), Target)

If Not croisement Is Nothing Then
CommandBars("clicDroit").ShowPopup
Cancel = True
End If

End Sub
...


Il est très semblable à celui du code VBA du volet précédent. Nous initialisons l'objet croisement sur l'intersection entre la cellule cliquée (Target) et le planning reconnu sous ce même nom. Vous pouvez le constater en déployant la zone Nom, en haut à gauche de la feuille Excel.

Si le clic droit est bien réalisé sur le planning (If Not croisement Is Nothing Then), alors nous commandons l'affichage du menu personnalisé (CommandBars("clicDroit").ShowPopup), tout en annihilant le menu contextuel d'Excel par défaut (Cancel = True).

Les actions
Les actions dépendant des événements générés à la volée dans la procédure menuContext, doivent elles aussi être définies dans le module, en cohérence avec l'appel de l'utilisateur.
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Module1,
  • Sous la procédure menuContext, créer tout d'abord la procédure dplcmt comme suit,
Sub dplcmt()
With Selection
'Bleu
.Interior.Color = RGB(142, 169, 219)
.Font.Color = RGB(31, 78, 120)
.Value = "dp"
End With
End Sub


Elle génère l'action répondant au clic sur la première rubrique du menu contextuel. Elle remplit les cellules sélectionnées de bleu, avec des nuances entre la police et le fond, tout en inscrivant l'indication dp pour déplacement, comme cause d'absence dans les locaux.

Les autres rubriques
Selon le même modèle, nous devons créer les trois autres actions contextuelles correspondantes.
  • Sous la procédure dplcmt, créer les trois autres procédures contextuelles, comme suit :
Sub conges()
With Selection
'Vert
.Interior.Color = RGB(169, 208, 142)
.Font.Color = RGB(75, 86, 36)
.Value = "cp"
End With
End Sub

Sub malade()
'Orange
With Selection
.Interior.Color = RGB(255, 217, 102)
.Font.Color = RGB(128, 96, 0)
.Value = "ma"
End With
End Sub

Sub eff()
With Selection
.Interior.Color = RGB(226, 239, 218)
.Value = ""
End With
End Sub


Nous définissons les congés et les maladies sur la sélection dans d'autres couleurs. Puis, nous créons une dernière action contextuelle (eff), pour réinitialiser les cellules afin d'effacer facilement les causes d'absences, en cas d'erreur de manipulation.

Marquer les absences
Le code VBA Excel est terminé. Il est temps de le tester.
  • Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
  • Sélectionner les cellules d'une semaine de travail pour un salarié,
  • Réaliser un clic droit sur la sélection,
  • Dans le menu contextuel personnalisé, cliquer sur l'une des causes d'absence,
Gérer les absences dans un planning Excel avec un menu contectuel personnalisé par le VBA

Comme vous pouvez l'apprécier, c'est désormais de façon très ergonomique et rapide que l'utilisateur peut spécifier les multiples causes d'absences des salariés, dans des jeux de couleurs différents. C'est ainsi que la lecture du planning s'en trouve grandement simplifiée. Dans le même temps, la dernière rubrique du menu contextuel, permet de réinitialiser facilement une plage indûment notifiée.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn