Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous, et tous mes vœux aux Exceliens …

Je cherche à réaliser une série d'opérations récurrentes, pour laquelle je ne trouve pas de solutions dans le forum, alors qu'il me semble que c'est un problème qui doit concerner beaucoup d'utilisateurs de TCD ...

Mon fichier contient des tableaux croisés dynamiques avec un onglet par pays (l'exemple présenté ici est volontairement restreint à quelques pays)

Tous les mois, je dois imprimer ces TCD pour la période allant de janvier au mois en cours, ou au mois que je choisis. Jusqu'ici, je vais sur chaque onglet, je sélectionne le mois en cours, donc je coche le mois suivant ceux déjà sélectionnés précemment.

Cette tâche est à la fois fastidieuse et source d'erreur car vu le nombre d'onglets (encore une fois, ici, l'exemple est restreint mais imaginez que j'ai également une déclinaison par département et région …), il n'est pas rare d'en oublier ou de ne pas cocher la bonne case ...

Je sais comment, par VBA, sélectionner un mois donné, mais pas comment gérer l'affichage du mois de janvier jusqu'à la date en question.
Exemple : si je sélectionne le mois d'avril, en écrivant …

With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois")
.PivotItems("Avril").Visible = true

… je n'affiche que le mois d'avril. Or, je voudrais qu'en sélectionnant avril, mon TCD montre janvier, février, mars et avril

Existe-t-il une instruction (ou un moyen connu) de signifier qu'on retient les éléments mois de janvier à xxx
Je précise que je saurai créer une boucle balayant les différents onglets et mettre le PivotItems sur le mois en question mais je préfère me concentrer sur le problème qui pour l'instant est d'avoir de janvier à xxx

Merci d'avance pour votre aide et encore bonne année
 

Pièces jointes

  • Fichier_exemple.xlsm
    379.6 KB · Affichages: 62
  • Fichier_exemple.xlsm
    379.6 KB · Affichages: 63
  • Fichier_exemple.xlsm
    379.6 KB · Affichages: 62

JCGL

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Bonjour à tous

Peux-tu essayer ceci :

VB:
Option Explicit

Sub Test()
    Application.ScreenUpdating = 0
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Mois")
        .PivotItems("Janvier").Visible = True
        .PivotItems("Février").Visible = True
        .PivotItems("Mars").Visible = True
        .PivotItems("Avril").Visible = True
        .PivotItems("Mai").Visible = True
        .PivotItems("Juin").Visible = True
        .PivotItems("Juillet").Visible = True
        .PivotItems("Août").Visible = True
        .PivotItems("Septembre").Visible = True
        .PivotItems("Octobre").Visible = True
        .PivotItems("Novembre").Visible = True
        .PivotItems("Décembre").Visible = True
        If Month(Date) < Month("01/02/" & Year(Date)) Then .PivotItems("Février").Visible = False
        If Month(Date) < Month("01/03/" & Year(Date)) Then .PivotItems("Mars").Visible = False
        If Month(Date) < Month("01/04/" & Year(Date)) Then .PivotItems("Avril").Visible = False
        If Month(Date) < Month("01/05/" & Year(Date)) Then .PivotItems("Mai").Visible = False
        If Month(Date) < Month("01/06/" & Year(Date)) Then .PivotItems("Juin").Visible = False
        If Month(Date) < Month("01/07/" & Year(Date)) Then .PivotItems("Juillet").Visible = False
        If Month(Date) < Month("01/08/" & Year(Date)) Then .PivotItems("Août").Visible = False
        If Month(Date) < Month("01/09/" & Year(Date)) Then .PivotItems("Septembre").Visible = False
        If Month(Date) < Month("01/10/" & Year(Date)) Then .PivotItems("Octobre").Visible = False
        If Month(Date) < Month("01/11/" & Year(Date)) Then .PivotItems("Novembre").Visible = False
        If Month(Date) < Month("01/11/" & Year(Date)) Then .PivotItems("Décembre").Visible = False
    End With
    Application.ScreenUpdating = 1
End Su

A + à tous
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Bonjour
Bise àJCGL

Une autre solution avec un segment lié à tous les TCD. Celui-ci n'utilise pas de code VBA

On peut éventuellement y associer un peu de VBA pour n'avoir à sélectionner que le dernier mois et pas tous...
 

Pièces jointes

  • Fichier_exemple.xlsm
    388.1 KB · Affichages: 73
  • Fichier_exemple.xlsm
    388.1 KB · Affichages: 74
  • Fichier_exemple.xlsm
    388.1 KB · Affichages: 75

JCGL

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Bonjour à tous,

Chez moi les Segments me font bugger XL 2010...
J'avais déjà eu le souci sur trois autres fichiers....

Néanmoins jolie solution.

Bises à Chris
A + à tous
 

chris

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Bonjour
...
Chez moi les Segments me font bugger XL 2010...
J'avais déjà eu le souci sur trois autres fichiers....
...

Bizarre, je les utilise pas mal chez moi comme chez les clients et n'ai pas rencontré de problème.
Tu as quel Windows, et quels services packs Office, Office 32bits ou 64 bits ?
 

JCGL

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Re,

Je suis Win 8 64 Bits et MSO 2010 32 bits en perso.

Capture_1.png
Je n'ai pas de problème au boulot sous Win 7 et MSO Pro 32 bits

Re Bise
A + à tous
 

Pièces jointes

  • Capture_1.png
    Capture_1.png
    13.7 KB · Affichages: 139
  • Capture_1.png
    Capture_1.png
    13.7 KB · Affichages: 137

chris

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Re

Pas testé sous Win 8 (juste testé Office 2013 où j'ai vu réapparaitre des bugs corrigés par les SP 2007 et 2010 !).

Sur mon PC j'ai W7 64, Office 32, Excel version 14.0.4760.1000.
Je sais que j'ai installé un service pack qui a corrigé certains bugs mais la mention du pack n'apparait pas...
 

Sebast

XLDnaute Impliqué
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Bonjour à toutes et à tous,

merci pour vos réponses si précises et fouillées.

Chris : je n'ai pas encore eu le temps de tester si ça marche ou bugge chez moi (j'utilise un fixe ancienne génération et un portable sous Windows 7). Etant loin d'être calé, je me suis concentré pour l'instant sur la solution de JCGL mais je vais m'y mettre.

JCGL : ça marche parfaitement et a le grand mérite d'être lisible et clair. J'avais pensé utiliser une solution de ce genre mais avec des select case. Ta proposition est efficace et simple car en utilisant le If Month(Date) < Month("01/02/" & Year(Date)) Then .PivotItems etc., on passe tous les cas de figure en revue (ce à quoi j'avais pensé aurait abouti à une usine à gaz ...)

Donc un grand merci JCGL : solution efficace, élégante et lisible.


En revanche, je n'arrive pas à boucler sur tous les onglets (pourtant, j'ai dupliqué mes TCD qui portent donc le même nom).
Mais comme il s'agit d'un autre problème, je vais poster ma question sous un intitulé explicite (voir le fil dans quelques instants "ma boucle ne balaie pas tous les onglets").

Encore merci à tous
 

youky(BJ)

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Bonjour à tous,
J'ai repris la macro de JCGL et fait une boucle sur les onglets ainsi que sur les PivotItem
Cela raccourci le code (revoir si besoin le code 3 To 11)
Bruno
Code:
Sub Test()
     Application.ScreenUpdating = 0
For onglet = 3 To 11
  With Sheets(onglet).PivotTables("Tableau croisé dynamique1").PivotFields("Mois")
    For k = 1 To 12
      .PivotItems(k).Visible = IIf(Month(Date) >= k, 1, 0)
    Next
  End With
 Next
     Application.ScreenUpdating = 1
 End Sub
 

JCGL

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Bonjour à tous,

Sébast : il faut rajouter dans chaque module de feuille ce petit bout de code :

Modules_Feuille.jpg

VB:
Option Explicit


Private Sub Worksheet_Activate()
Call Test
End Sub

La macro Test se lancera à l'activation de la feuille (j'ai inclus un Refresh dans le code Test).

