Tableau croisé dynamique + macro

ntesenforce

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur le forum et j'ai choisi de soumettre mon problème car il me semble qu'il y a beaucoup de personnes très compétentes sur ce forum.

Alors j'ai essayé pendant un long moment mais je n'y arrive pas, mon niveau de VBA est moyen, je me débrouille et je tatonne beaucoup.

Mon problème :

Je dois sortir des résultats hebdos sur un fichier excel et les présenter dans un tableau présentant l'historique des 5 dernières semaines et un graphique avec l'historique des 4 dernières semaines.

J'ai choisi l'option de tableaux croisés et graphiques dynamiques. En tout ca m'en fait 8 de chaque à mettre à jour chaque semaine, c'est à dire que je dois décocher la semaine -5 (ou -4) et cocher la semaine 0 dans chacun des tableaux et graphiques. Je voudrais donc faire une macro qui me permet de faire cette manip automatiquement.

Voici la macro actuellement qui ne fonctionne pas :

Reponse = INPUTBOX("Entrez votre prénom")
Cells(21, 21).Value = Reponse
Cells(21, 22).Value = Reponse - 100
With ActiveSheet.PivotTables("PivotTable16").PivotFields("WEEK")
Cells(21, 21).Value = Reponse
Cells(21, 22).Value = Reponse - 500
.PivotItems(Cells(21, 22).Value).Visible = False
.PivotItems(Cells(21, 21).Value).Visible = True
End With


