2017-10-02 2 views
1

Je souhaite définir un filtre de tableau croisé dynamique avec la date d'un formulaire utilisateur. La date dans le formulaire utilisateur est strDateSelected = dtpDate.Value.Comment définir le filtre d'un tableau croisé dynamique avec une date dans un formulaire utilisateur VBA Excel 2013

Mon code ne fonctionne pas et je ne sais pas pourquoi. Quelqu'un voit-il le problème?

Private Sub dtpDate_Change() 
    Call ExecuteRefresh 
End Sub 

Private Sub ExecuteRefresh() 
    Dim pvt As PivotTable 
    Dim pf As PivotField 
    Dim strDateSelected As String 
    Dim strCurrentFV As String 

    Set pvt = Worksheets("Sommaire 1").PivotTables("pvtFonctionJournee") 
    Set pf = pvt.PivotFields("Date") 

    strDateSelected = dtpDate.Value 
    Set pf = pvt.PivotFields("Date") 
    Call GetFirstPivotFieldValueSelected(pf, strCurrentFV) 
    pf.ClearAllFilters 
    pf.PivotItems(strCurrentFV).Visible = False 
    strDateSelected = Format(strDateSelected, "m\/d\/yyyy") 
    pf.PivotItems(strDateSelected).Visible = True 
    pvt.RefreshTable 
End Sub 

Private Sub GetFirstPivotFieldValueSelected(pf As PivotField, strFirstPFValueSelected As String) 
    strFirstPFValueSelected = "" 
    For Each Pi In pf.PivotItems 
    If Pi.Visible = True Then 
     strFirstPFValueSelected = Pi.Value 
     Exit Sub 
    End If 
    Next 
End Sub 
+0

Avez-vous une erreur? Si oui, sur quelle ligne? – braX

+0

Si la date existe, il fonctionne 1/2 fois. Donc c'est bizarre. Il y a une erreur quand la date n'existe pas. –

+0

pf.PivotItems (strDateSelected) .Visible = True –

Répondre

0

Il fonctionne avec ce code simple:

Sub FilterDate() 

For Each pt In Worksheets("Sommaire 1").PivotTables 
    With pt.PivotFields("Date") 
     .ClearAllFilters 
     .CurrentPage = dtpDate.Value 
    End With 
Next pt 

End Sub