Bonjour à tous,
J'ai créé une macro qui me calcule l'avancement d'un projet et qui génère une courbe que j'affiche dans un Userform.
Je génère ma courbe sur un onglet, je l'enregistre au format au format JPG et l'affiche dans mon UserForm nommé Graph1.
Voici les codes:
Le code qui génère la courbe et la dimensionne sur ma feuille Excel
Le code qui enregistre la courbe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 Sub Curve_Actual() Dim Curve As Worksheet Set Curve = ThisWorkbook.Sheets("Curve") Dim Grph As ChartObjects Dim Emplacement As Range Dim G As Integer Set Grph = Curve.ChartObjects() Set Emplacement = Range("B2:P38") Curve.Select G = ActiveSheet.ChartObjects.Count If G > 0 Then ActiveSheet.ChartObjects(G).Delete End If ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "=""Cum. Planned""" ActiveChart.SeriesCollection(1).Values = "=Data!$J$8:$BZ$8" ActiveChart.SeriesCollection(1).XValues = "=Data!$J$6:$BZ$6" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "=""Cum. Actual""" ActiveChart.SeriesCollection(2).Values = "=Data!$J$14:$BZ$14" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(3).Name = "=""Cum. Forecast""" ActiveChart.SeriesCollection(3).Values = "=Data!$J$20:$BZ$20" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(4).Name = "=""Planned""" ActiveChart.SeriesCollection(4).Values = "=Data!$J$7:$BZ$7" ActiveChart.SeriesCollection(4).AxisGroup = 2 ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(5).Name = "=""Actual""" ActiveChart.SeriesCollection(5).Values = "=Data!$J$13:$BZ$13" ActiveChart.SeriesCollection(5).AxisGroup = 2 ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(6).Name = "=""Forecast""" ActiveChart.SeriesCollection(6).Values = "=Data!$J$19:$BZ$19" ActiveChart.SeriesCollection(6).AxisGroup = 2 ActiveChart.Axes(xlValue).Select ActiveChart.Axes(xlValue).MaximumScale = 1 ActiveChart.ChartGroups(2).GapWidth = 0 ActiveChart.SeriesCollection(4).ChartType = xlColumnClustered ActiveChart.SeriesCollection(5).ChartType = xlColumnClustered ActiveChart.SeriesCollection(6).ChartType = xlColumnClustered ActiveChart.Axes(xlCategory).TickLabels.NumberFormat = "[$-409]mmm-yy;@" With Grph .Left = Emplacement.Left .Top = Emplacement.Top .Height = Emplacement.Height .Width = Emplacement.Width End With data_to_export 'launch the next step End Sub
Enfin le code pour l'afficher:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub Record_Graph() Dim Grph As Chart Dim Curve As Worksheet Set Curve = ThisWorkbook.Sheets("Curve") Dim Analys As Worksheet Dim Anls As Range Dim Directory As String Directory = ThisWorkbook.Path Set Analys = ThisWorkbook.Sheets("Analysis") Set Anls = Analys.Range("J3") Anls = Anls.Offset(0) Graph1.Label1.Caption = "Contract Amount : " & Format(Anls.Offset(0, 0).Value, "$ #,##0") Graph1.Label2.Caption = "% Planned : " & Format(Anls.Offset(1, 0).Value, "0.00%") Graph1.Label3.Caption = "% Actual : " & Format(Anls.Offset(2, 0).Value, "0.00%") Graph1.Label4.Caption = "% Cum. Planned : " & Format(Anls.Offset(3, 0).Value, "0.00%") Graph1.Label5.Caption = "% Cum. Actual : " & Format(Anls.Offset(4, 0).Value, "0.00%") Graph1.Label6.Caption = "Planned Cum. Cost : " & Format(Anls.Offset(5, 0).Value, "$ #,##0") Graph1.Label7.Caption = "Actual Cum. Cost : " & Format(Anls.Offset(6, 0).Value, "$ #,##0") Set Grph = Curve.ChartObjects(1).Chart Grph.Export Filename:=Directory & "\" & "Graph_Curve.jpg", filtername:="JPG" Show_Picture End Sub
J'ai adapté le code pour un projet différent, l'échelle de temps de ma courbe est à présent plus importante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub Show_Picture() Dim Directory As String Directory = ThisWorkbook.Path Dim Fichier As String Dim Picture As StdPicture Fichier = Directory & "\" & "Graph_Curve.jpg" Graph1.Image1.Picture = LoadPicture(Fichier) Graph1.Show End Sub
Lorsque que je fais apparaitre mon UserForm voici le résultat:
La courbe qui est générée sur l'onglet Excel est elle même plus grande que la taille que j'ai défini dans le code.
Si l'on regarde la mise en forme de l'UserForm dans l'éditeur de Macros, on peut voir que j'ai mis une marge suffisante à droite de l'image.
Voici les dimension de mon UserForm :
hauteur : 794,25
largeur : 1111.5
Voici ma question:
Comment faire pour la dimension de ma courbe soit respectée?Comment faire pour que la taille de mon UserForm soit également respectée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set Emplacement = Range("B2:P38")
Merci pour vos conseils et votre collaboration
Eric
Partager