Probleme de filtre sur date tcd avec une macro

Bonjour a tous voila plusieurs jours et surtout heures que j essai de faire des tcd qui s 'actualiseraient sur une période de X jours en lançant une macro.

Avant toute chose je suis vraiment une bille en macro et je n'utilise d'ailleurs que la fonction enregistrement pour ensuite faire mon bricolage . donc tout le jargon technique est du chinois pour moi .

J ai réussis a faire quelque chose de pas mal ... mais je rencontre un problème sur certaine date ....j ai l impression que les jours et les mois sont inverser .... mais pas toujours .

Je vous joint mon fichier. je voudrais que mes tcd de la feuille "rapport pour client" ce mettent a jours pour la période défini par des dates que je rentre moi même en case N7 et N8 (qui seront par la suite "automatisé avec la fonction aujourdhui ) en cliquant sur le bouton au dessus .

Parfois ça fonctionne bien parfois bcp moins bien

Exemple:

  • si on met en date de début 03/01/2017 et date de fin le 04/03/2017 mes tcd ne se mettent a jours que du 01/03/2017 au 04/03/2017
  • si on met en date de debut 06/01/2017 et date de fin le 04/03/2017 ca me remonte un problème dans ma macro
capture

- si on met en date de début 02/01/2017 et date de fin le 04/03/2017 mes tcd s actualisent parfaitement

voila la macro que j ai bidouillé

Sub Macro7()

'

' Macro7 Macro

'

'

Dim debut, fin As String

debut = Cells(7, 14)

fin = Cells(8, 14)

ActiveWorkbook.RefreshAll

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date"). _

ClearAllFilters

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date"). _

PivotFilters.Add Type:=xlDateBetween, Value1:=debut, Value2:=fin

ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Date"). _

ClearAllFilters

ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Date"). _

PivotFilters.Add Type:=xlDateBetween, Value1:=debut, Value2:=fin

ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Date"). _

ClearAllFilters

ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Date"). _

PivotFilters.Add Type:=xlDateBetween, Value1:=debut, Value2:=fin

ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Date"). _

ClearAllFilters

ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Date"). _

PivotFilters.Add Type:=xlDateBetween, Value1:=debut, Value2:=fin

End Sub

Si vous pouvez m'expliquer le pourquoi du comment ........

Merci d'avance pour votre aide

Bonjour,

Essaie ainsi :

Dim debut, fin

debut = Cells(7, 14).Value2
fin = Cells(8, 14).Value2

Cordialement.

Bonjour et merci pour ton aide ,

Mais ça me donne cette erreur

capture

Tu n'as pas bien lu ce que j'ai écrit ! Supprime As String.

Ha mince .... désolé ... tu vois je suis vraiment pas aidé

SUPER .... ça marche .....un grand merci a toi ....

Du coup tu peux m expliquer un peu la différence ? si c est pas trop compliqué

Bonjour,

Une proposition à étudier.

Cdlt.

Option Explicit

Public Sub FilterReport()
Dim pt As PivotTable
Dim sStart As String, sEnd As String
    Application.ScreenUpdating = False
    sStart = Format([N7], "dd/mm/yyyy")
    sEnd = Format([N8], "dd/mm/yyyy")
    For Each pt In ActiveSheet.PivotTables
        With pt
            .ManualUpdate = True
            .PivotCache.Refresh
            .ClearAllFilters
            Select Case pt.Name
                Case "TCD_1", "TCD_2", "TCD_4", "TCD_5"
                    .PivotFields("Date").PivotFilters.Add _
                            Type:=xlDateBetween, _
                            Value1:=sStart, _
                            Value2:=sEnd
                Case Else
                    '
            End Select
            .ManualUpdate = False
        End With
    Next pt
End Sub

Tout simplement tes dates sont réinterprétées par VBA en format américain (inversion mois/jour).

La transformation de tes variables en type Variant et l'utilisation de Value2, leur affecte les dates sous forme numérique...

Ceci étant, Jean-Eric te propose un autre façon de procéder, avec en plus une écriture de meilleure tenue de ta procédure (point sur lequel j'ai évité de me pencher).

Cordialement.

Merci a vous deux .

Comme dis plus haut je suis une bille .

Effectivement je comprend que le style de jean éric est bien plus "propre" que le miens (d ailleurs je ne me compare même pas vous en fait ) mais comme je suis une bille ..... je ne comprend qu a moitier ce qu il a fait mais je pense que je vais au moins me servir de sa façon de regrouper les 4 tcd . (encore de la bidouille en perspective quoi )

Pour en revenir a la version d'eric on m avais deja donner le fameux CDate etc.....

Mais bizarement ça m avais inverser la date de fin ... bref la vos deux soluce fonctionne a merveille ...

Vraiment un grand merci a vous deux car j ai passer facilement en tout 8h a chercher sur les forum a bidouiller sans trouver la soluce .

Et vous m enlevez une sacré épine du pied .

Ne te dévalorise pas ! Pour savoir, il faut apprendre... l'avenir est devant toi !

N'étant pas usager habituel de TCD ni assez familiarisé avec ce domaine, j'ai préféré ne pas intervenir sur l'ensemble de ton code, contrairement à Jean-Eric qui fait référence en la matière...

Mais il est vrai que la conversion avec CDate ne suffisait pas dans ce cas, c'est ensuite que VBA retransformait la date... Il fallait donc un méthode pour l'empêcher, on en a deux à ce stade...

Dis-toi bien que même avec l'expérience de ces problèmes, on n'est jamais sûr que cela fonctionne avant d'avoir testé... et on tâtonne toujours un peu...

Cordialement.

Rechercher des sujets similaires à "probleme filtre date tcd macro"