Se connecter avec
S'enregistrer | Connectez-vous

[Non résolu] Macro de mise à jour de graphe

Dernière réponse : dans Programmation

Bonjour,

J'ai un petit souci de mise à jour automatique de graphe.

Mise en situation:
-Données sur une feuille, pas mail de ligne (j'ai une macro qui tourne pour mettre à jour le fichier tous les jours et qui ajoute des lignes qui doivent être prises en compte sur le graphe sur une deuxième feuille)
-Graphe sur une deuxième feuille.

Comme vous l'aurez compris, je voudrais qu'en ajoutant des données dans la première feuille, je puisse faire une mise à jour du graphe automatiquement et que la sélection prenne en compte les nouvelles mises à jour.

J'avais commencé à faire un truc, mais ce n'est vraiment pas très concluant puisque ça ne compile pas.
Si vous pouviez m'aider, ça serait avec grand plaisir.

  1. Sub MàJGraphHighlight()
  2. '
  3. ' MàJGraphHighlight Macro
  4.  
  5. ActiveSheet.ChartObjects("Graphique 2").Activate '//ici, j'ouvre mon graphe
  6. ActiveChart.SeriesCollection(1).Values = "='ASD DPQR Tier 1' Range("BV2", Range("BV2").End(xlDown))"
  7. '// ici, je souhaite sélectionner ma colonne de la 2e cellule jusqu'à la dernière cellule non vide, mais comme je ne suis pas très bon, ça marche pas au départ, j'avais une range normale: 'ASD DPQR Tier 1'!$BV$2:$BV$193, mais j'ai essayé de faire un truc pour arriver en bas comme vous l'aurez compris
  8.  
  9. End Sub


Merci d'avance pour votre aide,

Charly

Autres pages sur : resolu macro mise jour graphe

Lassé par la pub ? Créez un compte
Expert Programmation

:hello:  Charly

Bon, alors ! Je déteste les Activate/ActiveTruc/Select/Selection :grrr: Je ne te dis pas de ne pas en mettre, je te répète simplement qu'il vaut mieux écrire explicitement les noms des objets. Ne te l'ai-je pas déjà dis ?

Par contre, j'aime bien ton idée de Range.End()
Mais justement, tu as un problème de truc activé ou pas.



Il te faut considérer deux feuilles à la fois. Celle qui contient le graphique et celle qui contient les données.

  1. Dim ws_graf As Worksheet
  2. Dim ws_data As Worksheet
  3.  
  4. Set ws_graf = Worksheets("feuïkiconti1legraf")
  5. Set ws_data = Worksheets("ASD DPQR Tier 1")


Ensuite on s'occupe des données :
  1. Dim rg_data As Range
  2.  
  3. Set rg_data = Range(ws_data.Range("BV2"), ws_data.Range("BV2").End(xlDown))


Jusqu'ici, c'est facile. Et maintenant, on réécrit ton code :
  1. ws_graf.ChartObjects("Graphique 2").SeriesCollection(1).Values = rg_data


Il était où le problème :)  ?


(Ne mets pas [non résolu] dans le titre, sauf si une solution semblait bonne mais ne l'était en fait pas. C'était le cas dans l'autre topic ;) )

Hey merci beaucoup,

C'est vrai que j'ai sans doute pas assez réfléchi.
Mais je viens de débuter en vba, et je me base avant tout sur ce que je trouve en faisant "enregistrer une macro" pour débuter mon bout de code, j'essais un peu de voir comment l'ordi comprend ce que je veux lui faire faire, et ensuite j'adapte avec ce que je trouve dans mes recherches.

Là, c'est la deuxième fois que tu me viens en aide, et je vois de plus en plus que la vba se manie comme du code normal (genre initialisation, puis "fonctions" e.g. int a, float b float c b=a+c; cout b...)
Enfin c'est cool je commence à comprendre.

En tout cas merci, je teste et je te dis!! ;-)

Hey!! bonjour,

Bon je suis toujours en train de tester (je suis quand même assez frustré, car j'arrive jamais à résoudre mes problèmes tout seul, même si j'apprend quand même).

Pour faire simple, le
  1. ws_graf.ChartObjects("Graphique 2" ).SeriesCollection(1).Values = rg_data

bloque!

J'ai donc fait un
  1. ws_graf.ChartObjects("Graphique 2").Activate
  2. ActiveChart.SeriesCollection(1).Values = rg_data

Et là, ça marche!! désolé si tu aimes pas zeb :-$

Sinon, j'avais une question subsidiaire, comment fait on pour faire un test dans une macro pour voir si l'opération demandée est déjà "à jour" ou pas, car pour toutes mes macros de MàJ, quand je passe une fois la macro pour vraiment mettre à jour OK, mais quand sans faire exprès, je reclique sur le bouton MàJ, il m'ouvre l'éditeur de VBA, je suppose qu'il faut faire un test avant de pouvoir entrer dans la fonction, mais je ne vois pas comment!
Expert Programmation

Pour l'activate :fou:  J'en veux à Crosoft.
Pour me faire plaisir, écris le comme ça, c'est un moindre mal :pfff: 
  1. ws_graf.ChartObjects("Graphique 2" ).Activate
  2. ws_graf.ChartObjects("Graphique 2" ).SeriesCollection(1).Values = rg_data


Le coup du déjà à jour, c'est à toi de le gérer.
Une mise à jour sur quelque chose à jour ne devrait pas poser de problème.

Par contre, je n'aime pas cette histoire de Il m'ouvre l'éditeur de VBA.
Une erreur se déclenche-t-elle ? Un STOP de debug est-il resté dans ton code ?
Expert Programmation

Aucun rapport avec une quelconque mise à jour :o 
Et quand tu as une erreur, pense à la donner tout de suite, au lieu de tourner autour du pot ;) 

Tiens, dans un précédent message, tu dis "ceci bloque". Il fallait déjà donner l'erreur.

Essaie ça, plutôt :
  1. ws_graf.ChartObjects("Graphique 2" ).Chart.SeriesCollection(1).Values = rg_data


C'est quoi cette histoire de ShowAllData ?
Dans quel module écris-tu ton code ? (Feuil-n, ThisWorkbook, Module) ?

Ah mince, j'avais écris une réponse, mais elle n'est pas passée!

Donc en fait, mon problème, c'est que quand j'écris: Mafeuille.ShowAllData, si sur la feuille, il n'y a aucune données filfrée, la macro s'arrête, et il me sort l'erreur ci-dessus.

Pour la deuxième question, j'écris mes macros dans les Modules, une feuille par module. + Macros dans les userform.

Merci

Charly
Lassé par la pub ? Créez un compte