Bonjour,

J'aurais besoin de votre aide sur un point de VBA. Je désire pouvoir filtrer plusieurs TCD en VBA : un par mois, un par trimestre et un par an.

Je dispose de cellules comportant la date en input, et affichant :
1 - le premier et dernier jour du mois
2 - le premier et dernier jour du trimestre
3 - le premier et dernier jour de l'année

Les cas de figures seraient :
1 - si la date sélectionnée est au xx/02/2016, je voudrais filtrer le TCD "Mois" pour qu'il n'affiche que les valeurs comprises entre le 1/02/2016 et le 29/02/2016
2 - si la date sélectionnée est au xx/01/2016, je voudrais filtrer le TCD "Trimestre" pour qu'il n'affiche que les valeurs comprises entre le 1/01/2016 et le 31/03/2016
3 - si la date sélectionnée est au xx/xx/2016, je voudrais filtrer le TCD "Année" pour qu'il n'affiche que les valeurs comprises entre le 1/01/2016 et le 31/12/2016

Le problème étant que je ne sais pas quelles dates seront présentes en avance, parfois aucune, parfois 8 occurrences du 14/02/2016, parfois une occurrence par jour...

Puis je désirerais idéalement le trier selon une valeur de champ, mais me trouve un peu perdu sur la procédure à suivre.
Mon code jusqu'à présent ressemble à cela mais n'est pas fonctionnel. Si quelqu'un a une idée ?

* Les dates en input sont stockées dans la feuille "Procédure"
* Les TCD sont dans la feuille "Liste projets"
* Le champ du TCD sur lequel appliquer le filtre s'appelle "Date de lancement/Kick-off du projet"
* La partie de code ci-dessous s'applique au TCD intitulé "TCDLancéMois" (> filtre sur un mois)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
''--------------------Actualiser et filtrer Tableau "lancé dans le mois"
 
        'on récupère la date du mois dans la feuille Procedure
        moisDebut = ActiveWorkbook.Sheets("Procédure").Range("D15").Value
        Sheets("Liste projets").Activate
 
    'on se place dans le TCD "débuté dans le mois"
    ActiveSheet.PivotTables("TCDLancéMois").PivotFields("Date de lancement/Kick-off du projet").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("TCDLancéMois").PivotFields("Date de lancement/Kick-off du projet")
 
        'tri manuel
        .AutoSort xlManual, .Name
 
        'si mois de 31 jours
        If ((Month(moisDebut) = 1) Or (Month(moisDebut) = 3) Or (Month(moisDebut) = 5) Or (Month(moisDebut) = 7) Or _
        (Month(moisDebut) = 8) Or (Month(moisDebut) = 10) Or (Month(moisDebut) = 12)) Then
 
            For i = 1 To 31
                ActiveSheet.PivotTables("TCDLancéMois").PivotFields("Date de lancement/Kick-off du projet").PivotItems(moisDebut).Visible = True
                moisDebut = DateAdd("d", 1, moisDebut)
            Next
 
        'si mois de 30 jours
        ElseIf ((Month(moisDebut) = 4) Or (Month(moisDebut) = 6) Or (Month(moisDebut) = 9) Or (Month(moisDebut) = 11)) Then
 
            For i = 1 To 30
                .PivotItems(moisDebut).Visible = True
                moisDebut = DateAdd("d", 1, moisDebut)
            Next
 
        'si février (ne prend pas en compte les mois de 29j)
        ElseIf (Month(moisDebut) = 2) Then
 
            For i = 1 To 28
                .PivotItems(moisDebut).Visible = True
                moisDebut = DateAdd("d", 1, moisDebut)
            Next
 
        End If
 
        .AutoSort xlAscending, .Name 'Adjust these settings to previous settings.
    End With