VBA Filtrer un TCD par dates

jim7963

XLDnaute Junior
Bonjour à tous,

j'étais à la recherche d'un exemple de macro qui me permette de filtrer mon TCD par dates quand je suis tombé sur un code de Pierrot93 dans les archives du forum. J'ai fais une légère adaptation à mon fichier, mais on dirait que cela ne lui a pas plu car j'ai droit à une jolie "erreur d'exécution 1004 - Impossible de définir la propriété Visible de la classe PivotItem".

Voici le code:

Code:
Sub MasqueDates()
Dim p As PivotItem
Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date")
    For Each p In .PivotItems
        p.Visible = True
    Next p
    For Each p In .PivotItems
        If p.Value <> Month(Range("J1")) Then p.Visible = False
    Next p
End With
Application.ScreenUpdating = True
End Sub

Quand je lance le débogage il me surligne en jaune la partie: p.Visible = False.

Auriez-vous une idée d'où peut provenir le problème car je sèche.

Je vous joins un fichier que j'ai allégé au niveau des données pour vous aider.
 

Pièces jointes

  • Projet suivi 2.xlsm
    74.3 KB · Affichages: 66

MJ13

XLDnaute Barbatruc
Re : VBA Filtrer un TCD par dates

Bonjour à tous

J'avais fait sur la même base que Philippe :) ce code (intéressant le Cstr :eek:):

Code:
Sub Tri_TCD_Date()
Dim valdeb As Long
Dim valfin As Long
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date"). _
        ClearAllFilters
    'ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date"). _
        PivotFilters.Add2 Type:=xlDateBetween, Value1:="04/01/2012", Value2:= _
        "12/01/2012"
        valdeb = Cells(1, 7).Value2
        valfin = Cells(2, 7).Value2
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date"). _
        PivotFilters.Add2 Type:=xlDateBetween, Value1:=valdeb, Value2:= _
        valfin
End Sub
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : VBA Filtrer un TCD par dates

Re,

une petite amélioration (capillo-tractée :D) pour éviter une erreur si la date de début est postérieure à la date de fin;
cette ligne en début de code permettra d'inverser les dates et d'éviter le plantage
Code:
Sub MasqueDates()
If [G1] > [G2] Then [G1] = [G1] + [G2]: [G2] = [G1] - [G2]: [G1] = [G1] - [G2]
' la suite du code
' .........................
' .........................
End Sub
à+
Philippe

Edit: Bonjour Michel
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
292