Menu déroulant

bonjour,

le fichier ci joint gère le planning de collaborateurs et permet l'affectation de ceux ci en fonction de leurs compétences...etc

il gère 3 services (onglets jour,mixte,nuit),dans chaque onglet une liste de postes (de 1 à 49*);la sélection de la cellule sous le poste fait apparaître un menu déroulant avec une liste de collaborateurs compétents à ce poste .

ma demande est la suivante : j'aimerais qu'en face de chaque nom de collaborateur du menu déroulant ,soit indiqué le nombre de fois sur les 30 derniers jours,ou le collaborateur a occupé le poste,afin de rendre l'affectation encore plus pertinente.

merci a tous

*pour des raisons de confidentialité le nom des postes est simplifié

39evolis.xlsm (950.01 Ko)

Bonjour

ma demande est la suivante : j'aimerais qu'en face de chaque nom de collaborateur du menu déroulant ,soit indiqué le nombre de fois sur les 30 derniers jours ou le collaborateur a occupé le poste afin de rendre l'affectation encore plus pertinente.

Pas trop compris ce que vous cherchez à faire lorsque vous dites "En face de chaque nom".

Dans la feuille "affectation JOUR", je me positionne en B13 j'ai un plantage et comme vous utilisez l'instruction "application.enableevents", on est obligé de fermer le fichier et relancer excel pour pouvoir avoir la liste déroulante de choix.

Une fois excel relancé, je me positionne en AJ13, j'ai la liste déroulante pour choisir le nom.

Que voulez vous avoir ensuite ?

Donnez moi un exemple que je reproduise selon la manière dont vous fonctionnez

Cordialement

Bonjour dan et merci de l’intérêt Que Où vous portez à ma demande,je dois apporter quelques explications :

En fait dans le menu déroulant à côté de chaque nom(plutôt après car avant il y a déjà le symbole "#"qui indique que le collaborateur est à son premier jour de travail ) je souhaiterais pouvoir faire apparaître le nombre de fois où le collaborateur a occupé le poste sélectionné sur les 30 derniers jours.

Là le tableau est vide mais normalement il est remplit à J+7

Le tableau est assez complexe, dans l’onglet "Compétences" une croix face à une compétence donne la compétence pour occuper une fois le poste entre2 repos(repos décalés),deux croix donne la compétence pour occuper le poste deux fois etc...

L’onglet "calendrier" gère les 3 cycles de travail de 42j ainsi que les repos.

Vous pouvez remplir le tableau en affectant Au hasard ça n’a pas d’importance pour un exemple Dan

Re

L'exemple était pour que je puisse reproduire quelque chose pour comprendre comment vous fonctionnez

Lorsque je clique sur AN9 en feuille "affectation jour" j'ai bien le signe # à coté de certaines personnes et pas d'autres. Je choisis Bana.

Dans la feuille Compétence, Bana est en ligne 28

Où est-ce que je trouve le poste sélectionné sur les 30 derniers jours dont vous parlez dans votre post

Bonjour Dan

Il n’y a actuellement rien qui fait le récapitulatif des affectations , si ce n’est l’onglet Affectation lui même.

Re

Votre fichier en retour pour test

Faites un test en AM 17. J'ai laissé quelques données sur le nom "Virginie" dans les cellules précédentes

J'ai placé un code dans le module 4 qui renvoie une information dans la liste déroulante

D'autre part j'ai aussi remplacé les lignes où vous aviez mis ME.HIDE par Unload ME

Le Hide signifie que l'USF est cachée à l'arrière plan et donc toujours opérationnelle même si vous ne la voyez pas.

Comme dit précédemment, reste les application.events qu'il serait bon de remplacer car si bug ou annulation en cours de process, il vous faudra fermer excel pour que le code fonctionne à nouveau.

28evolis.xlsm (891.84 Ko)

Cordialement

Merci Dan,Je teste et vous fait un retour, bonne soirée

Bonjour

Afin d'éviter un bug lorsque vous utilisez votre liste déroulante en dessous de la colonne 30, remplacez le code Poste qui se trouve dans le module 4 par celui-ci dessous.

Sub poste()
Dim plage As Range
Dim col As Integer
dcol = ActiveCell.Column - 1
If dcol < 30 Then pcol = 1 Else pcol = ActiveCell.Column - 30
Set plage = Range(Cells(ActiveCell.Row, dcol), Cells(ActiveCell.Row, pcol))
On Error Resume Next
aa = Application.WorksheetFunction.CountIf(plage, qui)
End Sub

