Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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,
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,
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.