execution d'un graph pour 30 feuilles

  • Initiateur de la discussion Initiateur de la discussion Viv
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Viv

XLDnaute Nouveau
Bonjour,

mon probleme est le suivant,
j'effectue une meme macro pour 30 feuilles d un meme fichier excel, mais je ne sais pas comment programmer le trace d'un meme graphique pour les trente feuilles. Pour l'instant la macro me trace 30 fois le meme graph sur la Sheet1.

Pour l'instant j'ai le programme principal suivant:

Dim i
Sub traite_classeur()
cree_recap
nb_onglet = Sheets.Count - 1
For i = 1 To nb_onglet
Sheets(i).Select
traite_feuille
graph
Next
End Sub

et le debut de sous programme graph suivant:
Sub graph()

Range("B2:B801").Select
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B2:B801"), PlotBy:=xlColumns
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R2C1:R801C1"
ActiveChart.SeriesCollection(1).Name = "=""Voltage"""
ActiveChart.SeriesCollection(2).Values = "=Sheet1!R2C12:R801C12"
ActiveChart.SeriesCollection(2).Name = "=""Max vibrations"""
ActiveChart.SeriesCollection(3).Values = "=Sheet1!R2C13:R801C13"
ActiveChart.SeriesCollection(3).Name = "=""min vibrations"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Graph1"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time "
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Volt"

etc... Je crois que le probleme vient du fait que dans cette sub graph, il est ecrit Sheet1. Alors que je souhaiterais quelque chose du style Sheet(i) ou i varie de 1 a 30.

Connaissez le code de programmation pour faire cela?

Merci d'avance.
 
Re : execution d'un graph pour 30 feuilles

Bonjour Viv

Tu peux dans la ligne suivante remplacer ("Sheet1") par (ActiveSheet),

ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B2:B801"),

Par contre pour déterminer les séries le mieux, à mon avis, serait d'utiliser une variable de type "range" se rapportant aux plages de données spécifiques.

Bonne journée
@+
 
Re : execution d'un graph pour 30 feuilles

Merci pierrot de ta reponse,
mais helas, ca ne fonctionne toujours pas, j'ai l'erreur suivante qui apparait: error 13, type mismatch,

Dois je aussi remplacer Sheet1 par ActiveSheet dans ces lignes suivantes?

ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R2C1:R801C1"
ActiveChart.SeriesCollection(1).Name = "=""Voltage"""
ActiveChart.SeriesCollection(2).Values = "=Sheet1!R2C12:R801C12"
ActiveChart.SeriesCollection(2).Name = "=""Max vibrations"""
ActiveChart.SeriesCollection(3).Values = "=Sheet1!R2C13:R801C13"
ActiveChart.SeriesCollection(3).Name = "=""min vibrations"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
With ActiveChart

Cordialement,
 
Re : execution d'un graph pour 30 feuilles

Re Viv

oui c'est normal , comme je le disais plus haut pour ces lignes là, il faut déclarer tes plages dans la macro "traite_classeur". Regarde le code ci dessous, j ai modifié un peu pour montrer les déclarations de variable faire.

Code:
Dim i, [COLOR="Red"]Maserie1 as range[/COLOR]
Sub traite_classeur()
cree_recap
nb_onglet = Sheets.Count - 1
For i = 1 To nb_onglet
Sheets(i).Select
[COLOR="red"]set Maserie1 = range("A1:A25") [/COLOR]
traite_feuille
graph
Next
End Sub

Ensuite dans ta macro "graph" remplace le code ci dessous

Code:
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R2C1:R801C1"

par

Code:
ActiveChart.SeriesCollection(1).XValues = [COLOR="red"]Maserie1[/COLOR]

@+
 
Re : execution d'un graph pour 30 feuilles

Re Pierrot, et merci de tes conseils
mais Helas, toujours pas de succes..

voila ce que j'ai maintenant,

Dim i
Dim Maserie1 As Range
Dim Maserie2 As Range
Dim Maserie3 As Range
Sub traite_classeur()
cree_recap
nb_onglet = Sheets.Count - 1
For i = 1 To nb_onglet
Sheets(i).Select
Set Maserie1 = Range("B2:B801")
Set Maserie2 = Range("L2:L801")
Set Maserie3 = Range("M2:M801")
traite_feuille
graph
Next
End Sub

et

Sub graph()

Range("B2:B801").Select
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Sheets(ActiveSheet).Range("B2:B801"), PlotBy:=xlColumns
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = Maserie1
ActiveChart.SeriesCollection(1).Name = "=""Voltage"""
ActiveChart.SeriesCollection(2).Values = Maserie2
ActiveChart.SeriesCollection(2).Name = "=""Max vibrations"""
ActiveChart.SeriesCollection(3).Values = Maserie3
ActiveChart.SeriesCollection(3).Name = "=""min vibrations"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"

