Se connecter avec
S'enregistrer | Connectez-vous

Macro - suppresion graphique

Dernière réponse : dans Programmation

Bonjour

sous excel, j'ai fait une macro qui me donne un joli graphique. le problème, c'est que je n'arrive pas à supprimer l'ancien graphique... j'ai mes graphs qui se surperpose et c'est tres moche !!

J'ai essayé de le faire avec l'assistant de création de macro (on clique sur enregistrement, puis on fais le graph pui on arrete l'enregistrement), mais, d'une part, Zeb me diras que cela nous fais un code horrible, d'autre part, il (excel) nomme chaque graphique differement... donc à chaque fois, mon programme bug !!

Quelqu'un aurai t il une piste ?

Autres pages sur : macro suppresion graphique

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

Oui, j'ai une piste : utiliser le créateur-de-macro-qui-fait-du-code-moche (je l'ai écrit ici :o  ) et modifier et adapter le code proposé.

Le programme buggue ? ou Le programme ne fait pas le travail attendu ?

Publie un bout de code qu'on voit mieux le problème.

  1. Sheets("graphe TRG").Select
  2. ActiveSheet.ChartObjects("Graphique 11").Activate
  3. ActiveChart.ChartArea.Select
  4. ActiveWindow.Visible = False
  5. Selection.Delete

je reconnais que cela manque de beauté !
en fait, l'erreur viens de la ligne 2, mais je ne sais pas comment changer...11 correspond au nombre de graphique fait... je ne sais pas comment changer cela.
J'ai bien mis un titre sur mon graphique, mais bon, j'ai du louper quelques chose...

sinon, la solution qu'il me reste est de supprimer l'onglet et de le refaire à chaque graphique... mais je pense qu'il y a mieux, sinon, je ferais cette méthode un peu barbare !
Expert Programmation

1°) Tu ne dis pas qu'il s'agit de graphique dans une feuille de calcul. (Il peut aussi s'agir d'onglets de type chart :o  )

Ton code peut s'écrire comme ça :
Sheets("graphe TRG" ).ChartObjects("Graphique 11" ).Delete
Prends l'habiture quand tu vois un Machin.Select suivi d'un Selection.Truc d'écrire Machin.Truc. C'est tellement plus simple de se lire après.

Alors ton problème, c'est le nom du graphique. A la création, donne lui un nom. Dans ton code-qui-est-moche, tu dois avoir quelque chose comme ça :
  1. Charts.Add
  2. ActiveChart.ChartType = xl3DColumn
  3. ActiveChart.SetSourceData Source:= ...

Beurk... :vomi: 
  1. dim nouveau_graphique as Chart
  2. Set nouveau_graphique = Charts.Add
  3. nouveau_graphique.Name = "Je suis un beau graphique"
  4. nouveau_graphique.ChartType = xl3DColumn
  5. nouveau_graphique.SetSourceData Source:= ...

Ah!!! Là c'est beau :) 

Donc comme ça, tu peux l'appeler par son petit nom quand tu veux le supprimer :
Charts("Je suis un beau graphique" ).Delete


Mais si tu veux supprimer un graphique sans connaître son nom, tu peux l'appeler par son numéro d'ordre dans la liste. En général, on veut supprimer le premier ou le dernier. C'est TROP facile :
Charts(1).Delete
Charts(Charts.Count).Delete

j'ai toujours une erreur...
  1. Dim nouveau_graphique As Chart
  2.  
  3. Worksheets("graphe TRG").Activate
  4. Charts("graphique").Delete
  5. Worksheets("TRG").Select
  6. Range("C3:E23").Select
  7.  
  8. Set nouveau_graphique = Charts.Add
  9. nouveau_graphique.Name = "graphique"
  10. nouveau_graphique.ChartType = ...

il y a dejà un graph nommé "graphique" à la base... et j'ai toujours un probleme ligne 4.. erreur 9 !
j'ai essayé en remplacant la ligne 4 par charts(charts.count) ou alors charts(1) sans plus de resultat...

merci, j'avais pas fait attention.. maintenant, cela marche !!

pour info :
  1. Sub graphe()
  2. Dim nouveau_graphique As Chart
  3.  
  4. Worksheets("graphe TRG").ChartObjects.Delete
  5. Worksheets("TRG").Select
  6. Range("C3:E23").Select
  7.  
  8. Set nouveau_graphique = Charts.Add
  9. nouveau_graphique.Name = "graphique"
  10. nouveau_graphique.ChartType =.....
  11. ....

avec ChartObjects qui désigne les graphiques dans l'onglet !!

Merci !
Expert Programmation

Et voilà !!!

ChartObjects.Delete c'est pour supprimer toute la collection. (*)
ChartObjects(n).Delete c'est pour supprimer le n-ième de la collection.
ChartObjects("toto").Delete c'est pour supprimer de la collection celui qui s'appelle toto.



(*) Tu fais pas de détails toi. Au moins, c'est radical :lol: 

PS: :fou:  TU VAS ME VIRER CES Select INUTILES !!!! :fou: 
Lassé par la pub ? Créez un compte