Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Liste déroulante planning

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

  • Copie 1 de PLANNING SEPTEMBRE SEMAINE 1 OK-1.xlsx
    21.2 KB · Affichages: 66

youky(BJ)

XLDnaute Barbatruc
Bienvenu pour le 1er poste
De retour ton fichier avec macro (à activer à l'ouverture sinon rien)
Pour voir la macro faire un click bouton droit de souris sur Semaine en bas et visualiser le code
Bruno
 

Pièces jointes

  • Copie 1 de PLANNING SEPTEMBRE SEMAINE 1 OK-1 (1).xlsm
    29.9 KB · Affichages: 42

Robert

XLDnaute Barbatruc
Repose en paix
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
 

youky(BJ)

XLDnaute Barbatruc
Bonjour Robert, Alex et tous,
J'ai apporté des rectifications en macro alors je remets le fichier.
Si besoin de faire 1 trimestre par onglet c'est possible mais plus de code.
Bruno
 

Pièces jointes

  • Copie 2 de PLANNING SEPTEMBRE SEMAINE 1.xlsm
    29.3 KB · Affichages: 20

Alex1384

XLDnaute Nouveau
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
 

Alex1384

XLDnaute Nouveau
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:

youky(BJ)

XLDnaute Barbatruc
Bon voici rectifié selon tes vœux.
Bruno

Edit:
Sur le dernier fichier la personne ne peut avoir qu'une activité par journée si c'est par demi journée utiliser le fichier message #5
 

Pièces jointes

  • Copie 2 de PLANNING SEPTEMBRE SEMAINE 1.xlsm
    29.8 KB · Affichages: 30
Dernière édition:

Alex1384

XLDnaute Nouveau
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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…