VBA: macro-planning du personnel par année

Fermé
TeddyF - 3 janv. 2017 à 11:34
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 15 janv. 2017 à 05:50
Bonjour la communauté,

J'ai un petit problème...
J'ai un macro-planning de la l'activité de mon personnel par personne qui se fait automatiquement. (Cette macro avait déjà été gentiment conçu par une personne de la communauté.)
Cependant avec la nouvelle année je rencontre un petit soucis...
Le planning n'est disponible que sur une année, donc les dates se chevauchent.

Je m'explique.
Le planning marche par semaine, si membre est occupé sur une semaine la case correspondante se colore en jaune, si il est occupé sur 2 choses en même temps la case de la semaine s'allume en orange.
A noter que ça me met automatiquement un commentaire pour savoir quel mission les occupe quand je passe ma souris sur une case.

Bref, avec le passage en 2017, si un membre était occupé la 1ere semaine de janvier 2016, il qu'il l'est également la 1ere semaine de janvier 2017, la case s'affiche en orange, sauf que maintenant le planning de 2016 m'importe peu.

Serait-il possible d’insérer dans la macro une partie ou je puisse choisir l'année que je souhaite consulter?

Je ne peux vous envoyer le document via cjoint car mon entreprise le bloque...

La macro posant problème étant celle-ci (mais je ne la comprend pas...):

Sub PlanningAuditeur()
Application.ScreenUpdating = False
Set F1 = Sheets("macro-planning")
Set F2 = Sheets("données")
F1.Select
DerColF1 = F1.[B2].End(xlToRight).Column
DerLigF1 = F1.[A10000].End(xlUp).Row
DerColF2 = F2.[B2].End(xlToRight).Column
DerLigF2 = F2.[A4].End(xlDown).Row
Range(Cells(4, 2), Cells(DerLigF1, DerColF1)).Clear
ReDim Auditeur(DerColF2 - 1 / 2) As String
ReDim Deb(DerLigF2, DerColF2) As String
ReDim Fin(DerLigF2, DerColF2) As String
ReDim NbSem(DerLigF2, DerColF2) As String
ReDim Audit(DerLigF2, DerColF2) As String
For c = 2 To DerColF2 Step 2
Auditeur(c / 2) = F2.Cells(1, c)
For l = 4 To DerLigF2
If F2.Cells(l, c) <> 0 Then
Deb(l, c) = F2.Cells(l, c)
Fin(l, c) = F2.Cells(l, c + 1)
NbSem(l, c) = Fin(l, c) - Deb(l, c) + 1
Audit(l, c) = F2.Cells(l, 1)
Set a = F1.Columns("A").Find(Auditeur(c / 2), LookIn:=xlValues)
a.Select
For i = CInt(Deb(l, c)) To CInt(Fin(l, c))
If F1.Cells(ActiveCell.Row, i + 1) = "" Then
F1.Cells(ActiveCell.Row, i + 1) = Audit(l, c)
F1.Cells(ActiveCell.Row, i + 1).Interior.ColorIndex = 6
F1.Cells(ActiveCell.Row, i + 1).AddComment
F1.Cells(ActiveCell.Row, i + 1).Comment.Visible = False
F1.Cells(ActiveCell.Row, i + 1).Comment.Text Text:=Audit(l, c)
Else: F1.Cells(ActiveCell.Row, i + 1).Interior.ColorIndex = 3
F1.Cells(ActiveCell.Row, i + 1) = F1.Cells(ActiveCell.Row, i + 1) & Chr(10) & Audit(l, c)
F1.Cells(ActiveCell.Row, i + 1).Comment.Text Text:=F1.Cells(ActiveCell.Row, i + 1).Comment.Text & Chr(10) & Audit(l, c)
End If
F1.Cells(ActiveCell.Row, i + 1).Comment.Shape.Height = 312#
F1.Cells(ActiveCell.Row, i + 1).Comment.Shape.Width = 425.25
F1.Cells(ActiveCell.Row, i + 1).Comment.Shape.TextFrame.Characters.Font.Size = 14
F1.Cells(ActiveCell.Row, i + 1).Comment.Shape.OLEFormat.Object.Font.FontStyle = "Bold"
Next i
End If
Next l
Next c
Range(Cells(1, 1), Cells(DerLigF1 + 1, DerColF1 + 1)).Borders.LineStyle = xlContinuous
Range(Cells(4, 2), Cells(DerLigF1, DerColF1)).ClearContents
End Sub



EN VOUS REMERCIANT !!!!

Bonne année à tous !!!!

4 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
7 janv. 2017 à 09:18
Bonjour
Dans la feuille "Macro-planning" en cellule A1, sélectionnez l'année parmi la liste proposée.
Lancez la macro "Importer les périodes"
j'ai renommé la feuille "données" en "données 2016", j'ai créé "données 2017". Pour les années suivantes il suffira de recopier l'année précédente dans une nouvelle et de la renommer "données 2019" , etc ..

https://www.cjoint.com/c/GAhilpWHibw
Cdlt
0
Bonjour Frenchie !!!!

Merci pour ta réponse !!!

