cs_emma75
Messages postés6Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention 3 février 2012
-
3 févr. 2012 à 14:46
plg0037
Messages postés3Date d'inscriptionmercredi 9 février 2011StatutMembreDernière intervention21 février 2012
-
21 févr. 2012 à 19:52
Bonjour,
Je suis actuellement en train de tenter de créer un script permettant de créer, pour plusieurs données, plusieurs graphiques correspondant.
Quand je ne mets pas de boucle, cela marche très bien, par contre si je mets une boucle, le premier graphique est créé, mais quand je reviens au début de la boucle, j'obtiens une erreur 1004. Cela bloque sur Set PD1 = Worksheets("Feuil1").Range(Cells(i, 2), Cells(i, findeligne))
et ca me met "La methode cells de l'objet _global a échoué" quand je survole avec ma souris grace au mode debug.
Mon code est surement très moche car je me suis basé sur ce que j'avais déjà fait en cours, mais si vous trouvez ce qui ne va pas ca serait super.
Il me semble que ca vient du fait que les variables PD1, ... ont déjà une valeur au départ.
merci d'avance, voilà ma fonction:
Sub Courbes()
Dim i As Integer
Dim PD1 As Range
Dim PD2 As Range
Dim PG1 As Range
Dim PG2 As Range
Dim T1 As Range
Dim T2 As Range
Dim moyPD As Range
Dim moyPG As Range
Dim moyT As Range
Dim dates As Range
Dim Graphique As Chart
Dim name As Range
Dim findeligne As Integer
Dim test As Integer
Set dates = Worksheets("Feuil1").Range(Cells(1, 2), Cells(1, findeligne))
Set name = Worksheets("Feuil1").Cells(i - 1, 1)
'Crée le graphique correspondant
Set Graphique = ThisWorkbook.Charts.Add
Graphique.Select
Graphique.ChartArea.Clear
Graphique.ChartType = xlColumnClustered
Graphique.Axes(xlCategory).CategoryType = xlCategoryScale
'Ajoute la courbe correspondant à PD1
Set Serie_PD1 = Graphique.SeriesCollection.NewSeries
With Serie_PD1
.Values = PD1
.XValues = dates
.name = "PD1"
End With
'Ajoute la courbe correspondant à PD2
Set Serie_PD2 = Graphique.SeriesCollection.NewSeries
With Serie_PD2
.Values = PD2
.XValues = dates
.name = "PD2"
End With
'Ajoute la courbe correspondant à PG1
Set Serie_PG1 = Graphique.SeriesCollection.NewSeries
With Serie_PG1
.Values = PG1
.XValues = dates
.name = "PG1"
End With
'Ajoute la courbe correspondant à PG2
Set Serie_PG2 = Graphique.SeriesCollection.NewSeries
With Serie_PG2
.Values = PG2
.XValues = dates
.name = "PG2"
End With
'Ajoute la courbe correspondant à T1
Set Serie_T1 = Graphique.SeriesCollection.NewSeries
With Serie_T1
.Values = T1
.XValues = dates
.name = "T1"
End With
'Ajoute la courbe correspondant à T2
Set Serie_T2 = Graphique.SeriesCollection.NewSeries
With Serie_T2
.Values = T2
.XValues = dates
.name = "T2"
End With
'Ajoute la courbe correspondant à la moyenne de PD
Set Serie_moyPD = Graphique.SeriesCollection.NewSeries
With Serie_moyPD
.Values = moyPD
.XValues = dates
.name = "moyPD"
End With
'Ajoute la courbe correspondant à la moyenne de PG
Set Serie_moyPG = Graphique.SeriesCollection.NewSeries
With Serie_moyPG
.Values = moyPG
.XValues = dates
.name = "moyPG"
End With
'Ajoute la courbe correspondant à la moyenne de T
Set Serie_moyT = Graphique.SeriesCollection.NewSeries
With Serie_moyT
.Values = moyT
.XValues = dates
.name = "moyT"
End With
'Paramètres supplémentaires
With Graphique
.HasTitle = True
'Pour afficher le titre
With .ChartTitle
.Text = name
End With
End With
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 3 févr. 2012 à 16:05
Bonjour,
Difficile de te répondre avec assurance, sans voir ce que contiennent tes cellules, notamment celles correspondant à ta variable test (en espérant qu'il n'y a que des nombres entiers)
Mon premier instinct me fait cependant ne pas écarter l'hypothèse selon laquelle la feuille active est autre que la Feuille Feuil quand la macro est lancée.
Et dans ce cas il faut le préciser également pour l'emploi de cells
Essaye donc ainsi :
With Worksheets("Feuil1")
Set PD1 = .Range(.Cells(i, 2), .Cells(i, findeligne))
End With
(sans préjudice de ma remarque en ce qui concerne le contenu des cellules où test puise sa valeur car peut être également et éventuellement source d'erreur).
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
cs_emma75
Messages postés6Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention 3 février 2012 3 févr. 2012 à 16:35
malheureusement ca ne résoud pas mon problème.
En fait, la variable test correspond juste à vérifier s'il y a des données dans la cellule. J'ai pas encore sécurisé la chose, surtout que ca bug la 2e fois alors que cette variable est encore à 1, donc je n'ai pas encore cherché à faire attention au problème. la variable test devrait donc me servir plus tard à vérifier qu'il n'y a plus de graphiques à créer. pour l'instant c'est un integer donc ce n'est pas elle qui bloque.
par contre je remarque qu'une fois mon graphique créé, l'onglet actif est celui qui contient le graphique, pas la feuil1. cela poserait problème?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 3 févr. 2012 à 16:45
Je te l'ai dit : je n'ai pas ta feuille feuil1 sous les yeux pour voir ce que contiennent ses cellules.
Ce que je peux par contre t'affirmer, c'est que le bout de code que je t'ai montré a été testé sur ma machine ===>> sans faille en ce qui concerne ton erreur (cette partie seulement. Je m'y suis arrêté).
Tu me dis par ailleurs que ta variable test est là pour autre chose. Je veux bien, moi, mais tu as écrit :
Do While test <> 0 ' sur un numérique, donc
et en bas :
test = Worksheets("Feuil1").Cells(i, 2) ' en espérant qu'il n'y a que des numériques
Pas vraiment propre, pas plus qu'il n'est propre de ne pas se référer à une poropriété précise (.value, par exemple) d'une cellule !
Pour en revenir à ton erreur et à la correction suggérée. Les points . que j'ai mis dans mon bout de code sont importants (j'espère que tu ne les a pas "mangés").
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 3 févr. 2012 à 16:46
Ah ... croisés ...
J'étais occupé à rédiger.
Restent mes autres remarques. Lis-les (cela te servira toujours).
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
cs_emma75
Messages postés6Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention 3 février 2012 3 févr. 2012 à 16:52
j'avoue j'ai oublié le .value pour la variable test, mais comme ca marchait j'ai pas fait attention. Maintenant que ce problème est résolu je vais essayer de rendre le fichier plus propre.
Merci :)
plg0037
Messages postés3Date d'inscriptionmercredi 9 février 2011StatutMembreDernière intervention21 février 2012 21 févr. 2012 à 19:52
Chapeau ucfoutu,
J'avais le même pb dans une boucle vb Excel 2003 pour tracer des graphes dans une feuille. La syntaxe .cells(... est capitale et change tout.
Sans doute une question de pointeurs subtils réservée aux connaisseurs et aux experts.
Encore bravo