Bonjour,

Je souhaite créer une macro VBA permettant de générer automatiquement des graphes a partir d'un tableau Excel provenant d'une feuille X sur une feuille Y

Les données sources sont stockées de cette façon :
Nom : exempleSourceDeDonnée.png
Affichages : 2722
Taille : 103,7 Ko

je souhaite créer des graphes dont le titre comprendra le libelle des "sous tableaux" (actuellement "libelleX") l'axe des abscisse comprenant les mois, pour l'axe des ordonnées comprenant des valeurs de 70% à 100% pour ensuite lier au graphe les 3 régions, leur moyenne ainsi qu'une droite étant la cible (toujours la même valeur)

Pour l'instant mon code fonctionnel est celui ci :

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
 
Sub GenerationGraphiques()
Dim flsource As Excel.Worksheet, fldest As Excel.Worksheet
Dim flThisLigTitre As Long
 
Dim Graphique As Chart, hautergraphe As Long, largeurgraphe As Long, intervale As Long
Dim topDistance As Long, leftDistance As Long
ThisWorkbook.Activate
Sheets("feuilSource").Select
Set flsource = Worksheets("feuilSource")
derLig = Split(flsource.UsedRange.Address, "$")(4)   'Récupère la dernière ligne utilisée de la page
intervale = 50
topDistance = 0
leftDistance = 0
hauteurgraphe = 250
largeurgraphe = 400
 
 
For flThisLigTitre = 9 To derLig
    If (flsource.Cells(flThisLigTitre, 1) <> "") Then
        Sheets("feuilDest").Select
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlLine
        ActiveChart.SetSourceData Source:=Sheets("feuilSource").Range("A9:N13")
        ActiveChart.SeriesCollection(1).XValues = "='feuilSource'!C9:N9"
        ActiveChart.SeriesCollection(2).Values = "='feuilSource'!C11:N11"
        ActiveChart.SeriesCollection(3).Values = "='feuilSource'!C12:N12"
        ActiveChart.SeriesCollection(4).Values = "='feuilSource'!C13:N13"
        ActiveChart.Axes(xlValue).MaximumScale = 1
        ActiveChart.Axes(xlValue).MinimumScale = 0.7
        'Ajout d'un titre
        ActiveChart.HasTitle = True
       With ActiveChart.ChartTitle
            .Characters.Font.Italic = True
            .Characters.Font.Size = 11
            .Text = Cells(flThisLigTitre, 1).Value
        End With
        'Definition de la taille et de l'emplacement du graphe
        With ActiveChart.Parent
            If leftDistance = 50 Then
                leftDistance = leftDistance + largeurgraphe + intervale
                .Top = topDistance
                .Left = leftDistance
            Else
                leftDistance = 50
                topDistance = topDistance + hauteurgraphe + intervale
                .Top = topDistance
                .Left = leftDistance
           End If
                .Width = 400
                .Height = 250
        End With
    End If
    flThisLigTitre = flThisLigTitre + 4
Next
End Sub
Les problèmes que j'ai avec ce code :
  • le graphe est toujours le même car je n'arrive pas à mettre ces cellules en variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            ActiveChart.SetSourceData Source:=Sheets("feuilSource").Range("A9:N13")
            ActiveChart.SeriesCollection(1).XValues = "='feuilSource'!C9:N9"
            ActiveChart.SeriesCollection(2).Values = "='feuilSource'!C11:N11"
            ActiveChart.SeriesCollection(3).Values = "='feuilSource'!C12:N12"
            ActiveChart.SeriesCollection(4).Values = "='feuilSource'!C13:N13"
  • Le titre des graphes ne s'affiche pas
  • je ne sais pas comment ajouter la valeur cible
  • les valeurs en ordonnées sont en numérique (0.7 à 1) et non pas en pourcentage (70% à 100%)


voici le résultat de l’exécution

Nom : ExempleResultatGraphes.png
Affichages : 2682
Taille : 51,0 Ko

J'ai bien essayer de modifier le code de cette façon

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
        ActiveChart.SetSourceData Source:=Sheets("feuilSource").Range("A" & flThisLigTitre & ": N" & flThisLigTitre & 4)
        ActiveChart.SeriesCollection(1).XValues = "='feuilSource'!C" & flThisLigTitre & ": N" & flThisLigTitre
        ActiveChart.SeriesCollection(2).Values = "='feuilSource'!C" & flThisLigTitre + 2 & ": N " & flThisLigTitre + 2
        ActiveChart.SeriesCollection(3).Values = "='feuilSource'!C" & flThisLigTitre + 3 & ": N " & flThisLigTitre + 3
        ActiveChart.SeriesCollection(4).Values = "='feuilSource'!C" & flThisLigTitre + 4 & ": N " & flThisLigTitre + 4
Mais j'obtient une erreur sur la ligne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
        ActiveChart.SeriesCollection(2).Values = "='feuilSource'!C" & flThisLigTitre + 2 & ": N " & flThisLigTitre + 2
Nom : erreur.png
Affichages : 2682
Taille : 62,0 Ko

Pouvez-vous regarder avec moi pour comprendre pourquoi j'ai cette erreur et pour la résoudre,

J'avoue que je ne me suis pas encore penché sur les autres soucis (cités plus haut) mais si vous savez m'aider ce sera vraiment gentil sinon je regarderais après avoir résolu ce problème.

Bonne journée/soirée à vous !
Un grand merci d'avoir lu mon message et un encore plus grand d'y répondre.