Colorier des surfaces dans un graphique par points

pascal82

XLDnaute Occasionnel
Bonjour à tous,

Problème épineux, je n'arrive pas a colorier l'intérieur de mes surfaces dans un graphique par points. Dans ce cas précis, les 3 surfaces sont superposables, donc devrait apparaitre une couleur entre les lignes bleue et rouge, une autre couleur entre rouge et vert et enfin une couleur comprise entre les lignes vertes
Il doit surement y avoir une astuce ?. Si quelqu'un pouvait me renseigner.

Merci par avance

Cordialement
 

Pièces jointes

  • Coloration surface graphique.xls
    26 KB · Affichages: 89

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Colorier des surfaces dans un graphique par points

Bonsoir Pascal,

Un essai vite fait, à peine dégrossi et qui est un pis-aller (j'y étais presque arrivé avec 6 demi-courbes (en surface) mais ça ne collait pas dans le coin supérieur droit du graphique :()

Le principe:
.
  • Créer trois formes libres qui correspondent à chacune des trois courbes du graphique.
  • Une fois ces trois formes créées, modification à la main de certaines de leurs caractéristiques (sans bordure, couleur)
  • Puis amener chaque forme à sa place sur le graphique.
  • Positionner les forme sprécisément, éventuellement ajuster à la marge les dimensions (utilisation d'un zoom de 300 ou 400 pour mieux ajuster)
  • Enfin grouper le tout.

Du bricolage au final :p mais une fois inséré dans un PPT on n'y voit que du feu! :eek:

Le code de création des trois formes:
VB:
Sub DessinerSurface()
Dim F1 As Worksheet, Graf As ChartObject, Pts As Points, i&

Set F1 = Sheets("Feuil1"): F1.Activate
Set Graf = ActiveSheet.ChartObjects("Graphique 1")

'----------------- Forme série 1 ----------------------------
Graf.Activate
Set Pts = ActiveChart.SeriesCollection(1).Points
With F1.Shapes.BuildFreeform(msoEditingCorner, Pts(1).Left, Pts(1).Top)
  For i = 1 To Pts.Count
    .AddNodes msoSegmentLine, msoEditingAuto, Pts(i).Left, Pts(i).Top
  Next i
  .AddNodes msoSegmentLine, msoEditingAuto, Pts(1).Left, Pts(1).Top
  .ConvertToShape
End With

'----------------- Forme série 2 ----------------------------
'code du bloc série 1 en remplaçant SeriesCollection(1) 
'par  SeriesCollection(2)

'----------------- Forme série 3 ----------------------------
'code du bloc série 1 en remplaçant SeriesCollection(1)
'par  SeriesCollection(3)

End Sub
 

Pièces jointes

  • Coloration surface graphique v1.xls
    52 KB · Affichages: 95
Dernière édition:

pascal82

XLDnaute Occasionnel
Re : Colorier des surfaces dans un graphique par points

Bonsoir Mapomme,

Merci pour votre travail. Il est vrai que le coloriage de surface n'est pas prévue pour ce type de graphique mais votre méthode donne des résultats satisfaisants. J'ai tenté d'ajouter voir de modifier quelques données pour l'adapter sur le fichier de travail mais le débogueur s'arrête sur
With F1.Shapes.BuildFreeform(msoEditingCorner, Pts(1).Left, Pts(1).Top)
, avec le message "Erreur d'exécution 438 " il doit me manquer des ressources mais ....

Personnellement j'ai testé le coloriage par "Paint" mais le résultat est décevant (point de vue personnel) même si plus rapide.

Merci encore pour le temps que vous avez passé et la qualité de votre travail

Cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Colorier des surfaces dans un graphique par points

Bonsoir Pascal,

Le fichier que j'ai joint fonctionne chez moi mais, parce que il y a un mais, je l'ai fait sous Excel 2010, et enregistré sous le format Excel 2003 depuis Excel 2010.

Il fonctionne sous 2010 mais je n'ai pas pu le tester directement sous Excel 2003.

Eventuellement si une bonne âme voulait le déboguer avec un Excel 2003 natif...
 

pascal82

XLDnaute Occasionnel
Re : Colorier des surfaces dans un graphique par points

Bonjour à tous et toutes,

@mapomme: Votre programme fonctionne sous 2010 (je n'en avais jamais douté) et j'essaye simplement de comprendre ce qui ne fonctionne pas lors de son utilisation avec la version 2007
Après une petite pose je reviens sur le sujet. Après quelques tests je constate que votre programme active le graphique ainsi que la série de données, par contre il ne veut absolument pas comprendre Pts.
En cherchant sur le net j'ai trouvé des petits programmes pour tracer un "V" et même un "Ovale", ce qui confirme que les instructions "BuildFreeform" et "msoEditingCorner" sont bien reconnus ainsi que LEFT et TOP (voir définition)

VB:
 Sub Graphique_Ovale()
Dim F1 As Worksheet

Set F1 = Sheets("Feuil1")
F1.Activate

Set F1 = Worksheets(1)
With F1.Shapes
    .AddShape msoShapeOval, 180, 200, 280, 130
End With
End Sub

VB:
Sub Graphique_Forme_V()
Dim F1 As Worksheet

Set F1 = Sheets("Feuil1")
F1.Activate

Set F1 = Worksheets(1)
With F1.Shapes.BuildFreeform(msoEditingCorner, 360, 200)
    .AddNodes msoSegmentCurve, msoEditingCorner, 380, 230, 400, 250, 450, 300
    .AddNodes msoSegmentCurve, msoEditingAuto, 480, 200
    .AddNodes msoSegmentLine, msoEditingAuto, 480, 400
    .AddNodes msoSegmentLine, msoEditingAuto, 360, 200
    .ConvertToShape
End With

End Sub

Regarde la pièce jointe Left et Top.pdf

Pour contourner ce problème j'ai testé en affectant chaque données à une variable pour ensuite faire appel à cette variable mais que nenni.
Je tourne en rond et pas moyen de trouver une petite astuce. Si quelqu'un avait une idée, je suis preneur

Bien cordialement
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Colorier des surfaces dans un graphique par points

Bonjour à tous, bonjour Pascal82

Pascal82, as-tu résolu ton problème ? Au cas où cela t'intéresserait, on peut parfois faire sans macro avec des colonnes intermédiaires en mettant un trait épais zigzagant entre les lignes, avec un pas assez petit.

@ plus
 
Dernière édition:

Discussions similaires

Réponses
0
Affichages
155