Creer un graphique avec plusieurs courbes en VBA

Bonjour tout le monde !

Je voudrais créer une fonction (et non une procédure) qui permettrait de créer un histogramme ou une courbe de densité en fonction des données que l'on lui passe en argument. Je voudrais aussi que cette fonction affiche sur le même graphique la densité de la loi normale (c'est donc celle ci la deuxième courbe). J'aimerais éviter de spécifier un setSourceData car je ne veux pas de plage de données fixes. Je voudrais que cette fonction on puisse l’appeler n'importe ou et que l'on lui passe en arguments la plage de données et hop elle retourne nos histogramme. Je joins ci dessous ma fonction que j'ai commencé à coder. Pour l moment elle prend comme argument des données, et des paramètres optionnel qui sont barplot = true si on veut un graphique en bars ou false si on veut une courbe, et data_display = true si on veut que la fonction retourne un tableau avec dans une première colonne les intervalles des fréquences et dans la secondes les fréquences associées.

Public Function Hist(data As Variant, Optional barplot As Boolean = True, Optional data_display As Boolean = False)
    ' This function take data (returns for example) and display in a graph
    ' the empirical density distribution.
    ' We use the La Rice law for creating classes.

    Dim n As Integer
    n = length(data)
    Dim nb_block As Integer
    nb_block = 2 * Sqr(n)
    Dim data_sorted As Variant
    data_sorted = Application.WorksheetFunction.Sort(data)
    Dim size As Double
    size = (data_sorted(n, 1) - data_sorted(1, 1)) / nb_block

    ' Here we fill a table with the frequency and the corresponding data path.
    Dim i As Double, histogram(), count As Integer
    ReDim histogram(1 To nb_block, 1 To 1)
    count = 1
    For i = data_sorted(1, 1) To data_sorted(n, 1) Step size
        histogram(count, 1) = i + size
        count = count + 1
    Next i

    Dim V_frequency As Variant
    V_frequency = Application.WorksheetFunction.frequency(data_sorted, histogram)
    ' we remove the last element, because frequency function calculate
    'the frequency between ith element until i + 1 element. So it will return
    ' the frequency beyond the last observations. So it will be zero.
    V_frequency = remove(V_frequency)
    ' Here we display in a graph the frequency and the corresponding data paths.
    Dim j As Integer
    ' Here we calcul the frequency in percent
    For j = 1 To nb_block
        V_frequency(j, 1) = (V_frequency(j, 1) / n) * 100
    Next j

    Dim feuille As Worksheet
    Dim Graphique As ChartObject
    Set feuille = Sheets("Feuil1")
    Set Graphique = feuille.ChartObjects.add(60, 50, 500, 300)

    With Graphique.Chart
        If barplot Then
            .ChartType = xlColumnClustered       ' create a barplot
        Else
            .ChartType = xlXYScatterLinesNoMarkers ' create a line plot
        End If
        .SeriesCollection.NewSeries
        .HasTitle = True
        .ChartTitle.Text = "Histogram of density"

        With .SeriesCollection(1)

            .Values = V_frequency
            .XValues = histogram

        End With
    End With
    Set Graphique = Nothing
    Set feuille = Nothing

    ' If the boolean display_data = true, so we return in a table
    ' the intervals with the corresponding frequency.
    If data_display Then
        Dim data_table()
        ReDim data_table(1 To (nb_block + 1), 1 To 2)
        ' we give in the first line the corresponding names
        data_table(1, 1) = "intervals"
        data_table(1, 2) = "frequency"
        For j = 1 To nb_block
            data_table(j + 1, 1) = histogram(j, 1)
            data_table(j + 1, 2) = V_frequency(j, 1)
        Next j
        Hist = data_table
    End If

End Function

Pour le moment m'a fonction marche bien elle retourne mon histogramme en bar ou en ligne en fonction du paramètre choisi. Mais je ne sais pas comment lui dire que je voudrais ajouter en plus une autre courbe. Je voudrais génerer des nombres aléatoires suivant une loi normale puis calculer la fréquence de manière empirique et afficher une courbe (rouge par example) afin de pouvoir comparer les deux densités.

Je vous remercie par avance :)

bonjour,

formule pour générer une donnée aléatoire suivant une loi normale (de moyenne m (A1) et d'écart type s(A2)) (à répéter autant de fois que de données souhaitées)

=LOI.NORMALE.INVERSE.N(ALEA();$A$1;$A$2)

ou pour une utilisation en VBA avec .formula

=NORM.INV(RAND(),$A$1,$A$2)

merci H2so4 mais générer des nombres aléatoires suivant une loi normale me pose aucun problème. Je voudrais savoir comment créer un graphique à plusieurs courbes à partir d'un tableau (et non d'une plage de cellules).

Rechercher des sujets similaires à "creer graphique courbes vba"