Methode cells de l'objet _global a échoué dans boucle pour créer des graphiques

Résolu
cs_emma75 Messages postés 6 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 3 février 2012 - 3 févr. 2012 à 14:46
plg0037 Messages postés 3 Date d'inscription mercredi 9 février 2011 Statut Membre Dernière intervention 21 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


findeligne = Worksheets("Feuil1").Range("A1").End(xlToRight).Column

i = 2
test = 1
Do While test <> 0

Set PD1 = Worksheets("Feuil1").Range(Cells(i, 2), Cells(i, findeligne))
Set PD2 = Worksheets("Feuil1").Range(Cells(i + 1, 2), Cells(i + 1, findeligne))
Set PG1 = Worksheets("Feuil1").Range(Cells(i + 3, 2), Cells(i + 3, findeligne))
Set PG2 = Worksheets("Feuil1").Range(Cells(i + 4, 2), Cells(i + 4, findeligne))
Set T1 = Worksheets("Feuil1").Range(Cells(i + 6, 2), Cells(i + 6, findeligne))
Set T2 = Worksheets("Feuil1").Range(Cells(i + 7, 2), Cells(i + 7, findeligne))
Set moyPD = Worksheets("Feuil1").Range(Cells(i + 2, 2), Cells(i + 2, findeligne))
Set moyPG = Worksheets("Feuil1").Range(Cells(i + 5, 2), Cells(i + 5, findeligne))
Set moyT = Worksheets("Feuil1").Range(Cells(i + 8, 2), Cells(i + 8, findeligne))

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

Graphique.SeriesCollection(7).ChartType = xlLine
Graphique.SeriesCollection(8).ChartType = xlLine
Graphique.SeriesCollection(9).ChartType = xlLine
ActiveSheet.name = name

i = i + 11
test = Worksheets("Feuil1").Cells(i, 2)

Loop
End Sub

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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
3
cs_emma75 Messages postés 6 Date d'inscription mercredi 19 janvier 2011 Statut Membre Derniè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?
0
cs_emma75 Messages postés 6 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 3 février 2012
3 févr. 2012 à 16:39
en fait, ca marche. un "." a été oublié quelque part et ça cassait tout.

merci!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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
0
cs_emma75 Messages postés 6 Date d'inscription mercredi 19 janvier 2011 Statut Membre Derniè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 :)
0
plg0037 Messages postés 3 Date d'inscription mercredi 9 février 2011 Statut Membre Dernière intervention 21 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

Un ancien développeur à la retraite
0
Rejoignez-nous