Listes déroulantes filtrées

salut Curulis,

je ne vois pas les options que tu as instauré, j'ai bien une semaine inscrite en LC1 (surement long congé ?) mais je n'ai aucun choix possible.

est-ce le faite d'être sur un excel 2003 ? parce que j'ai remarquais qu'il y avait certain truc qui je pense ne marche pas, par exemple sur la feuille données le roulement est sans couleur alors qu'avec libre office il est en couleur mais sur libre office les macro ne marche pas ...

j'ai bien vu que dans le code il y avait LC1 LC2 C abs et +

bonne journée

Comment, ça, pas de choix ?
En cliquant sur la ligne des agents dans le planning, tu devrais avoir une liste de validation "C, LC1, LC2, F, +, ABS"...

Oh la vache si ça marche !!!

J'ai relancé et j'avais un 2ème planning ouvert en même temps, je pense que c'est ça qui bloquait.

Oui c'est génial , c'est très pratique.

Du coup le tableau avec les périodes ne sert plus rien.

J'avais une ligne absence en bas de chaque équipe, qui me permet de voir combien sont absent en même temps afin de compléter l'équipe pour être 4 au minimum, la formule aussi a disparu ?

c'est super la méthode et le choix des absences ;)

Le + c'est pour 🏥 la croix de l'hôpital 🤣😂🤣😂

Salut les gars,

tant mieux si ça marche, je continue dans cette direction : à toi à préciser, ajouter, adapter...
Le "+" est effectivement pour les jours de maladie.
Je n'ai pas touché aux formules 'Absences' : elles sont toujours à leur place mais il faudra les adapter aux nouveaux libellés d'absence, évidemment !

Je vais transformer ton tableau-vacances pour tes bilans...

Bon, pas tout de suite : j'ai encore un paquet de plantes à repiquer !


A+

Brice,

tu fais quoi, avec ça, en 'Données' ?

image


A+

Salut brice et curulis,

1-Je recopie les nouveaux codes sur mon fichier et çà bug ;

1

1stAGt est pas défini...

2-Pourrais-tu commenter cette macro dans module1. Ou l'as-tu utilisé, je trouve pas.

Public Function fctCol(ByVal iCol%) As String
fctCol = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
End Function

3-Et ces nouveaux codes dans selectionChange :

Me.lstAGT.Clear
Me.lstAGT.Visible = False
4-Cà apporte quoi ce code ?
If Selection.Count > 1 Then
    If (Selection.Cells(1, 1) = "C" Or Selection.Cells(1, 1) = "LC1" Or Selection.Cells(1, 1) = "LC2" Or _
        Selection.Cells(1, 1) = "F" Or Selection.Cells(1, 1) = "+" Or Selection.Cells(1, 1) = "ABS") Then Selection.Cells = Selection.Cells(1,1)
5-çà c'est juste pour le remplaçant qu'on ne veut pas perdre si on en sélectionne un autre ?                
                    For y = 1 To iNbWk
                'si periode trav equipe si nom titulaire et pas absent ou si periode travail sur ligne titulaire
                    If (Cells(x + 1, iCol) = sPr And Cells(x + (y * 2), 1) <> 0 And (Cells(x + (y * 2), iCol)) <> "ABS") Or _
6-pourquoi tu rajoutes des _ partout si c'est pour aller à la ligne pour des codes courts ?                        
            Cells(x + (y * 2), iCol) = sPr Then _
                            iNb2 = iNb2 + 1: _ 
                Me.lstAGT.AddItem Cells(x + (y * 2), 1)

7-Il n'y a jamais la période de travail "toute seule" sur la ligne du titulaire:

 Cells(x + (y * 2), iCol) = sPr

8-Et ces roulements sur 56 jours ? Bon ok pour irow dans l'onglet des données, mais le irow de l'onglet "données" n'est pas sur les mêmes lignes que l'onglet"planning".

2

9-commentaires svp.

Else
    If iCol > 1 And Cells(iRow, 1) <> 0 And WorksheetFunction.CountIf(Worksheets("Données").Columns("G"), Cells(iRow, 1)) = 1 Then _
        Target.Validation.Add Type:=xlValidateList, Formula1:=",C,LC1,LC2,F,+,ABS"
        If sFormula <> "" Then _
            Columns(iCol).ColumnWidth = 16: _
            Target.Validation.Add Type:=xlValidateList, Formula1:=sFormula
        Me.lstAGT.Top = Target.Top
        Me.lstAGT.Height = iNb2 * 12
        Me.lstAGT.Left = Target.Offset(0, -3).Left
        Me.lstAGT.Visible = True

A+

salut à tout les deux !!!

j'espère que votre week-end se passe bien ;)

Le code s'agrandit et ça deviens de plus en plus dure à comprendre...

pour répondre à ta question Curulis,

tu l' avais mis là pour m'expliquer comme tu avais fais pour faire la matrice du roulement au tout début...

