Graphique avec VBA

charly -  
 Info -
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

  1. Info
     
    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
    1. charly
       
      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
    2. Info
       
      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