Graphique avec VBA

Fermé
charly - 3 mars 2011 à 15:29
 Info - 4 mars 2011 à 14:20
Bonjour tous,

Je vais rentrer directement de le vif du sujet :

Je doit dans le cadre de mon stage en entreprise faire un petit programme qui doit faire un histograme à partir de données pris dans un tableau exel, plus précisement :

On choisis un feuille dans une listbox, on choisis une ligne de debut et une ligne de fin dans 2 combobox on click sur ok et sa fait un histograme en fonction des valeures qui sont comprises entre la valeur de la colone H de la ligne "debut" et la valeur de la colone H de la ligne "fin".

L'histograme doit me faire des baton en fonction du nombre de donnée qui sont dans un intervalle. Par exemple :

donnée : 1 5 6 9 10
intervalle : de 0 à 5=2, de 6 à 10=3, de 10 à 15=0

il faut juste de je programme l'histogramme car le choix de la page et de la ligne de debut et la ligne de fin sont déjà fait.

voici le code à l'heure actuelle :

Private Sub UserForm_Initialize()

'affichage des page dans la listbox1
Dim i As Integer
For i = 1 To Sheets.Count
ListBox1.AddItem Sheets(i).Name
Next

End Sub

Private Sub cmd_quitter_Click()
End
End Sub

Private Sub ListBox1_Click()

'j'utilise la feuille sélectionnée dans la listbox
With Sheets(UserForm.frm_feuilles.ListBox1.Value)
'je met dans un tableau les cellules A1:A et dernière cellule utilisée
tblcombo = .Range("A5:A" & .Range("A" & Rows.Count).End(xlUp).Row)
With UserForm.frm_debut.ComboBox1
'je vide le combobox
frm_debut.ComboBox1 = Clear
'je remplis la combo avec le tbl ci-dessus
frm_debut.ComboBox1.List = tblcombo
End With
With UserForm.frm_fin.ComboBox2
'je vide le combobox
frm_fin.ComboBox2 = Clear
'je remplis la combo avec le tbl ci-dessus
frm_fin.ComboBox2.List = tblcombo
End With

End With

End Sub

je precise que je suis débutant et que l'ont m'a aidé pour faire le programe des combo.

Merci d'avance pour l'aide que vous m'apporterez
Charly

1 réponse

Bonjour,

Voici un exemple de fonction pour une mise à jour d'un graphique de façon
dynamique en VBA:

Function PremierGraphique()

    Dim rngCible As Range, strChaine As String, Compteur As Long
    
    Sheets(strNomFleGraph).Select
    ActiveSheet.ChartObjects("Graphique 6").Activate
    ActiveChart.ChartTitle.Select
    Selection.Characters.Text = "Incidents " & strNomClient & vbLf & "Année : " & LAnnee
    
    ActiveChart.ChartArea.Select
    
    ' Nom de la collection 1
    Set rngCible = Sheets(strNomFleMaitre).Range("B5")
    ActiveChart.SeriesCollection(1).Name = rngCible
    
    ' Valeur de la collection 1
    strChaine = "C" & BlocSection(0).AdrTot & ":N" & BlocSection(0).AdrTot
    Set rngCible = Sheets(strNomFleMaitre).Range(strChaine)
    ActiveChart.SeriesCollection(1).Values = rngCible
    
    ' Abscisse de la collection 1
    Set rngCible = Sheets(strNomFleMaitre).Range("C1:N1")
    ActiveChart.SeriesCollection(1).XValues = rngCible
    
    ' Nom de la collection 2
    strChaine = "B" & (BlocSection(0).AdrFin + 1)
    Set rngCible = Sheets(strNomFleMaitre).Range(strChaine)
    ActiveChart.SeriesCollection(2).Name = rngCible
    
    ' Valeur de la collection 2
    strChaine = "C" & (BlocSection(0).AdrFin + 1) & ":N" & (BlocSection(0).AdrFin + 1)
    Set rngCible = Sheets(strNomFleMaitre).Range(strChaine)
    ActiveChart.SeriesCollection(2).Values = rngCible
    
    ' Abscisse de la collection 2
    Set rngCible = Sheets(strNomFleMaitre).Range("C1:N1")
    ActiveChart.SeriesCollection(2).XValues = rngCible
    
    intMaximum = Application.WorksheetFunction.Max(Sheets(strNomFleMaitre).Range("C5:N5"))
    ActiveChart.Axes(xlValue).Select
    If (intMaximum > 5) Then
        Dummy = Round((intMaximum / 10) + 0.5)
        intMaximum = CInt(Val(Dummy * 10) + 10)
        With ActiveChart.Axes(xlValue)
            .MinimumScale = 0
            .MaximumScale = intMaximum
            .MajorUnit = Round((intMaximum / 4) + 0.5)
            .MinorUnit = Round((intMaximum / 4) + 0.5)
        End With
    Else
        With ActiveChart.Axes(xlValue)
            .MaximumScale = 5
            .MajorUnit = 1
            .MinorUnit = 1
        End With
    End If
    
    Range("A1").Select
    
End Function
''


Cdt

Info
0
et que dois-je faire en amont, je prépare un graphique sans valeure qui sera remplis par le programme? j'insert le graphique sur une page ou sur la userform?
0
re:

Dans mon code, le graphique est situé sur une feuille, il a été crée au préalable et est mise à jour avec ce code.

Cdt

Info
0