Tu fais des bouture sur quel genre de fleurs ?

Bonne journée.

image

tu l' avais mis là pour m'expliquer comme tu avais fais pour faire la matrice du roulement au tout début...

Ah, non, là, il y a erreur : je n'ai jamais construit ce tableau! Tu dois te tromper de personne !
Mais, je vois bien qu'il s'agit d'une autre représentation de la séquence du roulement... donc inutile ??

Salut Fronck,

Dans l'ordre de ton post
- ce n'est pas 1stAGt mais LstAGT : c'est un contrôle List.
- la fonction fctCol() calcule la lettre d'une colonne en fonction de son n°.
- avant une action clic, j'efface les valeurs de lstAGT et la rend invisible.
- le code suivant "étire" le libellé de l'absence sur le nombre de jours concernés, histoire de ne pas devoir le faire cellule par cellule.
- ici, je note dans lstAGT, la liste des agents qui travaillent déjà ce jour-là.

                    For y = 1 To iNbWk
                        If (Cells(x + 1, iCol) = sPr And Cells(x + (y * 2), 1) <> 0 And (Cells(x + (y * 2), iCol)) = "") Or _
                            Cells(x + (y * 2), iCol) = sPr Then _
                                iNb2 = iNb2 + 1: _
                                Me.lstAGT.AddItem Cells(x + (y * 2), 1)
                    Next

- pourquoi tant de "_" : je déteste END IF donc, quand je peux l'éviter, j'écris l'instruction sur une seule ligne "virtuelle".
- je fais beaucoup de changements de code pour l'instant : je vérifie que la "pause" soit bien inscrite sur la ligne du remplaçant...
- pour l'instant, 7 équipes * 7 jrs = 49 jours de roulement. Brice ayant émis l'idée d'ajouter peut-être une équipe, l'affichage est prêt pour une adaptation du roulement ( 8 éq. * 7 jrs = 56 jours)
- comprends pas...

ce que viens faire irow dans l'onglet des données

- avant d'afficher la liste de validation des différents libellés d'absence, je vérifie que je suis sur la bonne ligne dans le planning.
- si il y a des remplaçants potentiels, j'élargis la colonne pour affichage de la liste de validation puis je place la liste lstAGT des agents déjà au travail ce jour-là à gauche.

Je suppose que tu t'y connais en formules, Fronck!? J'aurai besoin de toi très vite...


A+

Salut Brice,

ça te parle, ça ?

image

Histoire de bilans : autrement, plus fouillé, moins, encore...
Les dates de bilan périodique sont encodées via une sélection des dates désirées sur la ligne 4 du planning (ligne des dates).

Besoin que tu bouges, même si c'est dimanche : il ne me reste que quelques jours de congé avant de passer à autre chose au boulot !!!


A+

Salut Curulis !!!

C'est super tu as tout compris !!!

ça ne compte que les remplacements ?

c'est vraiment bien comme tableau...

je suis vraiment impressionné de la globalité du planning...

Bonsoir à tous,

Merci pour les quelques explications curulis. J'ai modifié mon post précédent avec des n° pour que tu puisses mettre des n° dans les tiennes pour me repérer un peu, en modifiant ou complétant mes questions. J'ai fait les formules pour les listes d'absences pour les équipes, sauf par période, moins simples (Et çà sert à quoi ?).

Pour mieux avancer je propose qu'on travaille sur un fichier commun. D'abord pour garder les explications écrites, et ensuite les modifs que j'ai voulu apporté comme la ligne jaune et les colonnes à droite de la fin du planning que j'ai supprimé.

Cdt

Bonjour à tous,

On vous entend plus , mais si j'ai bien compris, il faut remplir le tableau pour faire des stats.

J'ai fait une macro qui fonctionne mais elle met 30 secondes par colonne .

Pourtant le code est pas énorme :

Sub remplir()
Dim mdate$, mdate2$, dern%, i%, j%, dercol%, dercol2%, ws As Worksheet, k%, l%, activ$

Set ws = Sheets("Planning été 2022")

'recopie depuis le 1er janvier
mdate = InputBox("jour et mois de remplissage du planning ?" & Chr(10) & " (4 chiffres sans '/', ou rien pour date du jour)")
mdate2 = Mid(mdate, 1, 2) & "/" & Mid(mdate, 3, 2) & "/" & Year(ws.Cells(4, 2))
    dern = ws.Range("A665").End(xlUp).Row 'derniere ligne
    dercol = ws.Range("B4").End(xlToRight).Column 'derniere colonne

    For k = 2 To dercol
        If mdate2 = Cells(4, k) Then dercol2 = k 'colonne date
    Next

