Macro-tcd

Celeda

XLDnaute Barbatruc
Bonjour,

J'utilise le code (du moins je m'arrache les cheveux pour y arriver!!lol) suivant pour tenter de créer un tcd par macro :

Code:
Sub PivotTableWIN()
Dim Adr As String 'Source
Dim Adr1 As String 'Destination
Dim PT As PivotTable


'Définir où sera copié le pivottable
With Worksheets("TCDWIN")
    Adr1 = .Name & "!" & .Range("A1").Address
    'Supprime l'ancien pivotcache
    .Range("A1").CurrentRegion.Delete (xlUp)
End With


With Worksheets("RPQ")
    'Définir où sont les données pour le pivotcache
    Adr = .Name & "!" & .Range("A4:Y" & _
        .Range("Y65536").End(xlUp).Row).Address


    'Création du PivotTable
   [B][COLOR="Red"] Set PT = ActiveWorkbook.PivotCaches.Add _
        (SourceType:=xlDatabase, SourceData:=Range(Adr)) _
        .CreatePivotTable(TableDestination:=Range(Adr1), _
        TableName:="TCDW", DefaultVersion:=xlPivotTableVersion10)[/COLOR][/B]
   With PT
        .AddFields RowFields:="LRU"
        .AddFields RowFields:="ACCEPTANCE"
        .PivotFields("TOTAL QUOTED in EURO").Orientation = xlDataField
    End With
End With


End Sub

La macro accroche à partir 'Création du PivotTable' cela devient tout jaune.
J'aimerai comprendre ce qui ne va pas car avec la macro ci-dessous :

Code:
 Create new TCD
    Range("F11").Select
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Feuil1!R4C1:R" & der_ligne & "C2").CreatePivotTable TableDestination:=Range("F11"), _
        TableName:="Tableau croisé dynamique1"

en dehors du fait que le TCD s'affiche sur la même page, la partie
"ActiveWorkbook...................:="Tableau croisé dynamique1"[/
fonctionne à la perfection!!!

Qu'est-ce qui cloche dans la création avec la première macro?; :(:(S V P -
M E R C I de bien vouloir m'expliquer parce que je commence à perdre ma raison.
 

MJ13

XLDnaute Barbatruc
Re : Macro-tcd

Bonjour Celeda

Le mieux serait peut-être de définir un nom pour ta BD.

ex:

Code:
Range("A1").Select
    Selection.CurrentRegion.Select
    ActiveWorkbook.Names.Add Name:="ForTCD2", RefersToR1C1:=Selection ' _
        "=Feuil1!R1C1:R10C5"
    'Sheets.Add
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "ForTCD2").CreatePivotTable TableDestination:="", TableName:= _
        "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
 

Celeda

XLDnaute Barbatruc
Re : Macro-tcd

Bonjour,

Merci MJ13 pour ton intérêt à mon problème mais il me semble que dans la première macro, le nom est défini par la variable :
Adr = .Name & "!" & .Range("A4:Y" & _
.Range("Y65536").End(xlUp).Row).Address

non ?
 

Pierrot93

XLDnaute Barbatruc
Re : Macro-tcd

Bonjour Celeda:), Michel:)

Perso, j'ai réussi à faire fonctionner ton code, en adaptant juste les noms de feuille, plage de données et noms de champs pour coller à ma base.... Mets peut être un tout petit fichier en pièce jointe représentant le problème posé...

Bon après midi
@+
 

Celeda

XLDnaute Barbatruc
Re : Macro-tcd

Bonjour,

tu as raison Pierrot... voici l'exemple.
dans le module 2 tu as la macro tcdwin
dans le module 1 tu as la macro exemple
Michel, j'ai placé dans la feuille, mais j'ai mes données qui sont sur d'autres réf.

Merci à tous les deux pour votre aide.
 

Pièces jointes

  • SUIVI-TCD.zip
    28.6 KB · Affichages: 33
  • SUIVI-TCD.zip
    28.6 KB · Affichages: 38
  • SUIVI-TCD.zip
    28.6 KB · Affichages: 43

MJ13

XLDnaute Barbatruc
Re : Macro-tcd

Re Celeda, bonjour Pierrot

Bon, je ne comprend pas grand chose à ta prose (je débute).

Mais en prenant exemple comme sur ce fichier ce sera peut être plus simple (enregistre les fichiers sur Ton C:\).

Lorsque tu fais des macros, essaye toujours de procéder pas à pas.

Tu crée ton TCD puis tu ajoutes des éléments. Evite aussi les gestions d'erreur si tu ne maîtrise pas trop (avec ton fichier, cela m'a suprimé des données sur ton fichier).

Sinon Pierrot, il va bien te le faire en 2 temps 3 mouvenements :).
 

Pièces jointes

  • TCD_Macro.xls
    32.5 KB · Affichages: 88
  • TCD_Macro.xlsm
    15.7 KB · Affichages: 63
  • TCD_Macro.xlsm
    15.7 KB · Affichages: 60
  • TCD_Macro.xlsm
    15.7 KB · Affichages: 57
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Macro-tcd

Re,

cette macro fonctionne toujours chez moi si je renseigne touts les en-têtes de colonne et ce jusqu'à la colonne Y, et si je change la lettre de la colonne sur laquelle se base le code pour déterminer la dernière ligne... une espace également en trop dans le nom de l'onglet "RPQ"...

Petite question idiote sans doute, pourquoi re-créer un TCD si il en existe déjà un sur la feuille, pourquoi ne pas "raffraichiir" celui existant...

@+
 

Celeda

XLDnaute Barbatruc
Re : Macro-tcd

Bonjour,

