Macro - TCD à plage variable

N

Nico

Guest
Re-bonjour :)

Suite à la résolution rapide et efficace de mon précédent problème, je me tourne à nouveau vers vous, pour lever le dernier obstacle au bon fonctionnement de mon projet.

Je précise que j'utilise la version 2003 d'Excel. Par conséquent les macros (concernant les TCD) créées sous 2000 ne fonctionnent pas.

Lorsque je crée une macro pour l'élaboration d'un TCD à plage fixe, j'ai ceci :

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
''Historique relations clients'!R3C1:R44C5').CreatePivotTable TableDestination _
:=''[Projet VBA - 15-12.xls]TCD - Analyse clientèle'!R3C3', TableName:= _
'Tableau croisé dynamique1', DefaultVersion:=xlPivotTableVersion10

Maintenant, pour un TCD à plage variable j'ai tenté ceci:

Range('A3').CurrentRegion.Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
Selection).CreatePivotTable TableDestination _
:=''[Projet VBA - 15-12.xls]TCD - Analyse clientèle'!R3C3', TableName:= _
'Tableau croisé dynamique1', DefaultVersion:=xlPivotTableVersion10

Et ceci:

dim lastrow
lastrow = range('A3').end(xldown).row
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
''Historique relations clients'!R3C1:R' & lastrow & 'C5').CreatePivotTable TableDestination _
:=''[Projet VBA - 15-12.xls]TCD - Analyse clientèle'!R3C3', TableName:= _
'Tableau croisé dynamique1', DefaultVersion:=xlPivotTableVersion10

Dans les 2 derniers cas j'ai droit au message d'erreur : 'Erreur d'éxécution '1004'. Impossible de lire la propriété PivotTables de la classe WorkSheet.'

Pouvez-vous m'aider? :)
 

Luki

XLDnaute Accro
Re à vous deux,

Bon, débuggage vraiment difficile entre 2000 et 2003, pas mal d'arguments et de méthodes différents.

Dan, vois ce que tu peux faire, ce n'est pas l'idéal de corriger une macro de ce type enregistrée! C'est peut être plus simple de refaire le truc. Mais je n'ai pas le temps de le faire ce soir.

Désolé Nico de ne pouvoir faire plus aujourdhui.:(
 

Dan

XLDnaute Barbatruc
RE,

Nico, utilise les macros ci-dessous pour constituer ton TCD.

1. Constitution du TCD - le TCD est constitué tel que tu l'as mis dans ton fichier
Code:
Sub TCD1()
'Macro par DAN pour Nico
'http://www.excel-downloads.com/forums/2-111197-macro-tcd-a-plage-variable.htm
'Commande par CTRL + t
'
Application.ScreenUpdating = False
Sheets('Historique relations client').Activate
Set Maplage = Range('A3').CurrentRegion
Maplage.Name = 'TCD'
Sheets('TCD - Analyse clientèle').Activate
Call efface
    With ActiveSheet
        .PivotTableWizard SourceType:=xlDatabase, SourceData:='TCD', TableDestination:='R1C1', TableName:='TCD1'
        .PivotTables('TCD1').SmallGrid = False
        .PivotTables('TCD1').AddFields RowFields:='Numéro' & vbLf & 'client', ColumnFields:=Array('Type événement', 'Suite donnée')
        .PivotTables('TCD1').PivotFields('Type événement').Orientation = xlDataField
    End With
    With Application
        .CommandBars('PivotTable').Visible = False
        .ScreenUpdating = False
    End With
End Sub
Tu peux rajouter un raccourci clavier en allant dans le menu d'excel / outils / macro / macro, sélectionne la macro TCD1 et clique sur le bouton 'options' pour ajouter 't' dans la rubrique prévue.

2. Effacement des données - effacement des données avant de refaire ton TCD
Code:
Sub Efface()
'Macro par DAN pour Nico
'http://www.excel-downloads.com/forums/2-111197-macro-tcd-a-plage-variable.htm
Cells.Select
Selection.Clear
End Sub
3. Constitution du TCD2
A partir du moment où ton TCD1 est réalisé tu peux aussi faire celui-ci.
Code:
Sub TCD2()
'Macro par DAN pour Nico
'http://www.excel-downloads.com/forums/2-111197-macro-tcd-a-plage-variable.htm
'Commande par CTRL + y

Application.ScreenUpdating = False
Sheets('TCD - Analyse clientèle').Activate
    With ActiveSheet.PivotTables('TCD1').PivotFields('Type événement')
        .Orientation = xlPageField
        .Position = 1
    End With
Application.ScreenUpdating = True
End Sub

Tu peux aussi rajouter un raccourci clavier en allant dans le menu d'excel / outils / macro / macro, sélectionne la macro TCD1 et clique sur le bouton 'options' pour ajouter 'y' dans la rubrique prévue.

Pour exécuter tes macros, utilise maintenant les raccourcis clavier CTRL + t puis en option CTRL + y

Si pb n'hésite pas

;)

Edition - 28/12/05: amendement de la macro reprise au point 2.

Message édité par: Dan, à: 28/12/2005 12:10
 
N

Nico

Guest
Waouh nickel, ça fonctionne à merveille! :woohoo:

Merci beaucoup ;)

Par contre, j'ai fait quelques petites 'modifications'; j'ai remplacé le 'Call efface' par un
Range('C:C','M:M').Select
Selection.Clear

car chez moi, je n'ai pas de macro appelée 'efface' ;)

Je n'ai par contre, pas utilisé la 2nde macro que tu me proposes pour réaliser un autre TCD; grâce à tes prouesses, toutes les données dont j'ai besoin sont contenues dans le 1er :)

Encore une fois, merci beaucoup!
 

Rep

XLDnaute Junior
Me revoilà, cette fois-ci en tant qu'inscrit! :)

Vous m'avez donné goût à Excel, et le site me plaît; j'ai donc décider de m'inscrire pour parfaire mes connaissances et apporter, plus tard, mon aide, lorsque j'aurai un niveau plus convenable!

A bientôt ;)
 

Discussions similaires

Réponses
1
Affichages
527

Statistiques des forums

Discussions
312 294
Messages
2 086 894
Membres
103 404
dernier inscrit
sultan87