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
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
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
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
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
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
J'ai adapté le code pour un projet différent, l'échelle de temps de ma courbe est à présent plus importante.
Lorsque que je fais apparaitre mon UserForm voici le résultat:

Nom : Résultat Affichage.jpg
Affichages : 412
Taille : 63,8 Ko

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.

Nom : Dimension User Form.jpg
Affichages : 366
Taille : 63,9 Ko

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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Set Emplacement = Range("B2:P38")
Comment faire pour que la taille de mon UserForm soit également respectée?

Merci pour vos conseils et votre collaboration

Eric