Comment visualiser un graphique dans un UserForm ? [haut]
auteur : SilkyRoad
Voici trois possibilités:
1er exemple
Sauvegardez le graphique sur le disque au format image, puis chargez cette image dans l'UserForm:
Vba
Option Explicit
Private Const Fichier As String = "C:\ImageTemp.gif"
Private Sub UserForm_Initialize()
'Supprime l'image temportaire si elle existe
If Dir(Fichier) <> "" Then Kill Fichier
'Définit le 1er graphique de la Feuil1
'exporte le graphique au format image
Worksheets("Feuil1").ChartObjects(1). _
Chart.Export Filename:=Fichier, filtername:="GIF"
'Affiche l'image dans l'UserForm
Image1.Picture = LoadPicture(Fichier)
End Sub
Private Sub UserForm_Terminate()
'Supprime l'image temporaire si elle existe
If Dir(Fichier) <> "" Then Kill Fichier
End Sub
2eme exemple
Utilisez la méthode PastePicture de Stephen Bullen.
Téléchargez la démo
3eme exemple
Utilisez un contrôle ChartSpace dans l'UserForm, afin de créer le graphique dynamiquement et d'interagir avec celui-ci.
Le complément Microsoft Office Web Components (Composants Web) est une collection de contrôles pour modèles d'objets composants (Component Object Model ou COM) permettant de publier sur le Web des feuilles de calcul, des graphiques et des bases de données. Ces contrôles peuvent aussi être utilisés dans vos classeurs Excel.
Complément d'Office 2003: composants Web Office.
Office XP Tool: Web Components.
Un exemple simple de création:
Ajoutez un contrôle Microsoft Office Chart et un CommandButton dans l'UserForm:
Vba
Private Sub CommandButton1_Click()
Dim i As Integer
Dim S1 As Object
Dim TabX(10), TabY(10)
'Utilisez l'objet WCChart pour la bibliothèque OWC9.
'Dim Cht As WCChart
'Utilisez l'objet ChChart dans les bibliothèques OWC10(Office 2002) et OWC11(Office 2003).
Dim Cht As ChChart
Dim C As Object
Randomize
'Remplissage des tableaux qui serviront à créer le graphique
For i = 0 To 9
TabX(i) = i
TabY(i) = Int((50 * Rnd) + 1)
Next i
Set C = ChartSpace1.Constants
Set Cht = ChartSpace1.Charts.Add
With Cht
'Type de graphique
.Type = C.chChartTypeScatterLineMarkers
.HasLegend = True
.Legend.Position = C.chLegendPositionBottom
End With
Set S1 = Cht.SeriesCollection.Add
With S1
.Caption = "Nom de la série"
.Type = C.chChartTypeLine
.SetData C.chDimCategories, C.chDataLiteral, TabX
.SetData C.chDimValues, C.chDataLiteral, TabY
End With
End Sub