Ajouter des champs dans un tableau croisé dynamique [Résolu]

SamGuelis 5 Messages postés mercredi 21 novembre 2012Date d'inscription 25 juillet 2013 Dernière intervention - 19 juil. 2013 à 15:05 - Dernière réponse : jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention
- 25 juil. 2013 à 10:51
Bonjour à Tous

Je rencontre un problème avec du code que j'ai récupéré que je dois modifier. La portion de code ci-dessous, en rouge, sort en erreur " Impossible de lire la propriété PivotFields de la classe PivotTable". De plus une portion de code similaire est exécutée avant sans sembler poser de problème. Or il me semble que PivotFields n'est pas une propriété mais une methode de la classe PivotTable (en tout cas dans la doc de Excel 2010). c'est Version10 qui est activé. je suis ehn Exccel 2010.

======
#If Version10 Then ' code récupéré
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
sdatasource).CreatePivotTable TableDestination:=slocate, TableName _
:=stablename, DefaultVersion:=xlPivotTableVersion10
#End If

#If Version14 Then 'code modifié pour 2010

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
sdatasource, Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:=slocate, TableName:= _
stablename, DefaultVersion:=xlPivotTableVersion14
#End If


ActiveSheet.PivotTables(stablename).AddFields RowFields:= _
Array(getNameOfConsoColumn, "Données")
iPos = 1
iCol1 = 6
iCol2 = 6
sPrefix = getPrefixForSumColumn
With ActiveSheet.PivotTables(stablename).PivotFields(getNameOfTotalColumn) ' Ajout de la colonne Total
.Orientation = xlDataField
.Caption = getNameOfTotalColumn_Plan
.Position = iPos
.Function = xlSum
End With
iPos = iPos + 1
iCol2 = iCol2 + 1
'Worksheets(iPosAfterDelete + 1).Activate
For iCol = dF.i1stMonth To dF.iLastMonth
sNameCol = CStr(Workbooks(dF.iWB).Worksheets(dF.iSh).Cells(dF.iHeadLig, iCol).Value)
If IsDate(sNameCol) Then
sNameCol = Format(sNameCol, "mmmm-yy")
End If
If sPrefix = "" Then
With ActiveSheet.PivotTables(stablename).PivotFields(sNameCol)
.Orientation = xlDataField
.Position = iPos
.Function = xlSum
End With
Else '!!!!!! Problème sur l'exécution de de l'intruction ci-dessous !!!!!!
With ActiveSheet.PivotTables(stablename).PivotFields(sNameCol)

.Orientation = xlDataField
.Caption = sPrefix + " " + sNameCol
.Position = iPos
.Function = xlSum
End With
==
J'ai beau regarder je ne vois pas où se situe le problème.

Merci pour votre aide.
Cordialement.

SamGuelis
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention - 25 juil. 2013 à 10:51
3
Merci
Il n'y a pas de quoi.

Pensez à "Clore" ce sujet ( Réponse ACCEPTEE )


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI

Merci jordane45 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de jordane45
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention - 19 juil. 2013 à 15:34
0
Merci
Bonjour,

Est ce que vous avez essayé d'executer le code en mode pas à pas pour vérifier que vos variables étaient correctement initialisées?
Par exemple: que vaut : "sNameCol" lorsque vous arrivez sur la ligne qui pose problème ?


[b]NB: /bLors de vos prochains messages, Merci d'utiliser les BALISES DE CODE.
exemple:
Sub test()

MsgBox ("balise de code")
End Sub




Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
SamGuelis 5 Messages postés mercredi 21 novembre 2012Date d'inscription 25 juillet 2013 Dernière intervention - 19 juil. 2013 à 15:56
0
Merci
Bonjour,