et mon erreur arrive dans ce qui est selectionne en gras,
dois je aussi remplacer Sheet1 par activesheet dans la derniere ligne de la subroutine graph?
 
Re : execution d'un graph pour 30 feuilles

Re Viv

et maintenant si tu remplaces :

Code:
ActiveChart.SetSourceData Source:=Sheets(ActiveSheet) _ 
.Range("B2:B801"), PlotBy:=xlColumns

par

Code:
ActiveChart.SetSourceData Source:=Maserie1 , PlotBy:=xlColumns

enlève peut être "Range("B2:B801").Select" de ta macro graph, a priori je n'en vois pas l'utilité mais comme je n'ais pas tout le code.

@+
 
Dernière édition:
Re : execution d'un graph pour 30 feuilles

ok,

alors maintenant quand j'execute la macro, y a excel qui se ferme tout seul, c'est peut etre du a la lugne suivante:

ActiveChart.Location Where:=xlLocationAsObject, Name:=ActiveSheet

concernant la location du graph, je souhaiterais qu il soit sur chacune des feuilles en fait, c possible de faire ca avec la commande activesheet?

Merci,
 
Re : execution d'un graph pour 30 feuilles

Re Viv,

Je ne comprends pas pourquoi Excel se ferme sauf si quelque part dans ton code tu as une ligne du style "Application.close" !!!

A priori tu veux les graphs sur les feuilles et non création d'une feuille graph par feuille de données. Dans ce cas il vaut mieux utiliser le code ci dessous pour incorporer un graph dans une feuille existante.

Code:
Dim ch As ChartObject
Set ch = Worksheets([COLOR="Red"]activesheet.name[/COLOR]).ChartObjects.Add(100, 30, 400, 250[COLOR="Green"]) 'les chiffres correspondent à la position du graph, gauche, top, largeur et hauteur  [/COLOR]
ch.Chart.ChartWizard source:=activesheet.Range("a1:a20"), _
    gallery:=xlLine, title:="NouveauGraph"

Par contre ce serait plus facile pour t'aider si tu pouvais mettre un fichier exemple avec un modèle de données et tes macros.

Bon Après midi
@+
 
Re : execution d'un graph pour 30 feuilles

En fait c'est pas que excel se ferme de lui meme, c'est que "excel a reencontre une erreur" et ducoup il ne repond plus et windows le ferme automatiquement,

Je te joins en annexe le genre de donnees que j'aimerais tracees, a savoir les colonnes B et C en fonction de A.
Ce n'est pas exactement le fichier que je traite car le mien est assez lourd, mais ca represente le tableau que je veux tracer a savoir 800 lignes. De meme dans ce fichier il n'y a que deux feuilles alors que je traiterais en fait 30 feuilles + tard.

Merci de ton aiide,
 

Pièces jointes

Re : execution d'un graph pour 30 feuilles

Excuse tu as raison,

Plus simple, je viens de reussir a bien comprimer le fichier que j utilise vraiment, je l'envoie tel qu'il etait au moment ou jai rencontre mes premiers problemes,

Le prog principal s'appele traite feuille, et le sous programme qui nous interesse s'appelle graph, ne t'inquietes pas trop du reste...
Ce qui m'interesse a etre en graphique est la colonne B,M et N en fonction de A.

Si t as des questions, n'hesite pas..
 

Pièces jointes

Re : execution d'un graph pour 30 feuilles

Re

Avec le fichier que tu m as donné, j'arrive à créer 1 graph sur chaque feuille avec le code que j'ai mis dans le module 1.

je pense que ton fichier original et le code déjà associé est plus complexe que ca !!!

@+
 

Pièces jointes

Re : execution d'un graph pour 30 feuilles

re

J'ai testé ton code jusqu'a la macro "graph", mes commentaires en vert, confirmes que tu veux effectue ton graph a partir de la "recap", j'en suis pas sur ou alors il y a un problème !!!

Par contre essaies le code de 13h14 pour création graph dans feuille, cela permettra peut être d'avancer.



Code:
Sub graph()
[COLOR="Green"]'Là tu selectionnes B2 a B801 de feuille "recap", seule B1 est renseignée ??[/COLOR]
Range("B2:B801").Select

[COLOR="green"]'là tu insere une FEUILLE graph et non un graph dans une feuille existante[/COLOR]
Charts.Add

[COLOR="green"]'utiliser plutot la synthaxe que je t avais donné à 13h14
'Dim ch As ChartObject
'Set ch = Worksheets(ActiveSheet.Name).ChartObjects.Add(100, 30, 400, 250)
'ch.Chart.ChartWizard Source:=Maserie1, _
    gallery:=xlLine, Title:="New Chart"[/COLOR]

@+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
522
Réponses
0
Affichages
460
Réponses
4
Affichages
2 K
Réponses
9
Affichages
65 K
Réponses
4
Affichages
1 K
Retour