Bonjour à tous,

Je souhaiterais mettre en place un filtre dans un tableau croisé dynamique concernant deux dates.
Je dispose d'une date d'ouverture et d'une date de fin de période.
L'objectif est de sélectionner toutes les lignes où la date d'ouverture est antérieure ou égale à la date de fin de période.

Ma date d'ouverture est présente dans une cellule renseignée sous la forme : 05/08/2014 16:17:00
Le format de cette cellule est "Personnalisée" à "jj/mm/aaaa hh:mm"
J'en dispose d'une par ligne de données

Ma date de fin de période doit être déterminée
Je dispose d'une cellule "Période choisie" présente dans une autre feuille du classeur Excel sous la forme "juillet 2014"
Le format de cette cellule est "Standard"

1ère étape : déterminer la date de fin de période
Pour déterminer ma date de fin de période, j'ai codé la méthode suivante :
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
44
45
46
47
48
49
50
51
52
53
 
' Calcul de la date de fin de période
        If IsNumeric(Right(Wb.Sheets(lib_onglet_Synthese).Range(pos_periode_choisie).Value, 4)) Then
            date_fin_periode_Year = CInt(Right(Wb.Sheets(lib_onglet_Synthese).Range(pos_periode_choisie).Value, 4))
        Else
            date_fin_periode_Year = 1
        End If
 
        TamponMois = Mid(Wb.Sheets(lib_onglet_Synthese).Range(pos_periode_choisie).Value, 1, Len(Wb.Sheets(lib_onglet_Synthese).Range(pos_periode_choisie)) - 5)
 
        If TamponMois = "janvier" Or TamponMois = "Janvier" Then
            date_fin_periode_Month = 1
            date_fin_periode_Day = 31
        ElseIf TamponMois = "février" Or TamponMois = "Février" Or TamponMois = "fevrier" Or TamponMois = "Fevrier" Then
            date_fin_periode_Month = 2
            date_fin_periode_Day = 29
        ElseIf TamponMois = "mars" Or TamponMois = "Mars" Then
            date_fin_periode_Month = 3
            date_fin_periode_Day = 31
        ElseIf TamponMois = "avril" Or TamponMois = "Avril" Then
            date_fin_periode_Month = 4
            date_fin_periode_Day = 30
        ElseIf TamponMois = "mai" Or TamponMois = "Mai" Then
            date_fin_periode_Month = 5
            date_fin_periode_Day = 31
        ElseIf TamponMois = "juin" Or TamponMois = "Juin" Then
            date_fin_periode_Month = 6
            date_fin_periode_Day = 30
        ElseIf TamponMois = "juillet" Or TamponMois = "Juillet" Then
            date_fin_periode_Month = 7
            date_fin_periode_Day = 10
        ElseIf TamponMois = "août" Or TamponMois = "Août" Or TamponMois = "aout" Or TamponMois = "Aout" Then
            date_fin_periode_Month = 8
            date_fin_periode_Day = 31
        ElseIf TamponMois = "septembre" Or TamponMois = "Septembre" Then
            date_fin_periode_Month = 9
            date_fin_periode_Day = 30
        ElseIf TamponMois = "octobre" Or TamponMois = "Octobre" Then
            date_fin_periode_Month = 10 ' Volontairement mis à 10 pour les tests
            date_fin_periode_Day = 31
        ElseIf TamponMois = "novembre" Or TamponMois = "Novembre" Then
            date_fin_periode_Month = 11
            date_fin_periode_Day = 30
        ElseIf TamponMois = "décembre" Or TamponMois = "decembre" Or TamponMois = "Décembre" Or TamponMois = "Decembre" Then
            date_fin_periode_Month = 12
            date_fin_periode_Day = 31
        Else
            date_fin_periode_Year = 1
            date_fin_periode_Month = 1
            date_fin_periode_Day = 1
        End If
 
        date_fin_periode = CDate(date_fin_periode_Day & "/" & date_fin_periode_Month & " / " & date_fin_periode_Year)
Cette méthode me permet de récupérer la date "31/07/2014" lorsque la personne a renseigné "juillet 2014" dans le champ.

2ème étape : sélection des dates antérieures à la date de fin de période et passage en filtre du tableau croisé dynamique
Pour mener cette opération, j'ai réalisé la méthode suivante :
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
 
    ' Sélection des incidents ouverts antérieurement à la date de fin de période
    With TCD_M7.PivotFields(lib_col_DateOuverture)
        svgASO = .AutoSortOrder
        .AutoSort xlManual, .SourceName
        TCD_M7.ManualUpdate = True
        'On Error Resume Next
        For Each pvtitem In .PivotItems
            If Not (IsNull(pvtitem.Value) Or IsEmpty(pvtitem.Value) Or IsMissing(pvtitem.Value) Or _
                (Trim(pvtitem.Value) = "") Or (Trim(pvtitem.Value) = "(blank)")) Then
                If (Format(CDate(pvtitem.Value), "yyyy/mm/dd") <= Format(date_fin_periode, "yyyy/mm/dd")) Then
                    pvtitem.Visible = True
                Else
                    pvtitem.Visible = False
                End If
            Else
                pvtitem.Visible = False
            End If
        Next
        'On Error GoTo 0
        TCD_M7.ManualUpdate = False
        .AutoSort svgASO, .SourceName
    End With
 
    With TCD_M7.PivotFields(lib_col_DateOuverture)
        .Orientation = xlPageField
        .Position = 1
    End With
Après avoir exécuté ma procédure en sélectionnant "juillet 2014", je remarque que je récupère bien les informations de la bonne colonne et le traitement semble se dérouler correctement, hormis cet étrange <Incompatibilité de type> sur l'attribut .Visible.
Nom : erreur.PNG
Affichages : 1886
Taille : 4,2 Ko
Nom : espion.PNG
Affichages : 1854
Taille : 10,3 Ko
Nom : methode.PNG
Affichages : 2013
Taille : 19,9 Ko

En revanche, en retournant sous Excel, je remarque un filtre étonnant.
Nom : debut.PNG
Affichages : 2031
Taille : 12,1 Ko
Nom : fin.PNG
Affichages : 2128
Taille : 12,7 Ko
Le filtre s'arrête au 31 juillet et sélectionne toutes les entrées en août, et ce, alors que j'ai bien forcé le format des dates avec la commande Format pour m'assurer qu'elles sont bien disposées de la même façon. Il n'y a pas d'autres périodes désélectionnées.

Est-ce que l'un d'entre vous pourrait me donner une piste dans le but de m'aider ?
En vous remerciant par avance.