For j = 2 To dercol2
    For i = 6 To dern Step 2
        'recherche de son équipe, ligne planning (+1)
        If Mid(Cells(i, 1), 1, 6) = "Equipe" Then
        activ = Cells(i + 1, j)
        'on remplit que s'il n'y a rien
        ElseIf Cells(i, j) = "" And Mid(Cells(i, 1), 1, 6) <> "Equipe" Or Cells(i, 1) <> "Absence" Then
        Cells(i, j) = activ
        End If
    Next i
Next j

End Sub

Cdt

salut les gars !!!

ça deviens une vrai machine de guerre ce planning !!!

bonne idée fronck de tous mettre sur le même fichier .

alors j'ai essayé le bouton remplissage mais chez moi ça ne marche pas , ça lance la fenêtre de debogage au bout d'une minute ...

j'ai remarqué que le tableau avec les périodes fonctionne toujours, cool

du coup les formules ne disparaissent plus !?

j'espère que votre week-end a été bon 😉

bonne journée

Bonjour ponpon,

J'ai mis une date de début de remplissage mais çà met toujours 20 secondes par colonne, c'est long mais je crois que c'est normal.

Et non les formules ne disparaissent pas, une cellule peut être détectée vide même s'il y a une formule dedans.

Et çà bug ou pour toi ?

A+

Salut les gars,

sans nouvelles de vous, hier, j'étais parti sur le sujet d'Eliot : petite récréation !

Macro de calcul des stats annuelles qui tient compte des remplacements et tout et tout.
Avec l'utilisation des tableaux, scanner l'année des 7 équipes ne prend que 0.2 sec

Public Sub Bilan()
'
Dim tTab, tData, iRow%, iNb%, iNb1%, iNb2%, iNbDay%, iNbAbs%, iNbEnd%, iNbEq%, iNbWk%
'
iNb1 = Columns(1).Find(what:="Equipe 1", lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row                'ligne Equipe 1
iNb2 = Columns(1).Find(what:="Equipe 2", lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row                'ligne Equipe 2
iNbAbs = Columns(1).Find(what:="Absence", lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row               'ligne Absence (Equipe 1)
iNbEnd = Columns(1).Find(what:="Equipe", lookat:=xlPart, LookIn:=xlValues, searchdirection:=xlPrevious).Row             'ligne dernière équipe
iNbEq = CInt(Split(Range("A" & iNbEnd).Value, " ")(1))                                                                  'nbre d'équipes
iNbWk = (iNbAbs - (iNb1 + 2)) / 2               'nbre de travailleurs par équipe
iNb = iNb2 - iNb1                               'nbre de lignes (libres comprises) occupées par une équipe
'
iRow = 1
iNbDay = DateDiff("d", DateValue("1/1/" & CStr([E2])), DateValue("1/1/" & CStr([E2] + 1)))
sCol = fctCol(1 + iNbDay)
tTab = Range("A" & iNb1 & ":" & sCol & (iNbEnd + 1) + (iNbWk * 2)).Value
tData = [BILAN_ANNUEL].Cells.Value
'
For x = 1 To UBound(tTab, 1) Step iNb
    For y = x + 2 To (x + 1) + (iNbWk * 2) Step 2
        iRow = iRow + 1             'ligne d'affichage dans tData
        If tTab(y, 1) <> 0 Then
            For Z = 1 To UBound(tData, 2)
                tData(iRow, Z) = 0
                For w = 2 To UBound(tTab, 2)
                    If Z < 6 And tTab(x + 1, w) = tData(1, Z) And tTab(y, w) = "" Then tData(iRow, Z) = CInt(tData(iRow, Z)) + 1
                    If Z > 5 And tTab(y, w) = tData(1, Z) Then tData(iRow, Z) = CInt(tData(iRow, Z)) + 1
                Next
            Next
        End If
    Next
Next
[BILAN_ANNUEL].Cells = tData
'
End Sub

Je vais maintenant attaquer la macro du bilan spécifique des remplacements sur une période précise.


A+

Salut Curulis,

bravo, mais sans ton fichier, je peux pas comprendre ce que tu as nommé E2, ou BILAN ANNUEL

Cdt

Salut Fronck,

je me doute mais je dois encore m'assurer que l'appel aux 2 macros soit implémenté correctement partout où on a besoin d'elles.
J'arrive, patience...


A+

Salut l'équipe,

le fichier avec les deux macros-bilan, à tester, vérifier, peaufiner.
Brice, comment vois-tu l'exploitation des données Bilan-Remplacements ?


A+

salut Curulis!

franchement le fichier est parfait presque trop complet lol

je vais commencer à faire les remplacements d'été se qui me permettra de voir si des choses ne vont pas.

pour le tableau des bilans c'est surtout pour voir si je suis équitable dans la répartition des remplacements...

je pourrais y faire rentrer d'autre critères mais je pense que ça serait abuser de ton temps ;)

encore mille merci

je me lance dans les remplacements le plus tot possible pour te tenir au courant d’éventuelle incohérence

A+

brice

Rechercher des sujets similaires à "listes deroulantes filtrees"