Créer un graphe sans l'activer

Résolu
Bonjour,

J'aimerais créer un graphe sans l'activer en VBA.

Donc je m'interdis d'utiliser ActiveChart.truc. Comment faire ?

Mon code actuel est le suivant

Sub Graphe()

Sheets("TORONS").ChartObjects("REPRESENTATION").Activate

Q = 85
For j = 0 To UBound(MarqueurTravees)
Sheets("TORONS").Cells(Q, 15) = MarqueurTravees(j)
Sheets("TORONS").Cells(Q, 16) = 0
Q = Q + 1
Next j

With ActiveChart

.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = Range(Sheets("TORONS").Cells(85, 15), Sheets("TORONS").Cells(Q - 1, 15))
.SeriesCollection(1).Values = Range(Sheets("TORONS").Cells(85, 16), Sheets("TORONS").Cells(Q - 1, 16))
.SeriesCollection(1).ChartType = xlXYScatter
.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
.SeriesCollection(1).Select
With Selection
.MarkerStyle = 9
.MarkerSize = 36
End With
.SeriesCollection(1).Name = "Limite inférieure de la poutre"

.SeriesCollection.NewSeries
.SeriesCollection(2).XValues = Range(Sheets("TORONS").Cells(85, 5), Sheets("TORONS").Cells(R - 1, 5))
.SeriesCollection(2).Values = Range(Sheets("TORONS").Cells(85, 6), Sheets("TORONS").Cells(R - 1, 6))
.SeriesCollection(2).ChartType = xlXYScatterLinesNoMarkers
.SeriesCollection(2).Format.Line.ForeColor.RGB = RGB(0, 0, 255)
.SeriesCollection(2).Name = "Limite supérieure de la poutre"

.SeriesCollection.NewSeries
.SeriesCollection(3).XValues = Range(Sheets("TORONS").Cells(85, 5), Sheets("TORONS").Cells(R - 1, 5))
.SeriesCollection(3).Values = Range(Sheets("TORONS").Cells(85, 7), Sheets("TORONS").Cells(R - 1, 7))
.SeriesCollection(3).ChartType = xlXYScatterLinesNoMarkers
.SeriesCollection(3).Format.Line.ForeColor.RGB = RGB(0, 0, 255)
.SeriesCollection(3).Name ="Torons"

End Sub

Comment le transformer ?

Merci d'avance.

2 réponses

  1. Bonjour,

    A essayer, l'objet se cree, mais je n'ai pas vos donnees
    Sub Graphe()
        Dim Graph As ChartObject
    
        'creation objet graph
        Set Graph = Sheets("TORONS").ChartObjects.Add(Range("D1").Left, Range("D1").Top, 200, 200)     'voir pour position du graph
        Graph.Name = "PRESENTATION"
    
        Q = 85
        For j = 0 To UBound(MarqueurTravees)
            Sheets("TORONS").Cells(Q, 15) = MarqueurTravees(j)
            Sheets("TORONS").Cells(Q, 16) = 0
            Q = Q + 1
        Next j
    
        With Graph
            .SeriesCollection.NewSeries
            .SeriesCollection(1).XValues = Range(Sheets("TORONS").Cells(85, 15), Sheets("TORONS").Cells(Q - 1, 15))
            .SeriesCollection(1).Values = Range(Sheets("TORONS").Cells(85, 16), Sheets("TORONS").Cells(Q - 1, 16))
            .SeriesCollection(1).ChartType = xlXYScatter
            .SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
            .SeriesCollection(1).Select
            With Selection
                .MarkerStyle = 9
                .MarkerSize = 36
            End With
            .SeriesCollection(1).Name = "Limite inférieure de la poutre"
    
            .SeriesCollection.NewSeries
            .SeriesCollection(2).XValues = Range(Sheets("TORONS").Cells(85, 5), Sheets("TORONS").Cells(R - 1, 5))
            .SeriesCollection(2).Values = Range(Sheets("TORONS").Cells(85, 6), Sheets("TORONS").Cells(R - 1, 6))
            .SeriesCollection(2).ChartType = xlXYScatterLinesNoMarkers
            .SeriesCollection(2).Format.Line.ForeColor.RGB = RGB(0, 0, 255)
            .SeriesCollection(2).Name = "Limite supérieure de la poutre"
    
    
            .SeriesCollection.NewSeries
            .SeriesCollection(3).XValues = Range(Sheets("TORONS").Cells(85, 5), Sheets("TORONS").Cells(R - 1, 5))
            .SeriesCollection(3).Values = Range(Sheets("TORONS").Cells(85, 7), Sheets("TORONS").Cells(R - 1, 7))
            .SeriesCollection(3).ChartType = xlXYScatterLinesNoMarkers
            .SeriesCollection(3).Format.Line.ForeColor.RGB = RGB(0, 0, 255)
            .SeriesCollection(3).Name = "Torons"
        End With
        
        Set Graph = Nothing
    
    End Sub
    1
    1. Merci de cette réponse !

      J'ai cependant un problème : quand je relance la procédure, il y a une erreur au niveau de ".SeriesCollection.NewSeries". On me dit "propriété ou méthode non gérée par cet objet". Que faire ?

      Merci d'avance.
      0
    2. Re,

      Je vais tester en creant un graph bidon

      A+
      0
    3. Coucou,

      je ne comprends pas ta question.
      que veux tu dire quand tu dis que tu veux créer un graphe sans l'activer par VBA?
      Pour moi, ce n'est pas clair.
      Soit tu crées un graphe manuellement, soit tu passe par vba.
      Quel est le pb?
      0
    4. Bonjour,

      On me demande un graphe sans utiliser ActiveChart. (le pourquoi est obscure pour moi aussi mais peu importe) et plutot quelque chose qui ressemble à ce qui me propose f894009.
      J'aimerai savoir comment modifier mon code dans ce sens (les graphes ne sont vraiment pas ma tasse de thé sur VBA, je l'avoue).

      Merci d'avance
      0
  2. Re,

    ai oublie .Chart

    avant:
    With Graph

    apres:
    With Graph.Chart

    par contre: Q ok, mais R .....???????

    A+
    1
    1. Une dernière chose : comment supprimer le graphe à l'essai suivant ?

      (Le R est définit dans une autre procédure. Je n'ai posté q'un fragment de code).
      0
    2. pour supprimer :

      graph.chart.Delete

      si ca ne marche pas, c'est
      graph.Chart.Parent.Delete
      0
    3. ça ne marche pas mais je pense savoir pourquoi. Il ne trouve pas le graphe à supprimer.

      A quel endroit dois je mettre cette ligne de code ?
      0
    4. Je ne comprend pas, ça ne marche nul part.... Faut-il préciser quelque chose avant cette commande ? La feuille ou un truc comme ça ?

      Merci.
      0
    5. Re,

      mettre au debut, apres l ligne Dim:

      Sheets("TORONS").ChartObjects("PRESENTATION").Delete
      0