Aide à la mise en forme d'un graphique sous VBA

Fermé
Pablo988 Messages postés 1 Date d'inscription dimanche 13 juillet 2014 Statut Membre Dernière intervention 13 juillet 2014 - Modifié par Pablo988 le 13/07/2014 à 20:36
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 - 25 juil. 2014 à 09:48
Bonjour à toutes et à tous,

Je me suis lancé de le VBA depuis peu et les graphiques me posent pas mal de problème dont un que je n'ai pas réussi à résoudre malgré mon ami Google.

J'essaie de faire une courbe avec deux aires (une verte et une rouge) sur le même graphique pour représenter une zone "stable" et l'autre "instable".

Sur l'image on voit à gauche ce que je veux et à droite ce que j'obtiens avec mon code VBA


Voici mon code
    Function WsExist(Nom) As Boolean    'Teste si une feuille excel existe
    On Error Resume Next
    WsExist = Sheets(Nom).Index
    End Function

Sub Macro2()

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

'On supprime le graphique précédent s'il existe
If WsExist("01") = True Then
Application.DisplayAlerts = False
Sheets("01").Delete
Application.DisplayAlerts = True
End If

'On créée le graphique et on le déplace à la fin
Set objChart = Charts.Add
ActiveChart.Name = "01"
Sheets("01").Move After:=Sheets("GRAPH1")

    ThisWorkbook.Sheets(1).Activate
    
    With objChart
    
    'Type de Graphique
    .ChartType = xlXYScatterSmoothNoMarkers
    
    'Titre
    .HasTitle = True
    .ChartTitle.Text = "STABILITE"
    
    'Séries de Données
    .SeriesCollection.NewSeries
    .SeriesCollection(1).XValues = Range("A15:A30")
    .SeriesCollection(1).Values = Range("D15:D30")
    .SeriesCollection.Add Range("B15:B30")
    .SeriesCollection.Add Range("C15:C30")
    
    'Mise en forme des axes
    .Axes(xlCategory, xlPrimary).HasMajorGridlines = True
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Submerged Rope Mass (kg/m)"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Rope mass per unit length (kg/m)"
    .Axes(xlValue).MajorGridlines.Border.LineStyle = xlDot
    .ChartArea.Font.Size = 14
    
    'On contraint l'axe des ordonnées
    .Axes(xlValue, xlPrimary).MinimumScale = 0
    .Axes(xlValue, xlPrimary).MaximumScale = 30
        
    End With
    
'Mise en forme première série : Courbe
With objChart.SeriesCollection(1)
.ChartType = xlXYScatterSmoothNoMarkers
.AxisGroup = 1
With .Border
.Weight = xlMedium
.LineStyle = xlContinuous
.ColorIndex = 23
End With
.MarkerBackgroundColorIndex = 23
.MarkerForegroundColorIndex = 23
.MarkerStyle = xlSquare
.MarkerSize = 5
End With

'Mise en forme des deux autres séries en Aires
objChart.SeriesCollection(2).ChartType = xlAreaStacked
objChart.SeriesCollection(3).ChartType = xlAreaStacked

    With objChart.SeriesCollection(2).Format.Fill
    .ForeColor.RGB = RGB(0, 176, 80)
    .Solid
    .Transparency = 0.7
    End With

    With objChart.SeriesCollection(3).Format.Fill
    .ForeColor.RGB = RGB(255, 0, 0)
    .Solid
    .Transparency = 0.7
    End With
    
    

'On active le graphique
Sheets(3).Activate
End Sub


J'ai l'impression qu'il y a en quelque sorte 2 axes des abscisses et du coup ça pose problème.

j'ai essayé de contraindre l'axe comme cela :

     .Axes(xlCategory, xlPrimary).MinimumScale = 0
    .Axes(xlCategory, xlPrimary).MaximumScale = 30


Mais ça ne marche pas.

Avez-vous une petite idée ? Je remercie d'avance !!!

Pablo
A voir également:

1 réponse

borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
25 juil. 2014 à 09:48
Slt Pablo,

Je crois que ton problème vient de tes election des aires. C'est des colonnes donc il n'y a pas "d'absisse" donc par défaut Excel doit prendre les numeros des cases.Comme tu veux graduer de 0 à 30 et que tes cases sont dans la même gamme ça doit être completement transparent en plus. essaye en rajoutant la colonne A:A dans tes selections de (2) et (3)
0