Merci pour le retour. la procédure étant un peu longue, j'ai extrait la partie qui me semblait significative. J'ai exécuté ce code en pas à pas et il semble fonctionner jusqu'à l'intruction en rouge qui plante. (sNamecol ="juil-13" quand j'arrive sur l'instruction).
En outre cette instruction exécutée un peu plus haut semble fonctionner fonctionne. La seule différence est que dans le cas où cela fonctionne c'est le retour d'une fonction est qui est passée à PivotFields, alors que dans le cas d'erreur on passe une variable initialisée
-----
With ActiveSheet.PivotTables(stablename).PivotFields(getNameOfTotalColumn) ' Ajout de la colonne Total
.Orientation = xlDataField
.Caption = getNameOfTotalColumn_Plan
.Position = iPos
.Function = xlSum
End With
------
j'ai peut-être trop la tête dans le guidon. je vais prendre un peu de recul; il y a vraisemblement quelque chose d'évident. De plus je débute un peu avec la génération des TBCD sous VBA. (:-()

SamGuelis
Commenter la réponse de SamGuelis
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention - 19 juil. 2013 à 16:15
0
Merci
Tu n'as toujours pas utilisé [b]les balises de CODE !!!!!/b

Sinon,
la différence est que dans le cas où cela fonctionne c'est le retour d'une fonction est qui est passée à PivotFields, alors que dans le cas d'erreur on passe une variable initialisée


-> Est-ce que les valeurs (dans les deux cas) sont identiques ou y'a t-il une différence ?
-> Est-ce que le "PivotField" existe dans ton TCD ? Est-il écrit strictement de la même manière ?



Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
SamGuelis 5 Messages postés mercredi 21 novembre 2012Date d'inscription 25 juillet 2013 Dernière intervention - 24 juil. 2013 à 23:23
0
Merci
Bonsoir
Après quelques recherches je pense avoir trouvé la cause du problème. Tes questions étaient les bonnes jordane45, merci. En effet l'appel
sNameCol = Format(sNameCol, "mmmm-yy") avec sNameCol= "1/07/2013, retourne un format différent de ce qui était dans le cache pour ce champ. Ex dans le cache il y avait "juil.-13" alors que après après appel à Format(sNameCol, "mmmm-yy") pour ce champ, sNameCol="Juillet-13".
D'ailleurs j'ai tracé la macro qui permet d'avoir "juil.-13" en formatant la cellule qui contient 1/07/2013. J'ai l'intruction: Selection.NumberFormat = "[$-40C]mmm-yy;@". Mais si j'appelle Format() en lui passant comme format "[$-40C]mmm-yy;@" sur cette date, j'obtiens comme date "juil-13" sans le point (.). Quelqu'un pourrait-il m'expliquer pour cette différence de résultat (avec et sans point)?
Merci.

SamGuelis
Commenter la réponse de SamGuelis
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention - 24 juil. 2013 à 23:44
0
Merci
j'ai tracé la macro qui permet d'avoir "juil.-13" en formatant la cellule qui contient 1/07/2013. J'ai l'intruction: Selection.NumberFormat = "[$-40C]mmm-yy;@". Mais si j'appelle Format() en lui passant comme format "[$-40C]mmm-yy;@" sur cette date, j'obtiens comme date "juil-13" sans le point (.)


Ce n'est pas très clair comme explication...
Je viens de faire le test, et j'obtiens bien la date sous le format
mmm.-yy

Sub test()
'---------------------------
' FORMATAGE DE LA CELLULE
'---------------------------
' en A1 : Date 01/07/2013
Range("A1").Select
' formatage de la cellule :
Selection.NumberFormat = "[$-40C]mmm-yy;@"
'la valeur  de la cellule est par contre toujours 01/07/2013
Debug.Print Range("A1").Value

'-----------------------
'meme chose mais en ne touchant pas au format de la date,
'juste la valeur retournée
'---------------------------
Dim date1 As Date
Dim DateFormate As String
date1 = "01/07/2013"
DateFormate = Format(date1, "mmm. yyyy")
Debug.Print DateFormate
End Sub



Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
SamGuelis 5 Messages postés mercredi 21 novembre 2012Date d'inscription 25 juillet 2013 Dernière intervention - 25 juil. 2013 à 00:37
0
Merci
Bonsoir
J'ai repris ta procédure
Sub test
End sub
en mettant 01/07/2013 dans la case A1. Après exécution de l'instruction:
Selection.NumberFormat = "[$-40C]mmm-yy;@"

la case A1 montre juil.-13 en se plaçant dans la cellule de la feuille, bien que dans la ligne fx on ait 01/07/2013; ce qu'affiche l'intruction debug.print Range("A1").value. D'où ma question.

SamGuelis
Commenter la réponse de SamGuelis
jordane45 22847 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 16 octobre 2018 Dernière intervention - 25 juil. 2013 à 01:11
0
Merci
le formatage des cellules ne correspond qu'à une "VUE"
La donnée à l'intérieur ne change pas.
Une date dans Excel est juste un Numéro de série ( exemple pour le 1 juillet 2013, Excel en fait prend comme valeur 41457 )
Ensuite, les différentes façons de l'afficher dd/mm/yyy , yyyy-mm-dd ..etc.. ne sont que des formes de "visualisation" de cette donnée.
C'est comme mettre un masque à quelqu'un : La vue qu'on a des cette personne est différente, mais c'est bien toujours la même en dessous


Va voir ce site : ICI

Quand vous entrez une date dans une cellule, Excel, s'il reconnaît la saisie comme un format valide, mémorise le Numéro de série correspondant et affiche la date correspondante selon le format par défaut. Tous les calculs seront effectués sur la base du Numéro de série et non du format.






Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
SamGuelis 5 Messages postés mercredi 21 novembre 2012Date d'inscription 25 juillet 2013 Dernière intervention - 25 juil. 2013 à 08:47
0
Merci
Bonjour
Merci. j'ai lu avec profit les explications et je suis en train de consulter le site conseillé. J'espère ainsi régler définitivement cet écueil rencontré. Encore merci.

SamGuelis
Commenter la réponse de SamGuelis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.