Boucler plusieurs TCD sur une même feuille

Egruat

XLDnaute Occasionnel
Bonjour,

Je fais une macro pour changer le nom de tous les TCD sur toutes les feuilles de mon classeurs. J'ai un problème
car certaines feuilles ont 1 seul TCD et d'autres plusieurs. Je n'arrive pas à boucler correctement les TCD pour qu'il puissent tous changer de nom.

Quelqu'un peut-il m'aider ? Merci par avance.

Très cordialement.


ub Test()

Application.ScreenUpdating = False

'On Error GoTo Erreur

Dim Ws As Worksheet

P = Range("F3").Value
Y = Range("F5").Value
M = Range("F7").Value


For Each Ws In Worksheets

' Sélection du SRS de référence

' Sélection du SRS en fonction des champs remplis dans le questionnaire

If M < 10 Then

MsgBox ("'C:\dossier\20" & Y & "\" & P & "\dossier" & P & "0" & M & Y & B & ".xls'!data")

ActiveSheet.PivotTables(1).ChangePivotCache ActiveWorkbook.PivotCaches. _
Create(SourceType:=xlDatabase, SourceData:= _
"'C:\dossier\20" & Y & "\" & P & "dossier" & P & "0" & M & Y & B & ".xls'!data")
Else
ActiveSheet.PivotTables(1).ChangePivotCache ActiveWorkbook.PivotCaches. _
Create(SourceType:=xlDatabase, SourceData:= _
"'C:\dossier\20" & Y & "\" & P & "\dossier" & P & M & Y & B & ".xls'!data", Version:=xlPivotTableVersion10)
End If

Else

End If

Next Ws

Worksheets("Par client").Select
Range("F4").Select
Selection.End(xlToRight).Select



Exit Sub
'
'Erreur:
'MsgBox ("Votre SRS de référence n'existe pas. Recommencer")
'Worksheets("Initial").Select

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Boucler plusieurs TCD sur une même feuille

Bonjour,

pour boucler sur tous les tcd de toutes les feuilles d'un classeur :
Code:
Dim ws As Worksheet, pt As PivotTable
For Each ws In Worksheets
    For Each pt In ws.PivotTables
         
    Next pt
Next ws
bon après midi
@+
 

Egruat

XLDnaute Occasionnel
Re : Boucler plusieurs TCD sur une même feuille

Désolé mais ça ne marche pas car sur une même feuille il y a plusieurs TCD et les Pivotables ne peuvent pas porter le même nom. Il faudrait donc faire une boucle avec i pour nom de la Pivotable, mais je bloque...


ActiveSheet.PivotTables(i).ChangePivotCache...
 

Pierrot93

XLDnaute Barbatruc
Re : Boucler plusieurs TCD sur une même feuille

Re,

Désolé mais ça ne marche pas car sur une même feuille il y a plusieurs TCD et les Pivotables ne peuvent pas porter le même nom. Il faudrait donc faire une boucle

bah... c'est bien ce que fait le code proposé..... l'as tu testé ?
Code:
Dim ws As Worksheet, pt As PivotTable
For Each ws In Worksheets
    For Each pt In ws.PivotTables
         MsgBox pt.Name
    Next pt
Next ws
 

Egruat

XLDnaute Occasionnel
Re : Boucler plusieurs TCD sur une même feuille

Oui et malheureusement cela ne fonctionne pas.
1) je n'ai plus de message d'erreur
2) mais si j'ai plusieurs TCd sur une même feuill, le 1er est modifié mais pas le 2ème. Il me semble que je doive mettre en boucle cela (avec i comme variable) ?

ActiveSheet.PivotTables(i).ChangePivotCache ActiveWorkbook.PivotCaches. _
Create(SourceType:=xlDatabase, SourceData:= _
"'C:\dossier\20" & Y & "\" & P & "\dossier" & P & "0" & M & Y & B & ".xls'!data")
 

Egruat

XLDnaute Occasionnel
Re : Boucler plusieurs TCD sur une même feuille

Merci bien Pierrot, ca marche très bien !!
J'aimerai bien comprendre et je me permets de te demander pourquoi la variable "pt" remplace le code
"ActiveSheet.PivotTables(i).ChangePivotCache ActiveWorkbook.PivotCaches. _
Create(SourceType:=xlDatabase, " ?

Je comprends que "pt" puisse remplacer "ActiveSheet.PivotTables(i)" mais pas "ChangePivotCache ActiveWorkbook.PivotCaches. _
Create(SourceType:=xlDatabase, " ?
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa