[VBA] Création de plusieurs graphes simultanéments

Lailaine

XLDnaute Nouveau
Bonjour à tous !!!


Les données sont dans un tableau de la forme :
Date Nom1 Valeur
Date Nom1 Valeur
Date Nom1 Valeur
Date Nom2 Valeur
Date Nom2 Valeur
Date Nom2 Valeur
Date Nom2 Valeur
Date Nom3 Valeur
Date Nom3 Valeur
Date Nom3 Valeur

Je voudrais donc faire autant de graphe (dans des fenêtres différentes ;)) qu’il y a de plages différentes (et donc de noms)
Ces plages sont de tailles aléatoires et en nombre aléatoires…
Mon programme comptabilise donc le nombre de noms différents puis détermine la première ligne puis la dernière ligne de sa plage à l’aide de tableaux dynamiques.
On a donc en tout trois arrays : un pour le nom de la plage, un pour la première ligne , un pour la dernière.
(ca me fait penser qu’un tableau à 3 dimensions aurait peut être été mieux ^^)
Bref... au moment de la création des graphiques par boucle, le premier se fait impeccablement bien, et lors de la création du deuxième, j’ai un bug à la ligne :
ActiveChart.SeriesCollection(i).XValues = "=Feuil1!R" & NumeroPremiereLigne(i) & "C3:R" & NumeroDerniereLigne(i) & "C3"

Le message d’erreur étant : Erreur 1004, erreur définie par l’application ou par l’objet…

Une idée ???

Merci beaucoup


Ci joint mon code :
Sub Niarkniark()


Dim plage As Range
Dim Cell As Range
Dim i As Integer
Dim NombreDePlage As Integer
Dim premiereCaseNom As Range
Dim DerniereCaseNom As Range
Dim NomPlage() As String
ReDim NomPlage(1 To 1)
Dim NumeroDerniereLigne() As Integer
ReDim NumeroDerniereLigne(1 To 1)
Dim NumeroPremiereLigne()
ReDim NumeroPremiereLigne(1 To 1)


Set plageNom = Range("D4", Range("D4").End(xlDown))
Set plagedate = Range("C4", Range("C4").End(xlDown))

Range("C4", Range("E4").End(xlDown)).Sort Key1:=Range("D4"), Order1:=xlAscending



NombreDePlage = 0
For Each Cell In plageNom
If Cell <> Cell.Offset(1, 0) Then
NombreDePlage = NombreDePlage + 1
End If
Next Cell

Range("C4", Range("E4").End(xlDown)).Sort Key1:=Range("C4"), Order1:=xlAscending

'Next Cell


Range("C4", Range("E4").End(xlDown)).Sort Key1:=Range("D4"), Order1:=xlAscending

Set premiereCaseNom = Worksheets("Feuil1").Range("D4")
Set DerniereCaseNom = Worksheets("Feuil1").Range("D4", Range("D4").End(xlDown))

For Each Cell In Range(premiereCaseNom, DerniereCaseNom)
Cell.Select
If Cell <> Cell.Offset(1, 0) Then
NomPlage(UBound(NomPlage)) = Cell.Value
NumeroDerniereLigne(UBound(NumeroDerniereLigne)) = Cell.Row
ReDim Preserve NomPlage(1 To UBound(NomPlage) + 1)
ReDim Preserve NumeroDerniereLigne(1 To UBound(NumeroDerniereLigne) + 1)

End If
Next Cell

NumeroPremiereLigne(1) = 4
For i = 2 To UBound(NomPlage) – 1
ReDim Preserve NumeroPremiereLigne(1 To UBound(NumeroPremiereLigne) + 1)
NumeroPremiereLigne(i) = NumeroDerniereLigne(i - 1) + 1
Next i

For i = 1 To UBound(NomPlage) - 1
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("H16")


ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(i).XValues = "=Feuil1!R" & NumeroPremiereLigne(i) & "C3:R" & NumeroDerniereLigne(i) & "C3"
ActiveChart.SeriesCollection(i).Values = "=Feuil1!R" & NumeroPremiereLigne(i) & "C5:R" & NumeroDerniereLigne(i) & "C5"
ActiveChart.SeriesCollection(i).Name = NomPlage(i)


ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"

Next i

End Sub
 
C

Compte Supprimé 979

Guest
Re : [VBA] Création de plusieurs graphes simultanéments

Salut Lailaine,

Sans fichier ce n'est pas facile, on est obligé de créer des valeurs pour tester :(

Alors STP la prochaine fois mets nous un petit bout de fichier tu auras des réponses plus rapide ;)

Donc après test, le problème est que tu veux incrémenter les séries des tes graphiques
alors qu'il ne faut pas !

Puisque tu crées un nouveau graphique pour chaque nom

Code:
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection([COLOR=blue][B]1[/B][/COLOR]).XValues = "=Feuil1!R" & NumeroPremiereLigne(i) & "C3:R" & NumeroDerniereLigne(i) & "C3"
ActiveChart.SeriesCollection([COLOR=blue][B]1[/B][/COLOR]).Values = "=Feuil1!R" & NumeroPremiereLigne(i) & "C5:R" & NumeroDerniereLigne(i) & "C5"
ActiveChart.SeriesCollection([COLOR=blue][B]1[/B][/COLOR]).Name = NomPlage(i)

Voilà ;)

A+
 

Lailaine

XLDnaute Nouveau
Re : [VBA] Création de plusieurs graphes simultanéments

Bizarre... il me semblait qu'au début j'avais bien mis des 1 ....
C'était peut être une autre erreur qui me bloquait au début !!!
En tout cas, merci beaucoup et c’est vrai que j’aurais du poster une petite plage de données ;) ca aurait été plus simple !!!!

Bonne continuation et merci encore !!!
 

Discussions similaires

Réponses
11
Affichages
292
Réponses
12
Affichages
250
Réponses
5
Affichages
186

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 180
dernier inscrit
Vcr