J'ai opté pour une boîte de dialogue dans laquelle j'indique la semaine en cours (sous le format 2309 (SSAA / semaineannée)). Puis je mets ce chiffre dans une case, je prends une autre case et je lui ôte 500. Ensuite je prends mon tableau croisé dynamique et je sélectionne l'item que je décoche et celui que je coche. Cependant je n'arrive pas à faire prendre conscience au Pivotitem que Cells(21, 22).Value est une valeur. (du moins je crois que c'est le soucis).

Je suis preneur de toute aide, que ce soit pour proposer une autre solution qu'une inputbox (je ne peux pas revenir sur le tableau croisé) ou tout simplement m'apporter la solution complète...

Je vous remercie par avance.

Bonne journée

Steven

P.S.: dans le cas où je n'aurais pas été très clair, n'hésitez pas à me le signaler.
 

dixit

XLDnaute Impliqué
Re : Tableau croisé dynamique + macro

bonjour, et bienvenue sur le forum

inputbox retourne une chaîne et non un nombre ; il faut donc convertir la chaîne en nombre.
Cells(21, 22).Value = val(Reponse)-100 ou Cint(reponse)-100 pour un nombre entier, Csng pour single, CLng pour long, CDbl pour long
bonne journée
 
Dernière édition:

ntesenforce

XLDnaute Nouveau
Re : Tableau croisé dynamique + macro

Bonjour Dixit,

Merci beaucoup pour la réponse !

J'ai essayé la technique conseillée (voir macro ci dessous). Mais la macro plante dès la ligne "Range(O1).Value = Val(reponse)"...
Je ne vois pas ce qui cloche. (j'ai essayé avec Celles (1,1) et Range (O1) mais rien...
Y a-t-il encore quelque chose qui cloche ?


Sheets("NORD_Résultat Hebdo").Select
reponse = INPUTBOX("Entrer la semaine en cours (SSAA)")
Range(O1).Value = Val(reponse)
Range(O2).Value = Val(reponse - 500)
Range(O3).Value = Val(reponse - 400)
With ActiveSheet.PivotTables("PivotTable1").PivotFields("WEEK")
.PivotItems(Range(O2).Value).Visible = False
.PivotItems(Range(O1).Value).Visible = True
End With
ActiveSheet.ChartObjects("Chart 9").Activate
With ActiveChart.PivotLayout.PivotTable.PivotFields("WEEK")
.PivotItems(Range(O3).Value).Visible = False
.PivotItems(Range(O1).Value).Visible = True
End With
End Sub

Merci d'avance

Steven
 

ntesenforce

XLDnaute Nouveau
Re : Tableau croisé dynamique + macro

Bonjour Jacques,

Merci pour l'aide!
J'ai fait cela, cependant le "Pivotitem" ne reconnait toujours pas la Cells(1,15).Value ou autre.

Ma macro actuelle est :
Sub test()

Sheets("NORD_Résultat Hebdo").Select
reponse = INPUTBOX("Entrer la semaine en cours (SSAA)")
Cells(1, 15).Value = Int(reponse)
Cells(1, 16).Value = Int(reponse) - 500
Cells(1, 17).Value = Int(reponse) - 400
With ActiveSheet.PivotTables("NordFHC").PivotFields("WEEK")
.PivotItems(Cells(1, 16).Value).Visible = False
.PivotItems(Cells(1, 15).Value).Visible = True

End With
End Sub


Elle plante aux deux lignes en gras... Je ne vois pas quoi faire pour que cela fonctionne.

Est ce que quelqu'un aurait une autre idée?

Merci d'avance!

Steven
 

ntesenforce

XLDnaute Nouveau
Re : Tableau croisé dynamique + macro

Re,

merci pour toute l'aide que vous m'apportez:)!

- Oui les cellules (1,15); (1,16) et (1,17) sont ok
- Le message d'erreur est le suivant : Run-time Error '1004' : Unable to get the PivotItems property of the PivotField class

Steven
 
Dernière édition:

dixit

XLDnaute Impliqué
Re : Tableau croisé dynamique + macro

bonjour à tous,
si j'ai bien compris la macro, et avec comme exemple la semaine 32 :
reponse = 3209 (chaîne de caractères)
transformation de la chaîne en nombre soit 3209
cells(1,16)= 3209-500 soit 2709
existe-t-il un PivotItems avec index 2709 ?

un classeur exemple (avec données non confidentielles) serait vraiment utile, sinon l'étude du problème est difficile, bien sûr.

à suivre
 

ntesenforce

XLDnaute Nouveau
Re : Tableau croisé dynamique + macro

Bonsoir,

Voila, j'ai simplifié au maximum mon fichier (à vrai dire je ne peux faire plus simple...) il est vraiment basique de chez basique... Mais il montre le problème simplement... (et bon les données sont confidentielles donc je ne peux guère faire mieux sur un fichier de plus de 30000 lignes!)

Je précise bien entendu que par semaine j'ai beaucoup plus de données que cela.

J'espère que ça changera quelque chose (bien entendu la macro est intégrée).

Si je n'avais pas bien fait le fichier, veuillez me le signaler.


Bonne soirée.

Steven
 

Pièces jointes

  • fichier exemple.xls
    26 KB · Affichages: 108
  • fichier exemple.xls
    26 KB · Affichages: 109
  • fichier exemple.xls
    26 KB · Affichages: 113

dixit

XLDnaute Impliqué
Re : Tableau croisé dynamique + macro

bonjour,
à mon avis, le problème provient de la désignation des items par un nombre.
il faut rappeler que la syntaxe est PivotItems("nom") ou PivotItems(n° d'index) ; donc avec PivotItems(Cells(1, 10).Value) il est fait appel au n° d'index qui n'existe pas ...
dans le classeur joint j'ai ajouté
- un S devant le nom d'item
- une macro TEST2 corrigée dans ce sens.
Le fonctionnement paraît correct.
à suivre
 

Pièces jointes

  • ED124858 VER2 ntesenforce TCD.xls
    32.5 KB · Affichages: 109

ntesenforce

XLDnaute Nouveau
Re : Tableau croisé dynamique + macro

Bonjour Jacques,

Je pense que l'on touche presque au but. La macro fonctionne effectivement...
Cependant comment rajouter "- un S devant le nom d'item"?

Je ne sais pas faire cela.

Merci d'avance pour l'aide une nième fois:)

S
 

dixit

XLDnaute Impliqué
Re : Tableau croisé dynamique + macro

re
il suffit de regarder la macro TEST2
bye

[edit] dans la version jointe, j'ai ajouté une macro pour renommer les items
 

Pièces jointes

  • ED124858 VER3 ntesenforce TCD.xls
    35 KB · Affichages: 147
Dernière édition:

Discussions similaires

Réponses
3
Affichages
303

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa