Bonjour à tous,
je suis débutant dans le VBA, et je dois faire un petit fichier pour mon travail.

J'ai un tableau qui se remplis au fur et a mesure (un petit formulaire qu'on rempli) et j'aimerais en sortir un graphique dans un userform (question pratique).

Pour cela j'avais commencé par enregistrer une macro sous excel pour comprendre comment créer un tableau, puis je les modifié en mettant une variable pour choisir les coordonnées.

voici le code d'origine :
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
 
Private Sub CommandButton1_Click()
 
'Déclaration de la variable plage pour la textbox'
    plage = TextBox1.Value
 
'Création d'un graphique a partir de la plage selectionner via la variable'
    Charts.Add
'définit le type de graphique, Courbe'
    ActiveChart.ChartType = xlLine
'définit la page d'affichage du graphique, ainsi que la plage'
    ActiveChart.SetSourceData Source:=Sheets("SRV32005").Range(plage)
    ActiveChart.Location Where:=xlLocationAsObject, Name:="SRV32005"
    With ActiveChart
'affichage du titre'
        .HasTitle = True
'nom du titre'
        .ChartTitle.Characters.Text = "Graphique de l'Espace Disque Dur"
'affichage du titre pour l'axe des absices'
        .Axes(xlCategory, xlPrimary).HasTitle = True
'nom du titre de l'axe des absices'
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Dates"
'affichage du titre pour l'axe des ordonnés'
        .Axes(xlValue, xlPrimary).HasTitle = True
'nom du titre de l'axe des ordonnés'
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Tailles (Go)"
    End With
End sub
 
Private Sub CommandButton2_Click()
    Unload graphique
End Sub
Avec ce code mon graphique ce créait dans ma feuille excel.

En fouillant un peu sur le net, j'ai trouvé un code qui permet d'insérer le graphique dans un userform.
J'ai essayé de modifier le code pour ne pas utiliser de listbox et le remplacer par une variable via une textbox mais je n'arrive pas à le faire fonctionner.

voici le code que j'ai trouvé :

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
Option Explicit
Option Base 1
 
   'Nota:
   'Utilisez l'objet WCChart pour la bibliothèque OWC9.
   'Dim Cht As WCChart
 
'Bibliothèques OWC10 et OWC11
Dim Cht As ChChart
Dim C
 
Private Sub UserForm_Initialize()
    Dim x As Byte
 
 
    Set C = ChartSpace1.Constants
    'Ajoute le graphique
    Set Cht = ChartSpace1.Charts.Add
 
    'Alimentation Listbox (Données de la plage G2:G6)
    ' x = 2 to 7 donc entre la ligne du jusqu'a la ligne 7
    For x = 2 To 7
    ' cells(x, 7) récupère les champs dans la liste box a partir de la cellule 7
        ListBox1.AddItem Cells(x, 7)
    Next x
End Sub
 
 
 
Private Sub CommandButton1_Click()
Dim i As Integer, x As Integer
Dim j As Integer
Dim Tableau(7), plage(7)
 
'suppression des séries existantes dans le ChartSpace
For i = Cht.SeriesCollection.Count To 1 Step -1
    Cht.SeriesCollection.Delete i - 1
Next i
 
'Définit les abscisses(plage de cellules H1:N1)
' i= 1 to 7 défini les cellules pour faire le graphique
For i = 1 To 7
    Tableau(i) = Cells(1, 7 + i)
Next i
 
With Cht
    'Permet l'affichage des légendes
    .HasLegend = True
    'Affiche les légendes sous le graphique
    .Legend.Position = chLegendPositionBottom
    'Attribue un titre
    .HasTitle = True
    .Title.Caption = "Mon graphique"
End With
 
 
'Définit le type de graphique
If ToggleButton1.Caption = "Graphique en Barre" Then
    'histogramme en barre
    Cht.Type = C.chChartTypeBarClustered3D
    Else
   'histogramme en colonne
    Cht.Type = C.chChartTypeColumnClustered3D
End If
 
 
'Boucle sur les éléments de la listbox
For j = 0 To ListBox1.ListCount - 1
    'Identifie les items sélectionnés
    If ListBox1.Selected(j) = True Then
 
        'Création de la 1ere série
        If Cht.SeriesCollection.Count > 0 Then Cht.SeriesCollection.Add
 
        'Récupération des ordonnées pour chaque série
        For i = 1 To 7
            plage(i) = Cells(j + 2, 7 + i)
        Next i
 
        With Cht
            'Ajoute le tableau d'abscisses
            .SetData C.chDimCategories, C.chDataLiteral, Tableau
            'Ajoute la légenge pour chaque serie
            .SeriesCollection(x).Caption = Cells(j + 2, 7)
            'Affiche valeur de chaque point
            .SeriesCollection(x).DataLabelsCollection.Add
            'Définit la position des valeurs affichées (au dessus par défaut)
                'Dans la barre pour cet exemple
            .SeriesCollection(x).DataLabelsCollection(0).Position = chLabelPositionCenter
            'Les valeurs de l'histogramme seront affichées en couleur blanche.
            .SeriesCollection(x).DataLabelsCollection(0).Font.Color = RGB(255, 255, 255)
            'Ajoute le tableau d'ordonnées ( Plage() )
            .SeriesCollection(x).SetData C.chDimValues, C.chDataLiteral, plage
            'Définit la couleur de la série
            .SeriesCollection(x).Interior.Color = 50000 * (j + 1)
        End With
 
        x = x + 1
        'Efface le contenu du tableau
        Erase plage
    End If
Next j
 
End Sub
 
 
'Définit le type de graphique
Private Sub ToggleButton1_Click()
    If ToggleButton1.Caption = "Graphique en Barre" Then
        ToggleButton1.Caption = "Graphique en colonne"
        Else
        ToggleButton1.Caption = "Graphique en Barre"
    End If
End Sub
Merci d'avance pour l'aide que vous pourrez m'apporter.