VBA - Modifier les critères de TCD en masse

La braise

XLDnaute Occasionnel
Bonjour à tous,

J'utilise une macro qui génère plusieurs fichiers à partir d'une base de données.
Chaque fichier est composé d'un onglet avec la base de données et de plusieurs onglets contenant chacun des TCD.

Je souhaite que chaque TCD soit pré-rempli avec certaines valeurs dans certains champs.
Valeur provenant de variables de ma macro.
(Ex. je veux que mon TCD affiche un Chiffre par mois uniquement pour l'année en cours.)

A l'heure actuelle j'utilise ce code qui fonctionne :
Code:
Sheets("Marché").Select
ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois"). _
            CurrentPage = Mois

L'inconvénient majeur est que je dois faire ça pour chaque onglet de chaque fichier.... (assez bof je sais... :D)

Chaque TCD de chaque onglet d'un fichier porte le même nom (ex. "Tableau croisé dynamique5").

Je travaille sur une formule du genre pour automatiser cette pré-configuration des TCD :
Code:
For Each Worksheet In ActiveWorkbook.Worksheets
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Année"). _
            CurrentPage = Année
Next Worksheet

ça marche mais uniquement pour le premier onglet!

Est-ce qu'il y a un problème dans mon code?

J'ai - pourtant - l'impression de lui demander pour :
"chaque onglet du fichier ouvert, de saisir la variable "Année" dans le champ "année" du TCD1".

D'avance merci pour votre aide (toujours aussi efficace!)

:D
 

Pierrot93

XLDnaute Barbatruc
Re : VBA - Modifier les critères de TCD en masse

Re La Braise

essaye comme suit :

Code:
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    ws.PivotTables("Tableau croisé dynamique5").PivotFields("Année"). _
            CurrentPage = Année
Next ws

attention tu utilisais "Worksheet" en tant que variable alors que c'est un objet vba... D'autre part, tu ciblais ActiveSheet, donc ta boucle ne servait pas à grand chose... enfin si j'ai tout bien compris...

@+
 

La braise

XLDnaute Occasionnel
Re : VBA - Modifier les critères de TCD en masse

Pierrot93, le fil,

Ok.
Dans une formule For each... le premier argument est forcement une variable?
c'est pour ça que dans les boucles sur worksheets, on passe toujours par
Code:
Dim ws As Worksheet
.
Bien noté! :D

Malheureusement, lorsque je teste ton code, j'ai en retour l'erreur suivante :
"Erreur 1004, la méthode 'PivotTables' de l'objet "_Worksheet' a échoué.

Un problème de syntaxe peut-être?

D'avance merci pour le temps passé à m'aider... :eek:
 

Pierrot93

XLDnaute Barbatruc
Re : VBA - Modifier les critères de TCD en masse

Re

le nom du TCD est le bon ? Si il y en a qu'un par feuille tu peux coder :

Code:
ws.PivotTables(1)").PivotFields("Année"). _
            CurrentPage = Année

je suppose que "Année" est une variable !!! est elle bien initialisée ? D'autre part éviter l'accentuation des nom de variable, préfère plutôt Annee par exemple...
@+
 

La braise

XLDnaute Occasionnel
Re : VBA - Modifier les critères de TCD en masse

Pierrot93, juste une petite dernière question... :)

J'ai le cas d'un fichier contenant plusieurs onglet, chaque onglet contenant plusieurs TCD qui ne portent pas le même nom...

Je souhaiterais modifier la (ta :)) formule actuelle :

Code:
For Each ws In ActiveWorkbook.Worksheets
    ws.PivotTables("Tableau croisé dynamique1").PivotFields("Année"). _
            CurrentPage = Année
Next ws

avec un Dim P as Pivottable et lui faire la modif non plus sur le TCD1 comme dans la formule mais sur "each p" contenu dans "each ws".

Un truc du genre...
Code:
For Each ws In ActiveWorkbook.Worksheets
For each p in ws
      ws.p.pivotfields("Année"). _
            CurrentPage = Année
next p
next ws

mais malheureusement VB n'aime pas trop mon ws.p :mad:

Existe-t'il une solution pour faire cela?

D'avance merci (encore...) pour ton aide... :D

PS : je suis en train de te construire une statue dans mon bureau... :)
 

Pierrot93

XLDnaute Barbatruc
Re : VBA - Modifier les critères de TCD en masse

Re

essaye comme suit :

Code:
Dim ws As Worksheet, p As PivotTable
For Each ws In ActiveWorkbook.Worksheets
    For Each p In ws.PivotTables
          ws.p.PivotFields("Année").CurrentPage = Ann[B][COLOR="Red"]e[/COLOR][/B]e
    Next p
Next ws

@+
 

La braise

XLDnaute Occasionnel
Re : VBA - Modifier les critères de TCD en masse

re

Malheureusement ça bloque toujours au même endroit...

"ws.p "

l'erreur remontée est "membre de méthode ou de données introuvable".

Je vais continuer mes investigations sur la question.

Merci beaucoup pour ton aide précieuse.

:)
 

Pierrot93

XLDnaute Barbatruc
Re : VBA - Modifier les critères de TCD en masse

Re,

Essayes en modifiant comme suit :

Code:
Dim ws As Worksheet, p As PivotTable, Annee As Integer
Annee = "2007"
For Each ws In ActiveWorkbook.Worksheets
    For Each p In ws.PivotTables
          p.PivotFields("Année").CurrentPage = Annee
    Next p
Next ws

@+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 329
Messages
2 087 335
Membres
103 520
dernier inscrit
Azise