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 :
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 :
Les problèmes que j'ai avec ce code :
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
- 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
J'ai bien essayer de modifier le code de cette façon
Mais j'obtient une erreur sur la ligne
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ActiveChart.SeriesCollection(2).Values = "='feuilSource'!C" & flThisLigTitre + 2 & ": N " & flThisLigTitre + 2
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.
Partager