Merril a demandé s’il y avait un moyen de créer un graphique en courbes de sorte que lorsqu’une ligne représentait une valeur négative, la couleur de la ligne changerait au moment où elle devenait négative. Par exemple, dans une série de données particulière, tant que la ligne représentait des valeurs positives, elle serait bleue, mais lorsque la ligne représentait des valeurs négatives, elle deviendrait rouge.

Malheureusement, il n’existe aucun moyen de le faire facilement dans Excel. Il existe cependant quelques solutions de contournement que vous pouvez essayer. La première consiste à utiliser une macro pour modifier les couleurs des lignes du graphique qui représentent des valeurs négatives. La macro suivante est un exemple d’une telle approche:

Sub PosNegLine()

Dim chtSeries As Series     Dim SeriesNum As Integer     Dim SeriesColor As Integer     Dim MyChart As Chart     Dim R As Range     Dim i As Integer     Dim LineColor As Integer     Dim PosColor As Integer     Dim NegColor As Integer     Dim LastPtColor As Integer     Dim CurrPtColor As Integer

PosColor = 4 'Green     NegColor = 3 'red     SeriesNum = 1

Set MyChart = ActiveSheet.ChartObjects(1).Chart     Set chtSeries = MyChart.SeriesCollection(SeriesNum)

Set R = GetChartRange(MyChart, 1, "Values")



For i = 2 To R.Cells.Count         LastPtColor = IIf(R.Cells(i - 1).Value < 0, NegColor, PosColor)

CurrPtColor = IIf(R.Cells(i).Value < 0, NegColor, PosColor)



If LastPtColor = CurrPtColor Then             LineColor = LastPtColor         Else             If Abs(R.Cells(i - 1).Value) > Abs(R.Cells(i).Value) Then                 LineColor = LastPtColor             Else                 LineColor = CurrPtColor             End If         End If         chtSeries.Points(i).Border.ColorIndex = LineColor     Next i End Sub
Function GetChartRange(Ch As Chart, Ser As Integer, _   ValXorY As String) As Range     Dim SeriesFormula As String     Dim ListSep As String * 1     Dim Pos As Integer     Dim LSeps() As Integer     Dim Txt As String     Dim i As Integer

Set GetChartRange = Nothing

On Error Resume Next         SeriesFormula = Ch.SeriesCollection(Ser).Formula     ListSep = ","

For i = 1 To Len(SeriesFormula)

If Mid$(SeriesFormula, i, 1) = ListSep Then             Pos = Pos + 1             ReDim Preserve LSeps(Pos)

LSeps(Pos) = i         End If     Next i

If UCase(ValXorY) = "XVALUES" Then         Txt = Mid$(SeriesFormula, LSeps(1) + 1, LSeps(2) - LSeps(1) - 1)



Set GetChartRange = Range(Txt)

End If

If UCase(ValXorY) = "VALUES" Then         Txt = Mid$(SeriesFormula, LSeps(2) + 1, LSeps(3) - LSeps(2) - 1)



Set GetChartRange = Range(Txt)

End If End Function

Lorsque vous sélectionnez un graphique, puis exécutez la macro PosNegLine, il examine le graphique et, pour les segments de ligne entre des valeurs de point de données négatives, change la couleur de la ligne en rouge. Pour les segments de ligne reliant des points de données positifs, la couleur de la ligne est définie sur le vert.

Le problème avec cette solution est qu’elle ne fournit qu’une approximation; il ne fonctionne qu’avec des lignes reliant deux points de données, et il peut changer le segment de ligne entier ou non. Si le point de données de début est positif et le point de données de fin est négatif, il ne peut pas changer la couleur d’une ligne à droite lorsqu’elle passe en valeurs négatives.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (1796) s’applique à Microsoft Excel 2007 et 2010. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

link: / excel-Positive_and_Negative_Colors_in_a_Chart [Couleurs positives et négatives dans un graphique].