Le problème étant que la feuille donnée comprend uniquement des infos tel que le nom de personnes mais ne contient pas les données relatives au calcul.

Je me rend compte que ca devient compliqué à expliqué quand on ne peut avoir accès au fichier.
De plus je ne peux pas avoir accès a cjoint sur mon poste pour voir tes modifs :/

Mais je pense que je vais tanté de faire une macro qui me permet de sélectionner une année souhaité et d'allé me faire les mêmes actions mais en ne prennant en compte que les lignes pour lesquelles l'année est celle renseigné.

Le problème étant toujours que je ne comprend pas cette macro.
Donc difficile pour exploiter...
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
9 janv. 2017 à 09:47
Bonjour
Puisque l'accès à cjoint vous est interdit, je vais tacher de l'expliquer;
-Dans la feuille "macro-planning", en cellule A1, créez une liste des années à l'aide d'une "validation de données" de 2016 à 2030 par exemple.
Les feuilles "données" devront s'appeler "données 2016", "données 2017" etc..
Recopier le code ci-dessous à la place du code existant.
Sub PlanningAuditeur()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    On Error GoTo Sortie
    Set F1 = Sheets("macro-planning")
    FeuilDonnees = "Données " & F1.[A1]
    Set F2 = Sheets(FeuilDonnees)
    F1.Select
    DerColF1 = F1.[B2].End(xlToRight).Column
    DerLigF1 = F1.[A10000].End(xlUp).Row
    DerColF2 = F2.[B2].End(xlToRight).Column
    DerLigF2 = F2.[A4].End(xlDown).Row
    Range(Cells(4, 2), Cells(DerLigF1, DerColF1)).Clear
    ReDim Auditeur(DerColF2 - 1 / 2) As String
    ReDim Deb(DerLigF2, DerColF2) As String
    ReDim Fin(DerLigF2, DerColF2) As String
    ReDim Audit(DerLigF2, DerColF2) As String
    For c = 2 To DerColF2 Step 2
        Auditeur(c / 2) = F2.Cells(1, c)
        For l = 4 To DerLigF2
            If F2.Cells(l, c) <> 0 Then
                Deb(l, c) = F2.Cells(l, c)
                Fin(l, c) = F2.Cells(l, c + 1)
                Audit(l, c) = F2.Cells(l, 1)
                Set a = F1.Columns("A").Find(Auditeur(c / 2), LookIn:=xlValues)
                a.Select
                For i = CInt(Deb(l, c)) To CInt(Fin(l, c))
                    If F1.Cells(ActiveCell.Row, i + 1) = "" Then
                        F1.Cells(ActiveCell.Row, i + 1) = Audit(l, c)
                        F1.Cells(ActiveCell.Row, i + 1).Interior.ColorIndex = 6
                        F1.Cells(ActiveCell.Row, i + 1).AddComment
                        F1.Cells(ActiveCell.Row, i + 1).Comment.Visible = False
                        F1.Cells(ActiveCell.Row, i + 1).Comment.Text Text:=Audit(l, c)
                    Else: F1.Cells(ActiveCell.Row, i + 1).Interior.ColorIndex = 3
                        F1.Cells(ActiveCell.Row, i + 1) = F1.Cells(ActiveCell.Row, i + 1) & Chr(10) & Audit(l, c)
                        F1.Cells(ActiveCell.Row, i + 1).Comment.Text Text:=F1.Cells(ActiveCell.Row, i + 1).Comment.Text & Chr(10) & Audit(l, c)
                    End If
                    With F1.Cells(ActiveCell.Row, i + 1).Comment.Shape
                        .Height = 312#
                        .Width = 425.25
                        .TextFrame.Characters.Font.Size = 14
                        .OLEFormat.Object.Font.FontStyle = "Bold"
                    End With
                Next i
            End If
        Next l
    Next c
    Range(Cells(1, 1), Cells(DerLigF1 + 1, DerColF1 + 1)).Borders.LineStyle = xlContinuous
    Range(Cells(4, 2), Cells(DerLigF1, DerColF1)).ClearContents
    Application.Calculation = xlCalculationAutomatic
    F1 = Nothing
    F2 = Nothing
    Exit Sub
    
Sortie:
End Sub

Vous n'avez plus qu'à choisir l'année en A1 de la feuille "macro-planning", et cliquer sur le bouton "Importer les données".
Cdlt
0
Merci pour ton explication,

Mais je ne peut faire des sheets de données séparées, toutes mes données étant concaténées dans une même feuille.
Je dispose en effet d'une macro qui vient m'alimenter un tableau recap de tous mes audits.
Il faudrait sinon que je change toute ma macro pour me faire un tableau recap par année mais ce n'est pas le but...

Mais d'ailleurs je ne comprend même pas ma macro car normalement elle est censé allé chercher les infos dans une sheet appelé ""planning auditeur" or elle ne figure nul part dans ma macro...
C'est à ni rien comprendre
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
15 janv. 2017 à 05:50
Bonjour
Voici avec les années sur la même feuille
https://www.cjoint.com/c/GApeW3t3Jow
A tester
Cdlt
0