Macro creation graph automatiquement
Bonjour,
Je souhaite via une macro pouvoir ajouter dynamiquement des séries dans un graph vide.
Dans mon cas, je dois ajouter les séries qui se trouvent dans la feuille "données tampon2".
Chaque courbe du graphique se trouve dans les colonnes "B:C" ; "D:E" ; "F:G" ....
La macro doit donc vérifier si il y a bien des valeurs dans ces colonnes et si c'est le cas ajouter une série (colonne B les Xvaluers et C Yvaleurs).
Ensuite elle doit vérifier si dans les 2 prochaines colonnes c'est vide ou non et en conséquence ajouter ou non une nouvelle série.
La macro se trouve dans la feuilles "courbes".
J'ai deux listbox qui permettent de récupérer les données du graph provenant d'autre fichiers. Ces données sont ensuite coller dans la feuille "données tampon".
Je pense qu'avec une macro du genre ça devrait le faire mais ça marche pas :
With Sheets("données tampon2")
For k = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
If Sheets("données tampon2").Cells(1, k) = Sheets("données tampon2").Cells(1, k + 1) And Sheets("données tampon2").Cells(1, k) <> 0 Then
ActiveSheet.ChartObjects("Graphique 2").Activate
L = ActiveChart.SeriesCollection.Count
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(L).Name = Sheets("données tampon2").Cells(1, k)
ActiveChart.SeriesCollection(L).XValues = Sheets("données tampon2").Cells(1, k)
ActiveChart.SeriesCollection(L).Values = Sheets("données tampon2").Cells(1, k + 1)
End If
Next
k = k + 2
End With
merci
J'y suis presque arrivé!
Par contre j'ai encore un problème. Je n'arrive pas à sélectionner correctement les valeurs en ordonnée et abscisse dans les colonnes.
Ma macro me sélectionne qu'une seule valeur dans les colonnes.
Je voudrais toutes les sélectionner à partir de la ligne 2 jusqu'à le dernière ligne non vide de chaque colonne.
cela concerne ces 2 lignes de code suivant:
ActiveChart.SeriesCollection(L).XValues = Sheets("données tampon2").Columns(k).End(xlDown)
ActiveChart.SeriesCollection(L).Values = Sheets("données tampon2").Columns(k).End(xlDown)
Voici le code complet:
For k = 2 To Cells(1, Columns.Count).End(xlToRight).Column
If Sheets("données tampon2").Cells(1, k) <> "" Then
If Sheets("données tampon2").Cells(1, k) = Sheets("données tampon2").Cells(1, k + 1) Then
Sheets("Courbes").ChartObjects("Graphique 2").Activate
L = ActiveChart.SeriesCollection.Count
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(L).Name = Sheets("données tampon2").Cells(1, k)
ActiveChart.SeriesCollection(L).XValues = Sheets("données tampon2").Columns(k).End(xlDown)
ActiveChart.SeriesCollection(L).Values = Sheets("données tampon2").Columns(k+1).End(xlDown)
End If
End If
Next
k = k + 2
Je n'arrive toujours pas à sélectionner comme je veux la plage de données du graphique.
Il faudrait que pour les abscisses et les ordonnées je sélectionne sur chaque colonnes correspondantes les valeurs allant de la ligne 3 jusqu'à la dernière ligne non vide.
voici mon code qui ne marche pas:
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "1"
ActiveChart.SeriesCollection(1).XValues = Sheets("données tampon2").Range("A2")
ActiveChart.SeriesCollection(1).Values = Sheets("données tampon2").Range("A3")
For k = 2 To Cells(1, Columns.Count).End(xlToRight).Column
If Sheets("données tampon2").Cells(1, k) <> "" Then
If Sheets("données tampon2").Cells(1, k) = Sheets("données tampon2").Cells(1, k + 1) Then
Sheets("Courbes polarisation").ChartObjects("Graphique 2").Activate
L = ActiveChart.SeriesCollection.Count
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = Sheets("données tampon2").Cells(1, 1)
ActiveChart.SeriesCollection(L + 1).Name = Sheets("données tampon2").Cells(1, k)
derlig = Sheets("données tampon2").Cells(Rows.Count, k).End(xlUp).Row
ActiveChart.SeriesCollection(L + 1).XValues = Sheets("données tampon2").Range(Cells(3, k), Cells(derlig, k)) <<< ça plante la!!
ActiveChart.SeriesCollection(L + 1).Values = Sheets("données tampon2").Range(Cells(3, k + 1), Cells(derlig, k + 1))
End If
End If
Next
k = k + 2
j'arrive vraiment pas à trouver.
je pense que c'est pas très compliqué.
ActiveChart.SeriesCollection(L ).XValues = Sheets("données tampon2").Range(Cells(3, k), Cells(derlig, k)) <<< ça plante la!!
je n'arrive pas à partir de la 3ème ligne de la colonne jusqu'à la dernière ligne non vide. je pense que c'est le problème.
Personne pour m'aider?
Je ne sais vraiment pas comment écrire ce code qui ne marche pas :
derlig = Sheets("données tampon2").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Courbes polarisation").ChartObjects("Graphique 2").Activate
L = ActiveChart.SeriesCollection.Count
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = Sheets("données tampon2").Cells(1, 1)
ActiveChart.SeriesCollection(L + 1).Name = Sheets("données tampon2").Cells(1, k)
ActiveChart.SeriesCollection(L + 1).XValues = Sheets("données tampon2").Range(k & 3 & k & derlig) <<< comment écrire ça correctement
ActiveChart.SeriesCollection(L + 1).Values = Sheets("données tampon2").Range(k + 1 & 3 & k + 1 & derlig)
Je sais pas du tout comment référencer une colonne relative qui commence à la ligne 3 et se termine à la dernière ligne non vide.
J'ai essayé avec ça mais ça passe toujours pas :
ActiveChart.SeriesCollection(L + 1).XValues = Sheets("données tampon2").Range(Cells(3, k), Cells(derlig, k))
ActiveChart.SeriesCollection(L + 1).Values = Sheets("données tampon2").Range(Cells(3, k + 1), Cells(derlig, k + 1))
j'ai enfin fini par trouver!
C'était bien qu'une question d'écriture du code.
With Worksheets("données tampon2")
ActiveChart.SeriesCollection(L + 1).XValues = Sheets("données tampon2").Range(.Cells(3, k), .Cells(derlig, k))
ActiveChart.SeriesCollection(L + 1).Values = Sheets("données tampon2").Range(.Cells(3, k + 1), .Cells(derlig, k + 1))
End With
Apparement il faut utilisé du .Cells et donc un with avant.
Si il y a pas de point avant le Cells ça marche pas!!
Bonjour lolo34140
Merci à toi d'avoir persisté pour nous faire connaître ta solution qui servira éventuellement pour d'autres.
cordialement