3 pièce(s) jointe(s)
Création automatique de graphe en VBA
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 :
Pièce jointe 280958
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:
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:
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
Pièce jointe 280964
J'ai bien essayer de modifier le code de cette façon
Code:
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:
1 2
|
ActiveChart.SeriesCollection(2).Values = "='feuilSource'!C" & flThisLigTitre + 2 & ": N " & flThisLigTitre + 2 |
Pièce jointe 280969
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.