Merci Pierrot et Michel de votre implication dans mon petit souci et j'apprécie vos explications et suggestions : j'ai tenu compte de vos remarques et voici les résultats des tests :

1- vous trouverez dans le fichier ci-joint, les deux macros:

dans le module 11, la macro Sub Creation_TCDWIN() crée bien la feuille mais ne crée pas le TCD :

il me dit qu'il faut deux lignes pour créer un TCD (je le remercie mais je le savais lol!!) :j'ai changé la partie :

"Feuil1!R4C1:R" & der_ligne & "Y5") qui dans ma compréhension du code veut-dire :
R4= row4 ==> ma bd commence en ligne 4
C1= colonne 1==> ma bd commence en colonne A
"Y5"==>la dernière colonne de ma bd Y
mais je me trompe peut-être ?????
où est l'erreur ?

2- dans le module 2, la macro Sub PivotTableWIN(), bloque là-aussi sur la même erreur - voir l'imprim ecran - donc il y a quelque chose où dans la bd où dans la macro qu'il ne digére pas : mais quoi ???

Pour te répondre Pierrot : oui une fois le TCD crée, il suffira de l'actualiser et je le ferai mais le context actuel fait que je suis la seule à pratiquer le TCD et je dois en faire 5 ou 6 différents afin de permettre aux équipes d'appuyer sur un bouton et d'avoir les tcd dont ils ont besoin. Je mets en place un choix selon l'individu : cela s'appelle faire vraiment un menu à consulter!!!lol
En attendant, je les pousse à prendre des cours sur les TCDs........

Je vous remercie pour votre aide.
 

Pièces jointes

  • SUIVI-TCD.zip
    27 KB · Affichages: 27
  • PictureErreur1.gif
    PictureErreur1.gif
    14.2 KB · Affichages: 54
  • SUIVI-TCD.zip
    27 KB · Affichages: 31
  • SUIVI-TCD.zip
    27 KB · Affichages: 28

Pierrot93

XLDnaute Barbatruc
Re : Macro-tcd

Bonjour Celeda, Michel

regarde le code ci-dessous, fonctionne chez moi sous 2003...

Code:
Sub Creation_TCDWIN()
Dim ws As Worksheet, pc As PivotCache, TCD As PivotTable
Application.ScreenUpdating = False
Set ws = Worksheets.Add(after:=Sheets(Sheets.Count))
With Sheets("RPQ")
    Set pc = ThisWorkbook.PivotCaches.Add(xlDatabase, .Range("A4:Y" & .Range("A65536").End(xlUp).Row))
End With
Set TCD = pc.CreatePivotTable(ws.Range("A3"))
With ws.PivotTables(TCD.Name)
    .AddFields RowFields:="LRU"
    .AddFields RowFields:="ACCEPTANCE"
    .PivotFields("TOTAL QUOTED in EURO").Orientation = xlDataField
End With
End Sub

En espérant avoir bien compris ton problème...

bonne journée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Macro-tcd

Re,

Aarf, désolé... avais point vu, suis mal voyant... modifie comme suit :
Code:
Sub Creation_TCDWIN()
Dim ws As Worksheet, pc As PivotCache, TCD As PivotTable
Application.ScreenUpdating = False
Set ws = Worksheets.Add(after:=Sheets(Sheets.Count))
With Sheets("RPQ")
    Set pc = ThisWorkbook.PivotCaches.Add(xlDatabase, .Range("A4:Y" & .Range("A65536").End(xlUp).Row))
End With
Set TCD = pc.CreatePivotTable(ws.Range("A3"))
With TCD
    .PivotFields("LRU").Orientation = xlRowField
    .PivotFields("ACCEPTANCE").Orientation = xlRowField
    With .PivotFields("TOTAL QUOTED in EURO")
        .Orientation = xlDataField
        .Function = xlSum
    End With
End With
End Sub

@+
 

Pierrot93

XLDnaute Barbatruc
Re : Macro-tcd

Re,

une autre solution qui supprime le tcd précédent le cas échéant, si tu veux utiliser toujours la même feuille, en l'occurence "TCDWIN". A noter que l'on peu aisement boucler afin de vérifier qu'il n'y ait pas x tcd sur cette même feuille :

Code:
Sub test()
Dim ws As Worksheet, pc As PivotCache, TCD As PivotTable
Application.ScreenUpdating = False
Set ws = Sheets("TCDWIN")
With ws
    If .PivotTables.Count > 0 Then
        .PivotTables(1).TableRange2.Delete
    End If
End With
With Sheets("RPQ")
    Set pc = ThisWorkbook.PivotCaches.Add(xlDatabase, .Range("A4:Y" & .Range("A65536").End(xlUp).Row))
End With
Set TCD = pc.CreatePivotTable(ws.Range("A3"))
With TCD
    .PivotFields("LRU").Orientation = xlRowField
    .PivotFields("ACCEPTANCE").Orientation = xlRowField
    With .PivotFields("TOTAL QUOTED in EURO")
        .Orientation = xlDataField
        .Function = xlSum
    End With
End With
End Sub

@+
 

Celeda

XLDnaute Barbatruc
Re : Macro-tcd

Bonjour,

t'es un chou!!!Pierrot, merci beaucoup.

En lisant les codes, je m'aperçois qu'il faut absolument que j'apprenne les codes pour les TCDs. Jusqu'à présent, je préconisais la formule manuelle de construction mais je m'aperçois qu'avec les codes c'est plus rapide et dans mon cas d'équipes non détentrices de connaissances técédéennes, c'est plus simple.
Je vais m'y mettre et attends toi que je te requestionne....:):)
 

Discussions similaires

Réponses
1
Affichages
528

Statistiques des forums

Discussions
312 321
Messages
2 087 259
Membres
103 498
dernier inscrit
FAHDE