Création graphique automatique VBA [Résolu]

jayjay2050

XLDnaute Nouveau
Bonjour,

Je voulais savoir s'il est possible de créer un graphique qui mette plusieurs séries de données sur un seul graphique. Il y a 120 courbes d'où ma volonté de le faire en vba.

je n 'arrive pas à faire sélectionner les séries de données automatiquement.
En gros, la première série de données est A1:B6000, la deuxième D1:E6000 et ainsi de suite.

Code:
Dim LastCol As Integer, i As Integer

    Sheets("Données1-2").Select
    LastCol = Range("iv2").End(xlToLeft).Column 'on obtient la dernière colonne
    Range(Worksheets("Données1-2").Cells(1, i), Worksheets("Données1-2").Cells(6000, i + 1)).Select
        
     For i = 1 To LastCol - 1 Step 3
            Range(Worksheets("Données1-2").Cells(1, i), Worksheets("Données1-2").Cells(6000, i + 1)).Select

            Charts.Add
            ActiveChart.ChartType = xlXYScatter
            ActiveChart.SetSourceDataSource:=Source:=Sheets("Données1-2").Range(Worksheets("Données1-2").Cells(1, 1), Worksheets("Données1-2").Cells(6000, LastCol)) 'Fait toutes les courbes en fonction des x de la premiere colonne

     Next i
    
End Sub

Le problème est qu'il réalise un graphique en considérant la première colonne comme les abscisses, et toutes les autres comme des ordonnées ! Alors qu'elles sont rangées de sorte à avoir col1=abscisse, col2= ordonnées et ainsi de suite.


Mon problème concerne ça :

Code:
ActiveChart.SetSourceData Source:=Sheets("Données1-2" ).Range(X)

J 'essaye de faire défiler automatiquement le nom des colonnes mais je n'y arrive pas.

En gros je voudrais qu'au premier tour de boucle, il sélectionne A1:B6000 puis au deuxième tour de boucle D1:E6000, puis G1:H6000 et ainsi de suite.

Merci pour votre aide.
 
Dernière édition:

jayjay2050

XLDnaute Nouveau
Re : Création graphique automatique VBA

Re-bonjour,

Juste un petit up pour vous demander d'écrire si ce que je souhaite faire vous semble réalisable ou pas. si vous pensez qu'une macro ne peut pas le faire, merci de m'en avertir.

Etant débutant, je vois qu'il est plus simple de répondre avec un fichier de données.

Merci pour votre aide et vos conseils.
 

Pièces jointes

  • Test1.xls
    25.5 KB · Affichages: 316
  • Test1.xls
    25.5 KB · Affichages: 327
  • Test1.xls
    25.5 KB · Affichages: 336
Dernière édition:

Softmama

XLDnaute Accro
Re : Création graphique automatique VBA

Bonjour,

Pour le fichier joint avec 3 séries, tu peux t'inspirer de cette macro (j'ai créé d'abord un graphique, avec une série, mis en forme comme je voulais avant de rajouter des séries dessus). Si 120 Séries, ça fonctionne pareil
VB:
Sub SoftmaMacro()
    ActiveSheet.ChartObjects("Graphique 1").Activate
    Set c = Range("D1")
    Do While c <> ""
        With ActiveChart
            .SeriesCollection.NewSeries 'Ajoute une série
            With .SeriesCollection(.SeriesCollection.Count)
                .Name = c 'Nom de la série
                .XValues = Range(c.Offset(2, 0), c.End(xlDown)) 'absisses
                .Values = Range(c.Offset(2, 1), c.Offset(2, 1).End(xlDown)) 'ordonnées
            End With
        End With
        Set c = c.Offset(0, 3) 'Décalage de 3 colonnes à gauche pour voir la prochaine série
    Loop
End Sub
 

Pièces jointes

  • test 1.zip
    28.8 KB · Affichages: 337
  • test 1.zip
    28.8 KB · Affichages: 324
  • test 1.zip
    28.8 KB · Affichages: 338

tototiti2008

XLDnaute Barbatruc
Re : Création graphique automatique VBA

Bonjour jayjay, Bonjour Softmama,

je l'ai fait alors je poste mon essai

