Boucle pour trouver TCD dans toutes les feuilles

Egruat

XLDnaute Occasionnel
Bonjour,

Je souhaiterai faire une boucle pour trouver tous les tableaux croisés dynamiques (TCD) dans toutes les feuilles de mon classeur et ainsi définir pour chaque TCD une source de données. Voici ce que j'ai fait mais cela ne fonctionne pas:

x = PivotTable
Ws = Worksheet
For Each x In Ws
Set xx = ActiveWorkbook.Worksheets("Ws").PivotTables(1)
xx.PivotTableWizard SourceType:=xlDatabase, SourceData:="[" & Range("filename").Value & "]datainput!data", tablename:="BaseData"
Next x

Pourriez-vous m'aider ?

Cordialement.
 

Pierrot93

XLDnaute Barbatruc
Re : Boucle pour trouver TCD dans toutes les feuilles

Bonjour,

regarde peut être le code ci-dessous, reste à déteminer les plages de cellules...
Code:
Sub test()
Dim ws As Worksheet, pt As PivotTable, maplage As Range
For Each ws In Worksheets
    For Each pt In ws.PivotTables
        pt.SourceData = maplage.AddressLocal(xlR1C1, external:=True)
    Next pt
Next ws
End Sub

bon après midi
@+
 

Egruat

XLDnaute Occasionnel
Re : Boucle pour trouver TCD dans toutes les feuilles

Bonjour et merci.
Je ne comprends pas la variable "maplage" et la fonction AddressLocal.
En fait, sur la feuille "Base" de mon classeur, j'ai défini la cellule A2 comme un champ dont le nom est "Filename" et je souhaiterai que tous mes TCD dans toutes mes feuilles prennent comme base de donnée le champ "Filename" en y ajoutant "data" pour que le fichier de référence soit considéré comme une base de donnée.
 

Pierrot93

XLDnaute Barbatruc
Re : Boucle pour trouver TCD dans toutes les feuilles

Re,

si "filename" est une plage nommée :
Code:
Sub test()
Dim ws As Worksheet, pt As PivotTable
For Each ws In Worksheets
    For Each pt In ws.PivotTables
        pt.SourceData = Range("filename").AddressLocal(ReferenceStyle:=xlR1C1, external:=True)
    Next pt
Next ws
End Sub

comprends pas ceci :
en y ajoutant "data" pour que le fichier de référence soit considéré comme une base de donnée.

Edition : j'ai rajouté le 1er argument manquant...
 
Dernière édition:

Egruat

XLDnaute Occasionnel
Re : Boucle pour trouver TCD dans toutes les feuilles

Pour qu'un fichier excel puisse être considéré comme une base de donnée pour un TCD, il faut ajouter au nom data; par exemple:

Si le fichier est Donnees du marché.xls, la référence de la base de donnée à partir de ce fichier sera:
Donnees du marché.xls!data

Ainsi j'ai mis:
Set xx = ActiveWorkbook.Worksheets("Ws").PivotTables(1)
xx.PivotTableWizard SourceType:=xlDatabase, SourceData:="[" & Range("filename").Value & "]datainput!data", tablename:="BaseData"

Ta formule bloque sur la ligne : For Each PT In PivotTables
 

Pierrot93

XLDnaute Barbatruc
Re : Boucle pour trouver TCD dans toutes les feuilles

Re,

ceci fonctionne chez moi, si classeur source ouvert :
Code:
Sub test()
Dim ws As Worksheet, pt As PivotTable
For Each ws In Worksheets
    For Each pt In ws.PivotTables
        pt.SourceData = "NomClasseur.xls!=NomPlage"
    Next pt
Next ws
End Sub
 

Egruat

XLDnaute Occasionnel
Re : Boucle pour trouver TCD dans toutes les feuilles

Ok merci, maintenant les deux boucles marchent. En revanche le fichier source n'est pas ouvert et c'est pourquoi je voudrais utiliser la formule:
Set xx = ActiveWorkbook.Worksheets("Ws").PivotTables(X)
xx.PivotTableWizard SourceType:=xlDatabase, SourceData:="[" & Range("filename").Value & "]datainput!data", tablename:="BaseData"
Malheureusement la 1ère ligne bloque et je ne sais pas pourquoi...
 

Pierrot93

XLDnaute Barbatruc
Re : Boucle pour trouver TCD dans toutes les feuilles

Bonjour,

si le classeur source est fermé, attention la plage nommée doit faire référence à des cellules, non être déterminée par une formule :

Code:
Dim ws As Worksheet, pt As PivotTable
For Each ws In Worksheets
    For Each pt In ws.PivotTables
        pt.SourceData = "'C:\MesDoc\Excel\Test\[MaSource.xls]'!plageTCD"
    Next pt
Next ws

bonne journée
@+
 

Discussions similaires

Réponses
1
Affichages
1 K
Compte Supprimé 979
C

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 099
Membres
103 116
dernier inscrit
kutobi87