[VBA] Récupérer nom des TCD

Fermé
poulain35 - 16 déc. 2010 à 09:13
 poulain35 - 16 déc. 2010 à 14:16
Bonjour ,

J'aimerai récupérer les noms de tous mes TCD dans mon classeur pour pouvoir y modifier leur source. Pour le moment j'ai ceci :

Sub tcd()
Dim NomTCD As String
Dim tcd As PivotTable
       Dim Pvt As PivotTable
    Dim Cible As String, NomFeuille As String
    Dim source As String
    Dim nombre As Integer, nombre1 As Integer
    Dim nom As String, nominv As String, nom1 As String, nominv1 As String
    
    'Définit le premier TCD de la feuille active
    Set Pvt = ActiveSheet.PivotTables(1)
    MsgBox Pvt
    'Extrait le nom de la feuille
    NomFeuille = Left(Pvt.SourceData, InStr(1, Pvt.SourceData, "!") - 1)

    'Pour gérer la version française d'Excel et remplacer le format xlL1C1 en xlR1C1.
    Cible = Mid(Pvt.SourceData, Len(NomFeuille) + 2)
    source = NomFeuille & "!" & Replace(Application.ConvertFormula( _
                Formula:=Cible, fromReferenceStyle:=xlR1C1, toReferenceStyle:=xlA1, toAbsolute:=xlAbsolute), "[" & ThisWorkbook.Name & "]", "")

    'compte les caracteres jusqu'au "."
    nombre = InStr(source, ".xls")
    
    'lit les caractere jusqu'au nombre trouver juste au dessus
    nom = Left(source, nombre)

    'inverse les caracteres
    nominv = StrReverse(source)

    'compte jusqu'au "!"
    nombre1 = InStr(nominv, "!")

    nominv1 = Left(nominv, nombre1)

    'réinverse les cactere
    nom1 = StrReverse(nominv1)
    'garde le nom du tableau sélectionner auparavant pour changer son lien en-dessous
    NomTCD = Pvt.Name

ActiveSheet.PivotTables(NomTCD).ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=nom & "xlsm" & nom1, Version:=xlPivotTableVersion12)
ActiveWindow.SmallScroll Down:=-21


End Sub


Ca fonctionne mais je doit choisir le TCD à modifier:
Set Pvt = ActiveSheet.PivotTables(1)

Mais j'aimerai qu'il me fasse ceci pour tous les TCD automatiquement, donc il faut que je trouve les noms de mes TCD, les mettent dans une variable et fasse une boucle sur mon code mais je ne sait pas comment faire. Sachant que les nom des TCD peuvent changer et il peut y en avoir 1 ou 2 ou 3... dans mon classeur. Car plusieur classeur seront passé en revue.

Merci d'avance.


2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
16 déc. 2010 à 12:04
Bonjour

Essaie une boucle :

For Each Pvt in ActiveSheet.PivotTables
   ....
   ....
Next Pvt


Patrice
0
parfait! (y) merciii
0