Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA : TCD à la date du jour

  • Initiateur de la discussion Initiateur de la discussion VBA-beginner
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

V

VBA-beginner

Guest
Bonjour,

En macro, je souhaite faire un TCD qui m'affichera uniquement la date du jour. La date est en colonne.

Je fais donc

Dim Datedujour As String
Datedujour = Format(Date, "dd/mm/yyyy")
.PivotItems(Datedujour).Visible = True

Comment mettre les autres dates (qui changent chaque jour) à False ??
Du style:
.PivotItems(Datedujour - 1).Visible = False
.PivotItems(Datedujour - 2).Visible = False ect...

Merci de vos lumieres
 
Re : VBA : TCD à la date du jour

Bonsoir,

essaye peut être le code ci dessous :

Code:
Sub test()
Dim i As PivotItem
With ActiveSheet.PivotTables(1).PivotFields("date")
    For Each i In .PivotItems
        i.Visible = True
    Next i
    For Each i In .PivotItems
        If i.Value <> Date Then i.Visible = False
    Next i
End With
End Sub

bonne soirée
@+
 
Re : VBA : TCD à la date du jour

génial ca a l'air de fonctionner.

si je met If i.Value <> Date - 1 il me met uniquement les données de la veille.

merci beaucoup!
 
Re : VBA : TCD à la date du jour

je viens de me rendre compte d'un souci...
lorsque le lundi ma macro cherchera les données de la veille.. soit du dimanche (alors que je n'ai pas d'activité le dimanche)... elle plantera.
je l'ai simulé en changeant la date de mon pc.

une idée pour palier ce probleme ?
 
Re : VBA : TCD à la date du jour

Re

une modification ci dessous, si lundi valorise la variable "made" à J-1, suppose donc que tu as une activité le samedi :

Code:
Sub test()
Dim i As PivotItem, madate As Date
If Weekday(Date, 2) = 1 Then madate = Date - 1 Else madate = Date
With ActiveSheet.PivotTables(1).PivotFields("date")
    For Each i In .PivotItems
        i.Visible = True
    Next i
    For Each i In .PivotItems
        If i.Value <> madate Then i.Visible = False
    Next i
End With
End Sub


bonne soirée
@+
 
Re : VBA : TCD à la date du jour

ca ne passe pas, il y a une erreur sur i.Visible = Falsej'arrive pas trop a comprendre la ligne

If Weekday(Date, 2) = 1 Then madate = Date - 1 Else madate = Date
en gros si c'est lundi, on prend date = dimanche et sinon date = datedujour

peux tu expliquer weekday(date, 2) ?


merci ; je me surprend a avancer comme cela alors que j'ai fait ma premiere macro automatique il y a deux jours ! 🙂
 
Re : VBA : TCD à la date du jour

Bonjour VBA beginer

comprend pas trop, chez moi elle fonctionne bien, mais attention, dans un tcd au moins un item doit être visible, c'est pour cela que je les rends tous visibles avant (i.Visible = True), donc il faut qu'il existe bien un item pour la date déterminée par la fonction "Weekday" :

Code:
Sub test()
Dim i As PivotItem, madate As Date
Application.ScreenUpdating = False
If Weekday(Date, 2) = 1 Then madate = Date - 1 Else madate = Date
With ActiveSheet.PivotTables(1).PivotFields("date")
    For Each i In .PivotItems
        i.Visible = True
    Next i
    For Each i In .PivotItems
        If i.Value <> madate Then i.Visible = False
    Next i
End With
Application.ScreenUpdating = True
End Sub

pour info la fonction "Weekday" te renvoie le jour de la semaine sous forme de chiffre, le 2 apres "date" signifie, que le 1er jour de la semaine est le lundi. Pour plus d'info sur le code, tu positionnes ton curseur sur le mot pour lequel tu veux de l'aide et touche F1.

j'ai ajouté 2 lignes de code "Application.ScreenUpdating" qui permettent arreter ponctuellement le rafraichissement d'écran, ce qui rend le code plus rapide et transparent pour l'utilisateur.

bonne journée
@+
 
Re : VBA : TCD à la date du jour

je n'ai pas encore pu tester ton code, car j'ai trouvé une erreur

en fait mon fichier source a un nombre de ligne différent selon les jours
et pour faire mon tablaeu croisé dynamique j'ai vu que la formule etait

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"ramasse!R1C1:R712C8").CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique4", DefaultVersion:=xlPivotTableVersion10

Ce qui veut dire si je ne me trompe pas que si mon fichier source a plus de 712 lignes, alors il ne les prendra pas en compte.

j'ai déclaré une variable ligne bas, tel que
lignebas = Selection.CurrentRegion.End(xlDown).Row
soit le numero de ma derniere ligne.
comment l'ecrire dans la commande pour le tableau ?
je sais qu'il faut mettre & quelque part mais je ne trouve pas la bonne syntaxe
 
Re : VBA : TCD à la date du jour

Ca fonctionne parfaitement, j'ai juste modifier :

Code:
Sub test()
Dim i As PivotItem, madate As Date
Application.ScreenUpdating = False
If Weekday(Date, 2) = 1 Then madate = Date - 2 Else madate = Date - 1With ActiveSheet.PivotTables(1).PivotFields("date")
For Each i In .PivotItems
i.Visible = True
Next i
For Each i In .PivotItems
If i.Value <> madate Then i.Visible = False
Next i
End With
Application.ScreenUpdating = True
End Sub

Ainsi, le lundi, c'est l'étiquette du samedi qui est True
Les autres jours, celle de la veille.
 
Re : VBA : TCD à la date du jour

Re

regarde le code ci-dessous, nom de la feuille et plage à adapter :

Code:
Dim maplage As Range
Set maplage = Sheets("Feuil1").Range("A1:B" & Sheets("Feuil1").Range("B65536").End(xlUp).Row)
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
    maplage).CreatePivotTable TableDestination:=Sheets("Feuil1").Range("J1")

@+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
636
Réponses
5
Affichages
909
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…