XL 2010 Liste déroulante planning

  • Initiateur de la discussion Initiateur de la discussion Alex1384
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Alex1384

XLDnaute Nouveau
Bonjour et avant tout, merci de vos aides et retours, en sachant que je ne suis qu'à des années lumières de la maitrise totale d'Excel.
J'utilise une version 2010 d'Excel, et je suis en train de créer un planning que j'aimerai alimenter par des listes déroulantes.
Ce planning est dédié à la gestion de personnel, par demi journée
Il y a 56 personnes à gérer, et chaque personne ne peut avoir qu'une seule activité par demi journée.
Quelle est la solution pour que chaque liste déroulante ne propose que les personnes non encore inscrites sur la dite demi journée?
Encore merci
Cordialement
 

Pièces jointes

Bonjour Alex, bonjour le forum,

Essaie avec cette macro événementielle à placer dans le composant Feuil2 (Semaine) :

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim L As Worksheet 'déclare la variable L (onglet Liste)
Dim S As Worksheet 'déclare la variable S (onglet Semaine)
Dim TPL(1 To 10) As Range 'déclare la variable TPL (Tableau des PLages)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim OF As Integer 'déclare la variable OF (OFfset)
Dim TL As Variant 'déclare la variable TL (Tableau de la Liste)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim Lst As String 'déclare la variable Lst (Liste)

On Error GoTo fin 'gestion des erreurs (en cas d'erreur va à l'étiquette "suite")
Set L = Worksheets("Liste") 'définit l'onglet L
TL = L.Range("A2:A" & L.Cells(Application.Rows.Count, "A").End(xlUp).Row) 'définit le tableau de la liste TL
Set S = Worksheets("Semaine") 'définit l'onglet S

'*********************************************************************************************************************
'*définition des plages des demi-journée (comme tu as eu la malheureuse idée de ne pas avoir le même nombre de lignes)
'*********************************************************************************************************************
LI = 4 'initialise la ligne LI
For I = 1 To 10 'boucle sur les 10 demi-journées
    Select Case I 'agit en fonction de I
        Case 1, 2, 4, 6, 7, 9 'pour ces cas là il y a 8 lignes
            OF = 8 'définit l'offset OF
        Case 3, 5, 8 'pour ces cas là il y a 9 lignes
            OF = 9 'définit l'offset OF
        Case 10 'pour ces cas là il y a 10 lignes
            OF = 10 'définit l'offset OF
    End Select 'fin de l'action en fonction de I
    Set TPL(I) = S.Cells(LI, "C").Resize(OF, 7) 'définit la plage TPL(I)
    LI = LI + OF + 2 'redéfinit la ligne LI
Next I 'prochaine demi-journée de la boucle

'**************************************************************
'définition de la plage correspondant à la cellule sélectionnée
'**************************************************************
For I = 1 To 10
    If Not Application.Intersect(Target, TPL(I)) Is Nothing Then
        TV = TPL(I)
        Exit For
    End If
Next I

'************************************
'définition de la liste de validation
'************************************
For I = 1 To UBound(TL, 1)
    For J = 1 To UBound(TV, 1)
        For K = 1 To UBound(TV, 2)
            If TL(I, 1) = TV(J, K) Then GoTo suite
        Next K
    Next J
    Lst = IIf(Lst = "", TL(I, 1), Lst & "," & TL(I, 1))
suite:
Next I

'***********************************************************
'activation de la liste de validation dans la cellule active
'***********************************************************
With Target.Validation
    .Delete
    .Add xlValidateList, Formula1:=Lst
End With
fin:
End Sub
 
Un grand merci, Bruno...
Il est souvent très difficile pour des organismes à vocation sociales pour personnes handicapées d'arriver à développer ce genre de programmes (nous ne sommes pas au fait de tous ces codes), et pourtant, celà nous aide grandement dans notre organisation.
Vraiment, merci.
Cordialement
 
Désolé de vous ennuyer, c est certainement de ma faute, j'ai dû mal m'exprimer :
il y a 56 residents à gerer.
chaque resident ne peut et ne doit avoir qu une seule activite par demi journee, et peut donc et doit choisir une autre activité sur l'apres midi.
En resumé, si chaque resident ne peut apparaitre qu une seule fois sur le lundi matin, par exemple, il faut pouvoir le retrouver le lundi apres midi.
Les listes deroulantes sont une idée que j'ai eu, le but étant que personne ne soit oublié, ou qu aucun résident ne puisse se retrouver sur deux activités différentes sur la même demi journée.
Mais si vous avez d'autres idées, elles sont bien évidemment bien venues.
Encore merci à tous pour vos aides à tous niveaux.
Cordialement
 
Dernière édition:
Bonsoir Robert,

Effectivement, le premier code fonctionne bien, et répond à nos espérances...
Je suis vraiment désolé pour le dérangement supplémentaire, j ai certainement été moins attentif que je n'aurai dû pour dis mille raisons qui ne concernent que notre cellule et ne m excusent en rien.
Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
217
Réponses
40
Affichages
1 K
Réponses
1
Affichages
459
  • Résolu(e)
Microsoft 365 planning
Réponses
17
Affichages
1 K
Réponses
8
Affichages
669
Retour