macro TCD: impossible lire propriété PivotTable de la classe WorkSheet - VB/VBA/VBS - Programmation
Marsh Posté le 02-02-2011 à 16:48:51
Salut,sans le fichier lui même difficile de faire qqch, si 2007 voir http://silkyroad.developpez.com/excel/tcd/
sinon voir la FAQ http://excel.developpez.com/faq/?page=TCD
Marsh Posté le 02-02-2011 à 17:08:29
kiki29 a écrit : Salut,sans le fichier lui même difficile de faire qqch, si 2007 voir http://silkyroad.developpez.com/excel/tcd/ |
Merci kiki mais j'ai fait des tonnes de recherche sur google et divers forum et suis tombé (entre autres, avec pas mal d'autres) sur ces pages qui ne répondent malheureusement pas à mon problème.
C'est en désespoir de cause et après avoir tenté 36000 manip toutes aussi infructueuses que j'en viens à poster ici.
A noter qu'en manuel avec l'enregistreur de macro, j'aboutissais à un code beaucoup plus lourd et que je me suis donc contentée de :
1) le simplifier avec des "with / end with"
2) modifier ma plage de données pour qu'elle soit dynamique via mon Range("PlageDonnees" )
Je mettrai bien mon fichier en pj mais je vois pas comment... C'est possible ? J'ai vu aucun post avec fichier joint
NB : j'utilise office 2007... mais mon fichier est en excel 2003 (.xls et non .xlsx) car il doit impérativement être utilisable sur machine en office 2003, est-ce que cela pourrait avoir un lien avec mon problème ?
J'avoue que je vois pas bien pourquoi dans la mesure où je n'ai aucune mise en forme dans ni dans mon tableau source, ni dans mon tableau croisé dynamique, ZERO formules (on est vraiment sur de la base de données pure et simple destinée à rester cachée !) et donc rien à ma connaissance susceptible de faire un bug de compatibilité
Marsh Posté le 02-02-2011 à 18:27:22
ReplyMarsh Posté le 03-02-2011 à 09:39:39
kiki29 a écrit : Re,pour poster ton fichier tu as http://cjoint.com/ |
Merci !
Alors le voici :
http://cjoint.com/?3cdjDzTmGuP
La macro qui pose problème ("CreationTCD" dans le module "Tableau Croisé Dynamique" ) se lance lorsque l'on clique sur le bouton "préparer l'analyse" du menu principal.
J'ai essayé de virer le maximum de truc inutile (userform des autres boutons du menu entre autre) mais laissé les éléments qui se lancent automatiquement AVANT cette macro (notamment situés dans le module "CalculsDansSynthese" ) au cas où cela aurait un lien avec l'erreur.
Merci pour vos pistes de solutions...
Marsh Posté le 07-02-2011 à 15:56:01
J'ai finalement trouvé la solution à mon problème !
La voici et c'est d'une (étonnante) simplicité :
With Sheets("Analyse" ).PivotTables("Tableau croisé dynamique1" )
With .PivotFields
.Item("Date" ).Orientation = xlDataField
End with
End With
remplace la ligne qui buggait :
Sheets("Analyse" ).PivotTables("Tableau croisé dynamique1" ).AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Date" ), "Nombre de Date", xlCount
A noter que je n'ai pas besoin de préciser le "xlCount" et le "Nombre de Date" car c'est ce qu'excel fait par défaut !
J'avoue que la capacité de l'enregistreur de macro a compliquer les choses me perturbe encore un peu mais je suis contente de pouvoir passer à autre chose !
Marsh Posté le 02-02-2011 à 15:51:07
Bonjour,
Je débute en VBA et je dois créer une macro permettant de faire un TCD.
Ci-dessous mon bout de code (désolé pour la longueur).
La première partie de ma macro fonctionne très bien et le TCD se crée, avec les différents filtres demandés mais bloque environ 9 fois sur 10
(ce n'est pas systématique, mais pourtant je ne fais rien et je ne change pas les conditions initiales : je lance la macro en pas à pas, elle bloque, je rappuie sur F8 et parfois, elle marche sans que j'ai touché au code !)
Le blocage est toujours au même endroit, lors de l'ajout des données DANS le tableau, avec .AddDataField (en rouge, dernière ligne de mon code) et le message toujours identique "impossible de lire la propriété PivotTable de la classe WorkSheet".
Merci d'avance pour votre aide, parce que là, je m'arrache les cheveux depuis plusieurs jours sur le problème...
Marie
'création du tableau croisé dynamique à partir de la plage définie, placement en cellule A4 (R4C1) et nommage du tableau ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Range("PlageDonnees" )).CreatePivotTable TableDestination:="Analyse!R4C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
'définition des champs et filtres du tableau croisé dynamique
With Sheets("Analyse" ).PivotTables("Tableau croisé dynamique1" )
'ajout des filtres de date (en page)
With .PivotFields("année" )
.Orientation = xlPageField 'filtre de page
.Position = 1 'sur la 1ère ligne
.EnableMultiplePageItems = True
End With
With .PivotFields("trimestre" )
.Orientation = xlPageField 'filtre de page
.Position = 2 'sur la 2ème ligne
.EnableMultiplePageItems = True
End With
With .PivotFields("mois" )
.Orientation = xlPageField 'filtre de page
.Position = 3 'sur la 3ème ligne
.EnableMultiplePageItems = True
End With
'ajout du filtre par DE en ligne (1ère colonne)
With .PivotFields("DE" )
.Orientation = xlRowField 'filtre en ligne
.Position = 1 'sur la 1ère colonne
.EnableMultiplePageItems = True 'permet de cocher plusieurs DE en même temps (pour regrouper les DE par exemple)
End With
'ajout du filtre par agence en ligne (2ème colonne)
With .PivotFields("Agence" )
.Orientation = xlRowField 'filtre en ligne
.Position = 2 'sur la 2ème colonne
.EnableMultiplePageItems = True 'permet de cocher plusieurs agences en même temps (pour regrouper les agences par DE par exemple)
End With
'ajout du filtre par RS en colonne (1ère ligne)
With .PivotFields("Nom du RS" )
.Orientation = xlColumnField
.Position = 1
.EnableMultiplePageItems = True 'permet de cocher plusieurs RS en même temps
End With
'ajout du filtre par site en colonne (2ème ligne)
With .PivotFields("Code site" )
.Orientation = xlColumnField
.Position = 2
.EnableMultiplePageItems = True 'permet de cocher plusieurs sites en même temps
End With
End With
'ajout des données (nombre de date d'audit par site et par RS fait sur la période)
Sheets("Analyse" ).PivotTables("Tableau croisé dynamique1" ).AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Date" ), "Nombre de Date", xlCount
Message édité par MarieDB1 le 02-02-2011 à 17:13:19