Code:
Sub Macro1()
Dim i As Long, DerLign As Long
    Charts.Add
    ActiveChart.ChartType = xlXYScatterLines
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Données1-2"
    With Worksheets("Données1-2")
    For i = 1 To 3
        If i > 1 Or ActiveChart.SeriesCollection.Count = 0 Then ActiveChart.SeriesCollection.NewSeries
        DerLign = .Cells(65536, 3 * i - 2).End(xlUp).Row
        ActiveChart.SeriesCollection(i).XValues = "='Données1-2'!" & .Range(.Cells(3, 3 * i - 2), .Cells(DerLign, 3 * i - 2)).Address(True, True, xlR1C1)
        ActiveChart.SeriesCollection(i).Values = "='Données1-2'!" & .Range(.Cells(3, 3 * i - 1), .Cells(DerLign, 3 * i - 1)).Address(True, True, xlR1C1)
        ActiveChart.SeriesCollection(i).Name = "='Données1-2'!R1C" & 3 * i - 2
    Next i
    End With
End Sub

marche pour 3 séries, changer le nombre de séries dans la ligne "For i = 1 to 3"
 

jayjay2050

XLDnaute Nouveau
Re : Création graphique automatique VBA

Bonjour Softmama, Bonjour tototiti,

Mille mercis pour vos réponses, vous venez de m'épargner un travail long et fastidieux ! Ca marche du tonnerre !
PS Softmama, le fichier que tu as envoyé correspond vraiment à ma question ou à celle de qqn d'autre ?

bonnes fêtes à vous tous !
 

Softmama

XLDnaute Accro
Re : Création graphique automatique VBA [Résolu]

Re,

Heu hihi, y'avait déjà un fichier qui s'appelait Test1.xls dans mon ordi, j'ai juste pas posté le bon. Le bon fichier est ici ^^
 

Pièces jointes

  • test 1.xls
    46 KB · Affichages: 532
  • test 1.xls
    46 KB · Affichages: 531
  • test 1.xls
    46 KB · Affichages: 562

cyril33

XLDnaute Nouveau
Re : Création graphique automatique VBA [Résolu]

Bonjour,

je me permet de réouvrir la discussion car vos messages mon beaucoup aidé dans ma macro.
J'ai juste un petit problème :
Dans le code de "Softmama" fichier "Test1.xl"s la macro permet d'ajouter des séries supplémentaires dans le graphique se trouvant sur la feuille "Données1-2".

Je voudrai que le Graphique soit dans une feuille indépendante nommée "Graph1", voila le code que j'ai tapé qui ne fonctionne pas :confused:
Code:
Sub SoftmaMacro()

'--  Partie du code que j'ai modifier -----------------------------

Dim MaFeuille As Worksheet
   MaFeuille.ChartObjects("Graph1").Activate
    Set c = Range("Données1-2!D1")
'-----------------------------------------------------------------------
 
  Do While c <> ""
        With ActiveChart
            .SeriesCollection.NewSeries
            With .SeriesCollection(.SeriesCollection.Count)
                .Name = c 'Nom de la série
               .XValues = Range(c.Offset(2, 0), c.End(xlDown))
                .Values = Range(c.Offset(2, 1), c.Offset(2, 1).End(xlDown))
            End With
        End With
        Set c = c.Offset(0, 3)
    Loop
End Sub
 

shadow

XLDnaute Nouveau
Re : Création graphique automatique VBA

Bonjour,

je me permet de réouvrir la discution car j'ai un petit problème.
Je me suis largement inspiré des macro de softmama mais en les modifiant un peu car mes données sont dans plusieurs feuilles différentes.

Mon code tourne pour un certain nombre de feuilles mais je ne comprend pas pourquoi il bloque lors de l'exécution de la dernière feuille...

voici mon code:

Sub MaMacro()
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Courant"

Dim nbpages As Byte
nbpages = Worksheets.Count

Do Until nbpages = 0

Set c = Sheets(nbpages).Range("A15")
With ActiveChart
.SeriesCollection.NewSeries 'Ajoute une série
With .SeriesCollection(.SeriesCollection.Count)
.Name = nbpages 'Nom de la série
.XValues = Range(c.Offset(1, 0), c.End(xlDown)) 'absisses
.Values = Range(c.Offset(1, 9), c.Offset(1, 9).End(xlDown)) 'ordonnées
End With
End With

nbpages = nbpages - 1
Loop

End Sub

Merci!

PS: Cyrill33, mon code crée un graph dans une feuille a part, prend une dose d'inspiration dessus :)
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
168
Réponses
0
Affichages
153

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote