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
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
- 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).Value2Cordialement.
Tu n'as pas bien lu ce que j'ai écrit !
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 SubTout 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
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 !
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.
