Ajouter des champs dans un tableau croisé dynamique

Résolu
SamGuelis Messages postés 5 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 25 juillet 2013 - 19 juil. 2013 à 15:05
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 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

9 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
25 juil. 2013 à 10:51
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
3
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
19 juil. 2013 à 15:34
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
0
SamGuelis Messages postés 5 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 25 juillet 2013
19 juil. 2013 à 15:56
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
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
19 juil. 2013 à 16:15
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SamGuelis Messages postés 5 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 25 juillet 2013
24 juil. 2013 à 23:23
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
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
24 juil. 2013 à 23:44
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
0
SamGuelis Messages postés 5 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 25 juillet 2013
25 juil. 2013 à 00:37
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
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
25 juil. 2013 à 01:11
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
0
SamGuelis Messages postés 5 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 25 juillet 2013
25 juil. 2013 à 08:47
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
0
Rejoignez-nous