Liste déroulante contextuelle

Brig

XLDnaute Nouveau
Bonjour à tous,

En avant propos, je tiens à vous dire que je suis débutante sur le forum et un peu aussi sur excel
Voilà mon problème, j'ai créé un fichier de suivi des heures des salariés avec un calendrier perpétuel. Ce fichier me permet de suivre les heures réalisées, la modulation, le solde des CP,...
Les salariés n'auront accès qu'aux cellules matin et après midi de chaque colonne. Ils peuvent entrer des nombres (d'heures mais au format standard), ou du texte (comme CP, RECUP, FORM ou ABS).
Mon problème est que je souhaiterai ouvrir un menu contextuel, ou une liste déroulante uniquement si ils saisissent ABS dans la cellule. Ce menu contextuel proposerait une liste comme MALADIE, abs pour enfant malade, congé mat, congé pat,...
Cette opération est-elle possible dans excel?
Merci de vos réponses
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Avec cette méthode, ce n'est pas possible car pour la liste déroulante, je fais référence à cette colonne.
Autrement il faut passer par du code VBA mais moi je ne sais pas faire, patience, une âme charitable va certainement te donner la solution.

JHA
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

D'accord merci, mais plus j'y pense et plus je me dis que le VBA est indispensable en effet.
Plus j'y pense et plus je me dis qu'il serait non pas indispensable mais envisageable que le demandeur pense à joindre un fichier exemple (anonymisé) comme le suggère la charte du forum que tout nouveau membre prend bien sur le temps de lire avant de poster son premier message ;)

Ce fichier exemple permettait au répondeurs de se mettre à la tâche sans perdre de temps à recréer un fichier qui existe déjà sur le disque dur de Brig.
 

Brig

XLDnaute Nouveau
Oh pardon, je suis désolée. Effectivement, j'ai lu la charte avec attention, mais j'ai du louper ce paragraphe ;)
Alors voilà le fichier anonymisé, pour ceux qui voudrait contribuer à ma peine
 

Pièces jointes

  • Gestion heures pers adm essai.xlsx
    36 KB · Affichages: 31

Staple1600

XLDnaute Barbatruc
Re

Voila c'est tout de suite plus parlant avec le fichier.
Alors tout petit début de piste
(A mettre dans le code de la feuille et pas dans un module standard)
VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)
Dim Choix
If T.Count > 1 Then Exit Sub
Select Case T.Column
Case 3, 4 ' à compléter avec les numéros de colonnes adéquats
Choix = InputBox("1:CP,2:RECUP,3:FORM") ' à compléter
MsgBox Choose(Choix, "CONG", "CP", "FORM") ' à compléter
Case Else
'
End Select
End Sub

Brig
Je te suggère de chercher dans les archives des questions similaires ou l'on te parlera d'userform qui s'affiche en s'alignant sur le coin gauche de la cellule adjacente de la cellule active ou aussi de personnalisation du menu contextuel d'Excel
Bref plein de choses qui existent déjà sur le forum que je n'ai pas envie de réécrire ce soir.
Donc je cède la place à mes petits camarades de jeu ;)
 

Staple1600

XLDnaute Barbatruc
Re

Finalement, j'avais un peu de temps à tuer, j'ai donc persévérer un chouia
Donc avec un Userform (dans le genre ci-dessous)
usfr.jpg

Quand on clique sur un OptionButtion , sa caption s'inscrit dans la cellule active et l'useform se masque.

Dans un module de classe
VB:
Public WithEvents OBtn As MSForms.OptionButton
Public Motif
Private Sub OBtn_Click()
    Motif = OBtn.Caption
    ActiveCell = Motif
    If OBtn Then UserForm1.Hide
    OBtn = False
End Sub

Dans le code de l'userform
VB:
Dim OBs() As New Classe1
Private Sub UserForm_Initialize()
Dim i As Integer, Ctrl As Control
i = 0
For Each Ctrl In UserForm1.Controls
If TypeName(Ctrl) = "OptionButton" Then
    i = i + 1
    ReDim Preserve OBs(1 To i)
    Set OBs(i).OBtn = Ctrl
    End If
Next Ctrl
With Me
    .StartUpPosition = 0
    .Top = ActiveCell.Top + 99
    .Left = ActiveCell.Offset(, 2).Left - 5
End With
End Sub

Dans le code de la feuille nommée Cob
VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)
If T.Count > 1 Then Exit Sub
If T.Row > 42 Then Exit Sub
Select Case T.Column
Case 3, 4 ' à compléter avec les numéros de colonnes adéquats
UserForm1.Show
Case Else
'
End Select
End Sub
 
Dernière édition:

Brig

XLDnaute Nouveau
Ah ça y est j'ai trouvé le module de classe. Encore une question, est-il possible que ce formulaire ne s'ouvre que après remplissage? Je veux dire par là, que les salariés doivent d'abord rentrer des heures et si c'est du texte (notamment s'ils tapent ABS alors la boite de dialogue s'ouvre?

Merci de vos réponse
Bonne soirée
 

Staple1600

XLDnaute Barbatruc
rE

Il est l'heure pour moi d'aller me sustenter et sans doute m'abrutir devant quelque émission de télévision
par conséquent de nouveau je redis
Donc je cède la place à mes petits camarades de jeu ;)

Dernier conseil avant d'enfiler mon pyjama
Regardez dans les archives du forum, il devrait y avoir des exemples d'useform qui s'affiche aux alentour de la cellule active.
(Pour ce faire cliquez sur la loupe en haut à droite)

Bon appétit à tous
 

Brig

XLDnaute Nouveau
Bonjour à tous,

j'ai pas mal avancé dans mon idée à partir de vos idées et à force de recherche. J'arrive maintenant à ouvrir une boite de dialogue si les salariés saisissent "abs", ça marchait super. J'ai voulu compliquer les choses en intégrant une inputbox qui permet de saisir les cellules concernées (plage de dates) afin de reporter l'absence sur cette plage et là il y a un bug. Même si l'action se déroule, un message s'affiche (Erreur 13 : Incompatibilité de type) et ouvre le code VBA. Là ça dépasse franchement mes compétences.
Merci pour votre aide
 

Pièces jointes

  • Gestion heures pers adm essai.xlsm
    50.1 KB · Affichages: 40

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Si tu testes ta macro InputBox sur une feuille sans procédure Worksheet_Change
(en la mettant dans un module standard)
VB:
Sub Macro1()
Dim Plage As Range
  Set Plage = Application.InputBox("Sélectionnez une plage", "Sélection de cellules", Type:=8)
  MsgBox ("La plage que vous avez sélectionné est : " & Plage.Address)
End Sub
Donc le nœud du problème semble être dans l'interaction entre le code de l'inputbox et la procédure Worksheet_Change
Et pour le moment je sèche sur la résolution de la chose
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87