Affichage d'un historgamme

Fermé
mimiyassin Messages postés 8 Date d'inscription samedi 23 mars 2013 Statut Membre Dernière intervention 4 mai 2013 - Modifié par mimiyassin le 4/05/2013 à 19:55
Bonjour,
j'ai ecrie un programme qui affiche un histogramme dans une feuil de Excel :
le 1er problème je sais pas comment je peux l'affichée ce histogramme dans la position que je veux , et 2eme c'est que dans la feuil ou je vais affichée ce histogramme contient déjà des autres graphe et une foie j'affiche ce histogramme les autres graphe se disparue
voila le code :
Sub Macro1()

' Définition des variables et tableaux
Dim Grf As ChartObject
Dim Sh As Worksheet
Dim tab_e()
Dim d_l As Integer
Dim d_c As Integer
Dim tab_min()
Dim tab_max()
Dim tab_fr()
Dim i As Integer
Dim j As Integer
Dim l As Integer
Dim n As Integer
Dim min As Single
Dim max As Single
Dim etendu As Single
Dim k As Integer
Dim amplitude As Integer
Dim temp As Integer

param.Show  'Affichage de la boite de dialogue pour le choix de la plage
d_l = Range(param.RefEdit).Rows.Count   'Largeur de la plage
d_c = Range(param.RefEdit).Columns.Count 'Longueur de la plage

' Redimensionnement du tableau de données
n = d_l * d_c
ReDim tab_e(d_c - 1, d_l - 1)

'Remplissage du tableau des données des échantillons
For i = 0 To d_c - 1
    For j = 0 To d_l - 1
        tab_e(i, j) = Cells(Range(param.RefEdit.Value).Row + j, Range(param.RefEdit.Value).Column + i)
    Next
Next

'Calcule des paramètres
max = Application.WorksheetFunction.max(tab_e)
min = Application.WorksheetFunction.min(tab_e)
etendu = max - min
k = 1 + (10 * Application.WorksheetFunction.Log10(n)) / 3
amplitude = etendu / k


'Redimensionnement tableau
ReDim tab_min(k - 1)
ReDim tab_max(k - 1)
ReDim tab_fr(k - 1)

'Remplissage du tableau de limites inférieurs des classes
tab_min(0) = min
For i = 1 To k - 1
    tab_min(i) = tab_min(i - 1) + amplitude
Next

'Remplissage du tableau de limites supérieurs des classes
tab_max(0) = min + amplitude
For i = 1 To k - 1
    tab_max(i) = tab_max(i - 1) + amplitude
Next

'Remplissage du tableau de fréquences
For i = 0 To k - 1
    temp = 0
    For j = 0 To d_l - 1
        For l = 0 To d_c - 1
            If (tab_e(l, j) >= tab_min(i) And tab_e(l, j) < tab_max(i)) Then temp = temp + 1
        Next
    Next
    tab_fr(i) = temp
Next

'Arrondir le tableau des limites supérieurs des classes
For i = 0 To k - 1
    tab_max(i) = Application.WorksheetFunction.Round(tab_max(i), 2)
Next

'Affichage des paramètres
Range("M2") = Application.WorksheetFunction.Round(max, 2)
Range("M3") = Application.WorksheetFunction.Round(min, 2)
Range("M4") = n
Range("M5") = Application.WorksheetFunction.Round(etendu, 2)
Range("M6") = k
Range("M7") = amplitude
  
'Suppression des graphes
Set Sh = Sheets("Feuil1")
For Each Grf In Sh.ChartObjects
    Grf.Delete
Next Grf

'Création graphique
Charts.Add
'Définit la localisation du graphique:
ActiveChart.Location _
Where:=xlLocationAsObject, Name:="Feuil1"
    

'Ajoute une série dans le graphique
With ActiveChart
        .SeriesCollection.NewSeries
        .SeriesCollection(1).XValues = tab_max() 'Abscisses
        .SeriesCollection(1).Values = tab_fr() 'Ordonnées

        'Définit le type (Courbe)
        .ChartType = xlColumnClustered
        .SeriesCollection(1).Name = "Frequence"
        .ChartWizard _
        Title:="Histogramme fréquence"
End With

'Affichage du tableau de fréquence
For i = 0 To k - 1
    Cells(11 + i, 12) = Application.WorksheetFunction.Round(tab_min(i), 2)
    Cells(11 + i, 13) = Application.WorksheetFunction.Round(tab_max(i), 2)
    Cells(11 + i, 14) = tab_fr(i)
    Cells(11 + i, 11) = i + 1
Next
               
'libérer la mémoire
Set Grf = Nothing
Set Sh = Nothing

End Sub

Je vous remercie de vos réponses.