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
Partager