Posez votre question Signaler

[VBA] Graphique

wsl1912 1176Messages postés 3 novembre 2006Date d'inscription - Dernière réponse le 7 sep 2007 à 15:27
Bonjour
J'ai réussi à faire un graphique, mon code:
Sub creategraph()

     Dim objChart As Chart, objRange As Range, MaSerie As Series

     Set objRange = Worksheets("Valeur").Range(Worksheets("Valeur").Cells(1,2), Worksheets("Valeur").Cells(5,2))
     Set objChart = ThisWorkook.Charts.Add
     objChart.ChartType = xlLine
     objChart.SeriesCollection.Add objRange, xlColumns, True, True
     Set MaSerie = objChart.SeriesCollection.NewSeries
     MaSerie.Values = "=" & objRange.Columns(2).Address(True, True, xlR1C1, True)
     MaSerie.XValues = "=" & objRange.Columns(1).Adress(True, True, xlR1C1, True)

     objChart.SetSourceData objRange, xlColumns

End Sub

Le seul problème est qu'il me crée une feuille de graphique à chaque fois qu'il exécute ce code or moi j'aimerai qu'il utilise toujours la même en écrasant le précédent graphique
Que dois-je changer dans mon prog
Merci d'avance
Lire la suite 

[VBA] Graphique »

2 réponses
Réponse
+2
moins plus
Ton objet chart est défini par

Set objChart = ThisWorkbook.Charts.Add
alors qu'il pourrait etre un test d'existence (if thisworkbook.charts.count >0 then...) et

set objchart=thisworkbook.charts(1)

Irem
Ajouter un commentaire
Réponse
+0
moins plus
Ok, cela fonctionne mais maintenant j'ai un autre problème voici la partie du code qui crée mes graphiques:

For i = 0 To 5 Step 1
    If i = 0 Then colonnebase = 3
    If i = 1 Then colonnebase = 7
    If i = 2 Then colonnebase = 11
    If i = 3 Then colonnebase = 15
    If i = 4 Then colonnebase = 19
    If i = 5 Then colonnebase = 23
    
    Dim objRange As Range, SMesure As Series, SCible As Series, SLimiteinf As Series, SLimitesup As Series
    
    Set objRange = Worksheets("Table").Range(Worksheets("Table").Cells(3, colonnebase), Worksheets("Table").Cells(l, colonnebase + 3))
    Charts.Add
    ActiveChart.ChartType = xlLine
    ActiveChart.SeriesCollection.Add objRange, xlColumns, True, True
    Set SMesure = ActiveChart.SeriesCollection.NewSeries
    Set SCible = ActiveChart.SeriesCollection.NewSeries
    Set SLimiteinf = ActiveChart.SeriesCollection.NewSeries
    Set SLimitesup = ActiveChart.SeriesCollection.NewSeries
    
    SMesure.Values = "=" & objRange.Columns(colonnebase).Address(True, True, xlR1C1, True)
    SMesure.XValues = "=" & objRange.Columns(2).Address(True, True, xlR1C1, True)
    SMesure.Name = "Mesures"
    SCible.Values = "=" & objRange.Columns(colonnebase + 1).Address(True, True, xlR1C1, True)
    SCible.XValues = "=" & objRange.Columns(2).Address(True, True, xlR1C1, True)
    SCible.Name = "Cible"
    SLimiteinf.Values = "=" & objRange.Columns(colonnebase + 2).Address(True, True, xlR1C1, True)
    SLimiteinf.XValues = "=" & objRange.Columns(2).Address(True, True, xlR1C1, True)
    SLimiteinf.Name = "Limite inférieure"
    SLimitesup.Values = "=" & objRange.Columns(colonnebase + 3).Address(True, True, xlR1C1, True)
    SLimitesup.XValues = "=" & objRange.Columns(2).Address(True, True, xlR1C1, True)
    SLimitesup.Name = "Limite supérieure"
    
    ActiveChart.SetSourceData objRange, xlColumns
    ActiveChart.Name = paramètres(i)
    
Next i


Le graphique est correctement affiché, l'axe des ordonnées aussi mais pas l'axe des abscisses. Sachant que:

- La zone des valeurs pour l'abscisse ne contient pas des valeurs chiffré mais des chaînes de caractères
- Cette zone n'est pas forcément contigue avec celle des données

Au lieu des chaînes de caractères, le graphique affiche pour l'axe des abscisses 1,2,....

Où es-je fais une erreur dans le code ?

Merci d'avance
Ajouter un commentaire
Ce document intitulé « [VBA] Graphique » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook