Filtrer Graphique par date en VBA

Light479

XLDnaute Nouveau
Bonjour,

Je possède un Tableau Croisé Dynamique comportant des dates et valeurs, ainsi qu'un Graphique Croisé Dynamique.
J'ai crée un UserForm avec deux DateTimePickers et un Bouton

Je souhaiterai pouvoir sélectionner deux écarts de dates et que le graphique se filtre en fonction.

Je suis conscient qu'il est déjà possible de filtrer à l'aide des filtres habituels. Mais le UserForm est requis dans ce projet.
Un début de code a était associé au bouton, mais ne fonctionne pas.

Serait-il possible d'avoir un peu d'aide?

N'hésitez pas si il faut de plus amples précisions.
Vous trouverez le fichier en attaché.

Merci de m'avoir lu.
Light479
 

Fichiers joints

Light479

XLDnaute Nouveau
Re : Filtrer Graphique par date en VBA

Re-bonjour au Forum.

J'ai réussit à faire fonctionner mes deux DTPickers, sauf pour le résultat, voici mon code:

Private Sub CommandButton1_Click()
Dim Pvt As PivotTable
Dim Fld As PivotField
Dim DD As Long, DF As Long

DD = CLng(Me.DTPicker1.Value)
DF = CLng(Me.DTPicker2.Value)
Set Pvt = Sheets("Feuil2").PivotTables("TEST")
Set Fld = Pvt.PivotFields("Date/Time")
Fld.ClearAllFilters
Fld.PivotFilters.Add Type:=xlDateBetween, Value1:=DD, Value2:=DF
Set Fld = Nothing
Set Pvt = Nothing
Unload Me
End Sub
Je pense avoir un soucis à cette ligne: Fld.PivotFilters.Add Type:=xlDateBetween, Value1:=DD, Value2:=DF
Une fois que je choisis mes dates, par exemple du 01/01/14 au 03/01/14, je n'est que les valeurs du 01 et du 02 qui remontent.

Je suppose que c'est le "between" du Type:=xlDateBetween qui pose problème
Une suggestion pour inclure les valeurs de deuxième DTpicker?
 
G

Guest

Guest
Re : Filtrer Graphique par date en VBA

Bonjour,

En fait pour pivotField "Date/Time" ce sont des étiquettes (caption) non des valeurs de date.

Si tu fais une boucle pour afficher la valeur de chaque item de "Date/Time" dans la fenêtre espion, tu verras que ce sont des valeurs de type String et non Date, ce qui est étrange, elles y sont affichées avec le "." comme séparateur en lieu et place du "/"???

Il faut ajouter +1 à la date de fin de période ou mettre son heure à 23:59:59

Je ne sais quelle cuisine interne excel fait depuis 2007 mais sur ton tdc ceci fonctionne sous xl2010 (ne fonctionnera pas sous 2003):
Code:
Sub FiltreDate()
Dim du As String, au As String
du = Format(DateSerial(2013, 6, 1), "dd/mm/yyyy") & " 00:00:00"
au = Format(DateSerial(2013, 6, 3)+1, "dd/mm/yyyy") & " 00:00:00"
'OU au = Format(DateSerial(2013, 6, 3), "dd/mm/yyyy") & " 23:59:59"

   With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Date/Time")
        .ClearAllFilters
        .PivotFilters.Add Type:=xlCaptionIsBetween, Value1:=du, Value2:=au
   End With
End Sub
J'ai entre autres choses, testé sans les " 00:00:00" et avec "*", cela filtrer uniquement les dates correspondant au 03/06/2013

A+
 
Dernière édition par un modérateur:

Light479

XLDnaute Nouveau
Re : Filtrer Graphique par date en VBA

Bonjour Hasco,
Tout d'abord merci pour ta réponse, il faut savoir que dès le départ je reçois ces données sous format .txt puis sauvegardé en .xlsm :

Code:
Étiquettes de lignes	Somme de ZONE #01 Hum [%RH]	Somme de ZONE #01 Temp [°C]	
01.06.2013 00:09:43	50,1	21,5	43,7	23,7	46,7	22,6	45,9	22,7	48,9	21,4
Les dates y sont séparés par des points, ca doit venir de là. Je les ai simplement remplacer à l'aide du ctrl+f=>remplacer.

Le but finale est de faire tout ce traitement sous vba, ainsi que le TCD et GCD.

Entre temps j'ai moi meme réussit à me dépatouiller:
Code:
'Dim Pvt As PivotTable
'Dim Fld As PivotField
'Dim DD As Long, DF As Long
'i = i + 1
'DD = CLng(Me.DTPicker1.Value)
'DF = CLng(Me.DTPicker2.Value)
'Set Pvt = Sheets("Feuil2").PivotTables("TEST")
'Set Fld = Pvt.PivotFields("Date/Time")
'Fld.ClearAllFilters
'Fld.PivotFilters.Add Type:=xlDateBetween, Value1:=DD, Value2:=DF + i
'Set Fld = Nothing
'Set Pvt = Nothing
'Unload Me
Le Value2:=DF + i m'a permis d'inclure dans le filtre la date finale, qui autrement prennait le terme between au sens littérale.
 

