XL 2013 VBA - changer la BDD d'un TCD

Pauliakov

XLDnaute Nouveau
Bonjour à tous,

J'éprouve actuellement une difficulté sur VBA. En effet par une macro, je renseigne dans X onglets des données. Chaque X feuille à exactement la même présentation et seulement les données entre A3 et N380 changent.

Je souhaite que chaque onglet ait son propre TCD.
Partant d'un modèle de base qui est ensuite dupliqué, mon premier TCD a pour données "Modèle!A3:N380"

Quand ma macro duplique l'onglet pour y mettre les données, le TDC de l'onglet A a donc pour données "Modèle!A3:N380"

Mais je souhaite qu'il est pour données "A!A3:N380"


J'ai essayé d'intégrer à ma macro ces choses :

Code:
Set TDC = Range("A3:N380")
.PivotTables("Tableau croisé dynamique1").SourceData = TDC

Et même en écrivant en R1C1 mais rien à faire
R3C1:R380C14

Code:
.PivotTables(1).SourceData = R3C1:R380C14
'Je n'ai q'un TCD dans mon onglet à chaque fois

Mais rien y fait, à chaque fois les onglets n'ont pas les bonnes données.

Et vu que la macro génère plus de 90 onglets à chaque fois, les faire un par un ... Ça me laisse perplexe :D
 

Pauliakov

XLDnaute Nouveau
Bonjour,

C'est assez difficile pour moi car le document a beaucoup de données confidentielles. Je vous en fais un avec des fausses données.

EDIT :

Ci-joint un fichier vierge de données. Le but est que le TCD en bas de chaque page est pour données A3:N380 de la page sur laquelle il se trouve.

Les 3 macros sont en pièce jointe, mais si on suit la logique de ma macro, le TCD doit se faire à la fin de la Macro Sub_Maj
 

Pièces jointes

  • Test.xlsm
    170.2 KB · Affichages: 17
Dernière édition:

kingfadhel

XLDnaute Impliqué
Re,
voila ton bonheur, j'éspère.
"""""testé chez moi""""""
VB:
Sub Copie_MAJ_TCD()
    Dim kingfadhel As Worksheet
    Sheets("Feuil1").Copy After:=Sheets(Sheets.Count)
    Set kingfadhel = ActiveSheet
    kingfadhel.Name = Sheets.Count
    ActiveSheet.PivotTables("Tableau croisé dynamique1").ChangePivotCache _
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        Sheets.Count & "!R3C1:R380C14" _
        , Version:=6)
End Sub
 
Dernière édition:

Pauliakov

XLDnaute Nouveau
Bonsoir,

Merci pour votre réponse mais je ne comprends pas plusieurs choses :

Dans votre code vous indiquez R3C1:R380C14 mais je ne comprends pas à quoi il correspond car je pensais que c'était pour A3:N380.

Pareil pour cette partie là
Code:
 Dim kingfadhel As Worksheet
    Sheets("Feuil1").Copy After:=Sheets(Sheets.Count)
    Set kingfadhel = ActiveSheet
    test.Name = Sheets.Count

Je ne comprends pas son intérêt
 

kingfadhel

XLDnaute Impliqué
Re,
pour R3C1:R380C14 = A3:N380
R1C1 ==> Row (3) Colonne (1) ==== A3
R380C14 ==> Row(380) Colonne(14)

pour la partie du code :
Sheets("Feuil1").Copy After:=Sheets(Sheets.Count) ==> copier de la feuil1 à la dernière position
Set kingfadhel = ActiveSheet
kingfadhel.Name = Sheets.Count ===> renommer la feuille nouvellement créer par le nombre des feuilles
 

kingfadhel

XLDnaute Impliqué
Re,
Si j'ai bien compris c'est ce que tu veux.

fichier Excel joint avec modification (image 2 : code)

Capture pauliakov.PNG

Pauliakov2.PNG
 

Pièces jointes

  • Test (2).xlsm
    170.4 KB · Affichages: 22
Dernière édition:

Pauliakov

XLDnaute Nouveau
Re-bonsoir,

En fait c'est ok j'ai réussi à adapter dans ma boucle le morceau de macro !

Ci-joint pour les intéressés

Sheets("A").PivotTables("Tableau croisé dynamique1").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"R3C1:R380C14" _
, Version:=6)


Encore merci :)
 

Pauliakov

XLDnaute Nouveau
Non en fait c'est mon écriture j'ai mis feuille A mais j'ai une variable sur les feuilles qui s'appellent fournisseur

Donc voici la bonne écriture pour la personne qui souhaite utiliser la macro
Code:
Sheets(Variable).PivotTables("Tableau croisé dynamique1").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"R3C1:R380C14" _
, Version:=6)
 

kingfadhel

XLDnaute Impliqué
Non en fait c'est mon écriture j'ai mis feuille A mais j'ai une variable sur les feuilles qui s'appellent fournisseur

Donc voici la bonne écriture pour la personne qui souhaite utiliser la macro
Code:
Sheets(Variable).PivotTables("Tableau croisé dynamique1").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"R3C1:R380C14" _
, Version:=6)

C'est ça.
ou bien dans la boucle comme dans la capture 2 du fil #8
 

Discussions similaires

Réponses
12
Affichages
227

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 810
dernier inscrit
mohammedaminelahbali