Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
myWobgho le blog des solutions simples!

Ajouter une ligne dans un graphique

7 Juin 2013 Publié dans #Graphique Tableur

Le problème:

 

Ajouter une ligne de seuil dans un histogramme Excel.

 

Dans une graphique (en ligne mais aussi en histogramme), on veut ajouter une ligne pour marquer une borne, un plafond, etc...

Le tableur ne propose pas de solution simple et immédiate valable dans tous les cas (dans le cas d'une graphique en ligne, on peut toujours ajouter une nouvelle série, cela fait l'affaire).

Pour illustrer, voici un graphique très simple:

 
Ajouter une ligne dans un graphique

Il s'agit de prendre ce graphique et d'ajouter une ligne, rien qu'une simple ligne pour obtenir le graphique suivant:

Ajouter une ligne dans un graphique

Une solution :

 

Même si ça peut paraître un peu lourd, un petit bout de VBA sous Excel fait l'affaire!

 


Sub AddCap()
'
' Add a line to mark a cap or limit value
'
Dim wValue As Double
'
    'Get value cap in sheet
    wValue = Range("B12").Value
    'Select chart (name can be found by recording a macro)
    ActiveSheet.ChartObjects("Graphique 1").Activate
    
    wTop = ActiveChart.PlotArea.Top
    wTop = wTop + ActiveChart.PlotArea.InsideHeight
    wLeft = ActiveChart.PlotArea.Left
    wRight = wLeft + ActiveChart.PlotArea.Width
    wLeft = wRight - ActiveChart.PlotArea.InsideWidth
    wHauteur = ActiveChart.Axes(xlValue).MaximumScale - ActiveChart.Axes(xlValue).MinimumScale
    wPos = wValue / wHauteur * ActiveChart.PlotArea.InsideHeight
    wTop = wTop - wPos

    ActiveChart.Shapes.AddConnector(msoConnectorStraight, wLeft, wTop, wRight, wTop).Select

    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(200, 0, 0) ' Set color to red
        .Weight = 2.25 'set width
    End With
    ' Now add a small text box it
    AddTextCap wTop - 20, (wRight + wLeft) / 2, "Cap=" & wValue
End Sub

 


Sub AddTextCap(ByVal wHaut As Double, wHoriz As Double, wLib As String)
    
    ActiveChart.Shapes.AddTextbox(msoTextOrientationHorizontal, wHoriz - 40, wHaut, 80, 20).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = wLib
End Sub

 

Un exemple de fichier donnant ce résultat

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article