Cordialement

Bonjour Dan

Effectivement il y a un bug mais qui n’existe pas dans la version réel...

Le nombre de fois(indice de fréquences) que le collaborateur a occupé le poste s’affiche bien , ça fonctionne très bien,par contre comme pour le symbole "# "il faudrait que l’indice n’apparaisse pas sur le poste , mais juste dans le menu déroulant

Une autre petite chose,si l’indice pouvait être devant le nom ce serait mieux car dans le réel les collaborateurs ont un matricule à la suite du nom , ça éviterait la confusion...

Merci Dan

Re

Dans l'USF "AideAffectation", remplacez le code par celui ci-dessous

Private Sub equipier_Click()
Dim sFlag As String, sAMPMN As String
With Me.equipier
    .Text = Mid(.Text, 1, Len(.Text) - 1)
    Selection = Replace(.Value, "#", "")
    sFlag = Trim(Selection)
    sAMPMN = ActiveSheet.Name
    .Clear
End With
Unload Me
Call CalculParis(sAMPMN, sFlag, ligne, colonne)
End Sub

Une autre petite chose,si l’indice pouvait être devant le nom

Vous parlez du chiffre ?

Cordialement

Merci Oui je parle du chiffre

Bonjour,

Essayez en remplaçant ce code dans l'USF "Aideaffectation"

Private Sub equipier_Click()
Dim sFlag As String, sAMPMN As String
Dim i as byte
With Me.equipier
    For i = 1 To Len(.Text)
        If Mid(.Text, 1, 1) = "#" Or IsNumeric(Mid(.Text, 1, 1)) Then Me.equipier = Replace(Me.equipier, Mid(.Text, 1, 1), "")
    Next
    Selection = Trim(Me.equipier)
    sFlag = Trim(Selection)
    sAMPMN = ActiveSheet.Name
    .Clear
End With
Unload Me
Call CalculParis(sAMPMN, sFlag, ligne, colonne)
End Sub

Cordialement

Bonjour Dan

Lorsque Je retranscrit ce que vous m’avez dit est ce que vous avez modifié dans le fichier que j’utilise réellement je ne retrouve pas l’indice de fréquence et lorsque J’efface une affectation j’ai le message d’erre ci-dessous

b3b8a7f5 0825 4af4 9957 0368f69c01bb

Re,

Je pense comprendre le souci

Dans la macro Private Sub UserForm_Activate(), remplacez ces lignes

Else
Me.equipier.AddItem (qui)

par celle-ci

Else
If aa = 0 Then Me.equipier.AddItem (qui) Else Me.equipier.AddItem (aa & " " & qui)

Une remarque, j'aurais plutôt utiliser le nom de la macro comme ceci --> Private Sub UserForm_Initialize()

Cordialement

Bonjour Dan

Après essais sur mon pc au bureau,je confirme ce que je disais au début , je n’ai aucun soucis de bug ,

Par contre j’ai toujours l’indice de fréquence après le nom , l’indice s’affiche sur le tableau alors qu’il ne faut pas Car sinon l’indice s’ intègre dans le nom du collaborateur ce qui change son identité et fausse le tableau , de plus l’indice ne s’affiche que le premier jour de la semaine de travail suivante.

Lorsque je recopie le module 4 et le code de l’UF "aide affectation " dans mon fichier réel , rien ne se passe , aucun indexe de fréquence n’apparaît

Re

Le mieux est que je vous donne le fichier sur lequel j'ai effectué les modifications.

14evolis-190329-1.xlsm (890.61 Ko)

Cliquez sur la cellule en dessous de celle où le curseur se trouve à l'ouverture et dites moi

Si vous rencontrez le souci expliquez moi ce que vous faites afin que je reproduise de mon coté

Crdlt

Ok merci Dan, Je vous dis ça demain de retour au bureau car chez moi je suis sur Mac et le tableau ne fonctionne pas correctement sur Mac.

Bonjour Dan, tout à l’air Ok , pas de bug,l’indice est avant le nom, il disparaît lors de la sélection...

Par contre ,lorsque je copie le module 4 et le code de l’UF "aide affectation " dans le fichier que j’utilise vraiment ,ça ne fonctionne pas, pas de bug non plus ...

Y a t il autre chose à copier dans mon fichier réel ?

Bonjour Dan, je me suis repens chez sur le problème ce matin, et c’est bon tout fonctionne

Un grand merci à vous

Rechercher des sujets similaires à "menu deroulant"