Light479

XLDnaute Nouveau
Re : Filtrer Graphique par date en VBA

Rebonjour le Forum!

Finalement mon problème est toujours d'actualité mais sous une autre forme...
Dans le fichier en PJ, Feuil3, j'ai un TCD contenant des dates & heures en étiquettes de lignes.
Je souhaite pouvoir, à l'aide du "bouton 43" (Feuil3), utiliser les deux DTpickers qui apparaissent pour trier mon étiquette de ligne.


Code:
'Dim Pvt As PivotTable
'Dim Fld As PivotField
'Dim DD As Long, DF As Long
'i = i + 1
'DD = CLng(Me.DTPicker1.Value)
'DF = CLng(Me.DTPicker2.Value)
'Set Pvt = Sheets("Feuil3").PivotTables("Tableau dynamique1")
'Set Fld = Pvt.PivotFields("date/time")
'Fld.ClearAllFilters
'Fld.PivotFilters.Add Type:=xlCaptionIsBetween, Value1:=DD, Value2:=DF + i
'Set Fld = Nothing
'Set Pvt = Nothing
'Unload Me

Mon code à l'air de filtrer , puisque en me plaçant en "A3" (étiquettes de lignes). Je peux voir que le filtre s'applique aux données entre 41426 et 41441.

Mais d'oû sortent ces valeurs???

J'ai appliqué des formats personnalisé tel que "jj/mm/aaaa hh:mm:ss" sur le TCD ainsi que sur la source du TCD
Mais rien n'y fait.

J'ai donc appliqué le code d'Hasco contenant le formatage des données. Seul problème c'est qu'il filtre peu importe ce que je choisit en DTPicker, du 1/06 au 3/06.

Serait-il possible d'avoir un coup de main soit sur mon code pour y ajouter une notion de format, soit sur celui d'Hasco pour modifier la plage?

Merci de m'avoir lu.

Light479,


PS. Je viens de me rendre compte que mon fichier est trop lourd pour le mettre en PJ. N’hésitez pas à me préciser si il est nécessaire.
 
G

Guest

Guest
Re : Filtrer Graphique par date en VBA

Bonjour,

les nombres 41426, 41441 sont des valeurs numériques de dates pour excel c'est sur ces valeurs qu'il calcul et compare les dates.

En ce qui concerne ton problème, fais un fichier exemple simple reflétant la chose, avec des données anonymes.

A+
 

Light479

XLDnaute Nouveau
Re : Filtrer Graphique par date en VBA

Bonjour,
Je ne suis pas sur mon lieu de travail jusqu'à Lundi et mon PC perso ne dispose pas du control ActiveX pour insérer le DTPicker, j'ai installé le .ocx mais rien n'y fait. Ce doit etre ma version craqué d'excel qui veut pas.

Entre temps j'ai monté un fichier sans le code de traitement des données du .txt que je récupère.
En Feuil2 le bouton qui m'ouvre le UserForm où il y aurait du avoir les DTpicker1 & 2. Faudra les y rajouter toi meme par contre :(

Encore merci pour ton implication Hasco!
 

Fichiers joints

G

Guest

Guest
Re : Filtrer Graphique par date en VBA

Re,

Je t'ai déjà donné la solution précédement.:(

Code:
Private Sub CommandButton1_Click()
Dim Pvt As PivotTable
Dim Fld As PivotField
Dim DD As String, DF As String
i = i + 1
DD = Format(Me.DTPicker1 - 1, "dd.mm.yyyy") & "00:00:00"
DF = Format(Me.DTPicker2, "dd.mm.yyyy") & "00:00:00"
Set Pvt = Sheets("Feuil2").PivotTables("Tableau croisé dynamique1")
Set Fld = Pvt.PivotFields("Date/Time")
Fld.ClearAllFilters
Fld.PivotFilters.Add Type:=xlCaptionIsBetween, Value1:=DD, Value2:=DF
Set Fld = Nothing
Set Pvt = Nothing
Unload Me
End Sub
A+
 

Light479

XLDnaute Nouveau
Re : Filtrer Graphique par date en VBA

Effectivement, tu m'avais bien donné la solution pour appliquer le format, mais je n'arrivais pas à l'intégrer avec le "Me.DTPicker"

Mon tri fonctionne maintenant, comme il faut.

Merci pour ton aide précieuse Hasco.
 

Discussions similaires


Haut Bas