A + à tous
 

Pièces jointes

  • Modules_Feuille.jpg
    Modules_Feuille.jpg
    21.7 KB · Affichages: 105
  • Modules_Feuille.jpg
    Modules_Feuille.jpg
    21.7 KB · Affichages: 103

JCGL

XLDnaute Barbatruc
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

Bonjour à tous,

Je t'indique où trouvé le module d'une feuille
Dans ce module tu déposes le petit bout de code (donc toutes les feuilles où se trouvent un TCD).

Test à déjà été déposé.

Si tu préfères le déposer une fois pour toutes et pour toutes les feuilles. Ceci dans le ThisWorkBook :

VB:
Option Explicit


Private Sub Workbook_SheetActivate(ByVal Feuille As Object)
    If Feuille.Name <> "Source" Then Call Test
End Sub

Prend soin d'enlever le code des modules de feuilles...

A + à tous
 

Sebast

XLDnaute Impliqué
Re : Sélectionner par VBA dans un TCD une période de janvier à un mois donné

re,

je ne suis plus sur l'ordi avec mes fichiers donc je ne peux pas tester mais je crois avoir pigé la démarche. Si je comprends bien, c'est une sorte de procédure événementielle à chaque fois qu'on accède aux feuilles.

Par ailleurs, n'existe-t-il pas une instruction qui testerait si la feuille contient un TCD et du coup, avec un test if ... endif, on exécute ou pas la suite du code ?

A +
 

Discussions similaires

Réponses
21
Affichages
826

Statistiques des forums

Discussions
314 655
Messages
2 111 601
Membres
111 216
dernier inscrit
mauphico