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
 

Brig

XLDnaute Nouveau
Bonjour Staple 1600

Merci de l'investissement!!
Serait il possible que la procédure Worksheet_change fait référence à une cellule alors que l'inputbox fait référence à une plage de cellule? la procédure worksheet renvoi à un formulaire si on tape abs, mais la plage de cellule s'incrémente sans avoir mis abs, est-ce possible que cela génère l'erreur?
 

Brig

XLDnaute Nouveau
Re bonsoir,

Je crois avoir réussi à résoudre le soucis, en fait je suis repartie du premier code de Worksheet de Staple 1600, encore merci
Il reste à trouver comment faire pour que le formulaire ne s'ouvre pas n'importe, parfois en dehors de l'écran!!

Bonne soirée
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous


Il reste à trouver comment faire pour que le formulaire ne s'ouvre pas n'importe, parfois en dehors de l'écran!!
A ce propos, je t'avais donné le conseil suivant dans le message #8 que tu sembles avoir zappé non ?
Re
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
J'avais également indiqué ceci dans le commentaire du code VBA.
Code:
Case 3, 4 ' à compléter avec les numéros de colonnes adéquats
 

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Après une nuit de sommeil, un café et un jus d'orange j'ai opté pour cette nouvelle façon
On oublie de le module de classe (donc il faut le supprimer du projet VBA)
Dans le code de la feuille
(on supprime la procédure Worksheet_Change et on colle celle-ci)
VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)
If T.Column Mod 5 = 3 Or T.Column Mod 5 = 4 Then
Motifs.Show 0
End If
End Sub
Dans l'userform, on rajoute un CommandButton (avec ce code VBA pour celui-ci)
(sans oublier de modifier UserForm_Initialize
VB:
Private Sub UserForm_Initialize()
With Me
  .StartUpPosition = 0
  .Top = ActiveCell.Top
  .Left = ActiveCell.Offset(, 2).Left
End With
End Sub
Private Sub CommandButton1_Click()
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeOf ctrl Is msforms.OptionButton Then
If ctrl.Value = True Then
Selection = ctrl.Caption
End If
End If
Next ctrl
Me.Hide
End Sub
Ensuite, on sélectionne la plage de date, l'userform s'affiche on coche le bouton d'option idoine et enfin on valide en cliquant sur le CommandButton.
 

Brig

XLDnaute Nouveau
Bonjour à tous et bonjour Staple 1600

Cette dernière méthode fonctionne très bien mais présente l'inconvénient d'ouvrir le formulaire d'absence par défaut dès que l'on sélectionne une cellule. J'ai résolu le problème différemment (en restant sur l'idée de l'inputbox). Je joins la dernière version d'essai, où l'on peut voir que le salarié peut entrer les valeurs de temps de travail par défaut, mais si il tape "a" dans une cellule, alors le formulaire s'ouvre.

PS: Est-il possible de me dire comment intégrer le code dans mes messages, comme le fait Staple 1600?
 

Pièces jointes

  • Gestion heures pers adm essai2.xlsm
    53.2 KB · Affichages: 37

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Pour intégrer le code , il suffit d'utiliser ces balises
[CODE=vb]
Ici le code VBA
[/CODE]

EDITION
:Ton dernier fichier plante toujours chez moi après sélection de la plage dans l'InputBox
 
Dernière édition:

Si...

XLDnaute Barbatruc
Salut

Staple :D, un Module de Classe pour une débutante* peut être rebutant, non :confused:?

Un simple contrôle Listbox, très simple à utiliser, peut faire l’affaire.

Dans l’exemple joint, je ne me suis pas préoccupé des calculs mais simplement traité le cas d’une plage sélectionnée dans les tableaux définis (UsF pour le nombre ou le type d’absence).

* on est tous passé par là Brig ;).
 

Pièces jointes

  • Gestion heures UsF.xlsm
    59 KB · Affichages: 34

Brig

XLDnaute Nouveau
Bonjour à tous, bonjour SI

Merci pour cette contribution, j'aime beaucoup l'idée de la liste dynamique dans l'userform. Je vais voir comment l'intégrer dans mon fichier. J'ai encore beaucoup à faire pour rendre ce fichier à l'image de ce que j'imagine et simple d'utilisation pour les salariés. Je débute vraiment dans le VBA et ce langage est un peu comme une langue étrangère qu'il s'agit de décoder pas à pas. J'en bave pour connaitre les arguments et aussi parfois la logique à suivre dans les codes. Mais vos contributions m'y aident. Alors je ne désespère pas...
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

Si...

Tu sais ma propension à inciter les demandeurs à mettre les mains dans le cambouis ;)
Pour ma part, je ne trouve rien de rebutant à être curieux, à savoir creuser les questions (avec l'aide du net, c'est un jeu d'enfant, non?)
Je vois que Brig se dépatouille très bien (et ce sans que je joigne le moindre fichier)
J'ai donc classé dans mon petit carnet à spirales Brig dans la rubrique : xldnaute à ne point ignorer ;)
NB: Dans ma dernière proposition, j'ai zappé le module de classe ;)

Maintenant je vais aller voir ton ouvrage
EDITION 1: Ne disposant actuellement que d'un PC sous XL2003, ton fichier bug à ce niveau
VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
  Dim i As Byte
  For i = 1 To 12
  If Not Intersect(R, Range("ç" & i)) Is Nothing Then Motifs.Show: Exit For
  Next
End Sub
Je suppose que le ç vient de la conversion en *.xls, non ?
EDITION 2: Si j'essaie d'afficher l'userform à partir de vbe, j'ai une erreur 424, Objet requis
problème résolu en convertissant ta liste en plage et en la nommant Ta
Reste le problème de la procédure SelectionChange
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re
Je suppose que le ç vient de la conversion en *.xls, non ?
Non, tu as dû oublier, Staple, que j’évite les noms à rallonge. Pour les dénominations de Tableaux, T1, T2 … ne sont pas prises en compte car elles correspondent déjà à des cellules. Je remplace donc le T par un ç voire un à ….
Si j'essaie d'afficher l'userform à partir de vbe, j'ai une erreur 424, Objet requis
problème résolu en convertissant ta liste en plage et en la nommant Ta
Avec les versions précédentes, si ma mémoire est bonne, Tableau correspondait à Table.
Tu as mis les mains dans le cambouis ;) pour trouver une parade (nommer la plage sans les titres).
J’aurais pu le préciser pour ceux qui n’ont pas les versions récentes ou n'utilisent pas cet outil mais je partage ton point de vue sur Brig.
Je n’hésiterai pas à lui donner des explications sur ma proposition ou autre si besoin était.

Donc, Brig :D, tu peux compter déjà sur nous 2* pour persévérer dans la découverte du VBA.

*Dans des styles différents (plus classique celui de Staple que le mien) mais de nombreux autres intervenants, j’en suis sûr, n’hésiteront pas à se joindre à nous.

Nota : "rebutant" c'était pour le (mauvais) jeu de moto_O.
 

Membres actuellement en ligne

Statistiques des forums

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