Vba Excel : mise à jour automatique d'un tableau.

Monfy29 Messages postés 3 Date d'inscription vendredi 3 avril 2009 Statut Membre Dernière intervention 7 juillet 2009 - 7 juil. 2009 à 14:47
Monfy29 Messages postés 3 Date d'inscription vendredi 3 avril 2009 Statut Membre Dernière intervention 7 juillet 2009 - 7 juil. 2009 à 16:22
Bonjour à tous,

Je bloque depuis quelques temps sur un problème dans ma macro. Dans celle-ci, j'essaye de mettre automatiquement le seul et unique graphique de la feuille, en redéfinissant les plages de données sources auxquelles il est lié.

Lorsque j'utilise l'enregistreur de macro, j'obtiens le code suivant (j'ai préalablement renommé le graphique pour qu'il ait un nom facilement identifiable) :

ActiveSheet.ChartObjects("K3 monitoring").Activate
ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection(1).XValues = "='K3'!R11C4:R11C16"
ActiveChart.SeriesCollection(1).Values = "='K3'!R35C4:R35C16"
ActiveChart.SeriesCollection(1).Name = "='K3'!R35C3"
ActiveChart.SeriesCollection(2).XValues = "='K3'!R11C4:R11C16"
ActiveChart.SeriesCollection(2).Values = "='K3'!R36C4:R36C16"
ActiveChart.SeriesCollection(2).Name = "='K3'!R36C3"
ActiveChart.SeriesCollection(3).XValues = "='K3'!R11C4:R11C16"
ActiveChart.SeriesCollection(3).Values = "='K3'!R37C4:R37C16"
ActiveChart.SeriesCollection(3).Name = "='K3'!R37C3"
ActiveChart.SeriesCollection(4).XValues = "='K3'!R11C4:R11C16"
ActiveChart.SeriesCollection(4).Values = "='K3'!R38C4:R38C16"
ActiveChart.SeriesCollection(4).Name = "='K3'!R38C3"
ActiveChart.SeriesCollection(5).XValues = "='K3'!R11C4:R11C16"
ActiveChart.SeriesCollection(5).Values = "='K3'!R39C4:R39C16"
ActiveChart.SeriesCollection(5).Name = "=""Threshold"""

Le graphique à mettre à jour s'appelle donc "K3 monitoring", et il est situé dans la feuille "K3".
Ce code s'exécutait bien, jusqu'à ce que j'essaye de lancer plusieurs macro, dont celle-ci, en même temps.
La console m'informe alors d'une erreur '1004' d'exécution sur l'échec de l'application de la méthode "SeriesCollection"...
J'ai lu plusieurs tutoriels qui m'ont aidé à mieux comprendre la cause de ces erreurs : il s'agit donc, d'après ce que j'ai compris, d'une mauvaise utilisation du modèle objet.
J'ai donc tenté de modifier mon code :

Set cGraphique = ThisWorkbook.Sheets("K3").ChartObjects("K3 monitoring")
With cGraphique.ChartArea
    .SeriesCollection(1).XValues = "='K3'!R11C4:R11C16"
    .SeriesCollection(1).Values = "='K3'!R47C4:R47C16"
    .SeriesCollection(2).Values = "='K3'!R48C4:R48C16"
    .SeriesCollection(3).Values = "='K3'!R49C4:R49C16"
    .SeriesCollection(4).Values = "='K3'!R50C4:R50C16"
    .SeriesCollection(5).Values = "='K3'!R51C4:R51C16"
End With

Cela ne fonctionne pas non plus...
J'ai essayé d'autres choses, principalement en changeant la syntaxe, mais je n'y arrive toujours pas.
Quelqu'un aurait une idée? Merci d'avance.






 

2 réponses

Monfy29 Messages postés 3 Date d'inscription vendredi 3 avril 2009 Statut Membre Dernière intervention 7 juillet 2009
7 juil. 2009 à 15:31
Bon j'ai réussi à résoudre une partie de mon problème ; il existe en effet deux types de graphiques : les "graphiques-feuilles" ou les graphiques incorporés à des feuilles. Les premiers répondent à la dénomination de "ThisWorkbook.Chart" et les seconds à "ThisWorkbook.Worksheets("MaFeuille").ChartObject".
Donc, j'ai pu déclarer correctement mon graphique :

Set wKpiK3 = ThisWorkbook.Sheets("K3")
Set cGraphique = wKpiK3.ChartObjects("K3 monitoring")

En revanche, avec la seconde partie du code, j'ai toujours un problème.

With cGraphique
    .SeriesCollection(1).XValues = "='K3'!R11C4:R11C16"
    .SeriesCollection(1).Values = "='K3'!R47C4:R47C16"
    .SeriesCollection(2).Values = "='K3'!R48C4:R48C16"
    .SeriesCollection(3).Values = "='K3'!R49C4:R49C16"
    .SeriesCollection(4).Values = "='K3'!R50C4:R50C16"
    .SeriesCollection(5).Values = "='K3'!R51C4:R51C16"
End With

Cette fois il s'agirait d'une erreur d'exécution '438' : propriété ou méthode non gérée par cet objet. En effet, j'essaye de modifier les plages de données (SeriesCollection(i).Values), mais celles-ci ne peuvent manifestement être atteintes que par l'objet "ActiveChart"... Or, je ne peux utiliser ActiveChart, sinon cela me renvoit à une erreur '1004'.

Toujours pas d'idée?
0
Monfy29 Messages postés 3 Date d'inscription vendredi 3 avril 2009 Statut Membre Dernière intervention 7 juillet 2009
7 juil. 2009 à 16:22
Encore moi, décidemment je me sens bien seul...
Bon j'ai trouvé d'où l'erreur provenait... Cela peut éventuellement intéresser qqun, donc dans le doute je mets quand même la solution :

Set wKpiK3 = ThisWorkbook.Worksheets("K3")
With wKpiK3
     Set cGraphique = .ChartObjects("K3 monitoring")
End With

...

With cGraphique.Chart
    .SeriesCollection(1).XValues = "='K3'!R11C4:R11C16"
    .SeriesCollection(1).Values = "='K3'!R47C4:R47C16"
    .SeriesCollection(2).Values = "='K3'!R48C4:R48C16"
    .SeriesCollection(3).Values = "='K3'!R49C4:R49C16"
    .SeriesCollection(4).Values = "='K3'!R50C4:R50C16"
    .SeriesCollection(5).Values = "='K3'!R51C4:R51C16"
End With

Il n'y a pas grand chose qui a changé, si ce n'est que j'avais modifié la feuille qui contenait mon graphique, et les anciennes "SeriesCollections" ne faisaient plus référence à des plages contenant effectivement des données... Donc après un premier rétablissement manuel, la macro fonctionne bien par la suite avec ce code...

A+ le forum
0
Rejoignez-nous