Création de graphique et modification
Bonjour à toutes et à tous,
Je mets actuellement en place un outil de gestion, cet outil récupère des données, les insère dans un nouveau document créé pour l'occasion, les traite puis propose à l'utilisateur de réaliser des graphiques d'évolutions. J'ai tout d'abord développé cet outil pour Office 2013 et il fonctionne comme je le désire. Le soucis vient du fait que les ordinateurs de mon entreprise tournent sous Office 2003 et que le code sous VBA n'est pas le même.
J'ai réussi à corriger les points de la récolte de données et du traitement, en revanche pour la mise en place des graphiques, cela ne fonctionne plus. Je me suis inspiré de l'enregistreur de macro mais cela à généré des erreurs plus ou moins importantes.
La méthode de création de graphique insère un nouvel onglet dans le fichier dans lequel j'ai mon code au lieu de le mettre dans le fichier "nouveau" où se trouvent les données.
Les données si elles se trouvent dans le fichier "nouveau" font planter Excel (Erreur '-2147417848(80010108)' Erreur Automation. L'objet invoqué s'est déconnecté de ses clients.), j'ai contourné le problème en copiant les données nécessaires à la création de mon graph sur le document Excel où se trouve mon code.
J'ai ensuite essayé de copier le graphique créé pour le coller dans mon document "nouveau" mais cela le créé dans un autre classeur.
J'en suis là et ne voit pas de solutions malgré mes recherches précédentes.
Je précise que je suis autodidacte sur VBA d'où les choses moches qui peuvent se glisser dans mon code.
Je joins mon code qui traite de la partie en lien avec le(s) graphique(s) et suis à disposition sans limite de temps ni d'heure pour apporter les informations qui pourraient être manquantes.
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 57
| 'récupération des données pour graph
Dim PosDonnees As String
z = 1
For i = 1 To CompteurUF2LB
For j = 2 To DernLigne
If ThisWorkbook.Sheets("Feuil5").Range("A" & i).Value = "" Then 'Test valeur vide
Exit For
ElseIf ThisWorkbook.Sheets("Feuil5").Range("A" & i) = xlBook.Sheets("Feuil1").Range("A" & j) Then 'Mise en place de la marge
xlBook.Sheets("F4").Range("A" & z + 1) = ThisWorkbook.Sheets("Feuil5").Range("B" & i)
xlBook.Sheets("F4").Range("B" & z + 1) = "CA"
xlBook.Sheets("F4").Range("B" & z + 2) = "Marge %"
xlBook.Sheets("F4").Range("B" & z + 3) = "Perte %"
x = 11
y = 3
While y <= NbMois + 3 'Récupération des données en fonction des graphiques désirés par l'utilisateur
Lettr = Split(Cells(1, x).Address, "$")(1)
LettrBis = Split(Cells(1, x - 1).Address, "$")(1)
LettrTer = Split(Cells(1, x - 2).Address, "$")(1)
LettrF4 = Split(Cells(1, y).Address, "$")(1)
xlBook.Sheets("F4").Range(LettrF4 & z + 1) = xlBook.Sheets("Feuil1").Range(Lettr & j)
xlBook.Sheets("F4").Range(LettrF4 & z + 2) = xlBook.Sheets("Feuil1").Range(LettrBis & j)
xlBook.Sheets("F4").Range(LettrF4 & z + 3) = xlBook.Sheets("Feuil1").Range(LettrTer & j)
y = y + 1
x = x + 9
Wend
LettrGph = Split(Cells(1, NbMois + 3).Address, "$")(1)
PosDonnees = "B" & z + 1 & ":" & LettrGph & z + 3
xlBook.Sheets("F4").Cells.Copy
ThisWorkbook.Sheets("Feuil7").Paste 'Copie des données du document initial
Set sourcRange = ThisWorkbook.Sheets("Feuil7").Range(PosDonnees)
xlBook.Sheets("Graphs").Activate
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=sourcRange, PlotBy:= _
xlRows
'ActiveChart.SeriesCollection(1).XValues = "='F4'!R1C3:R1C6"
'ActiveChart.SeriesCollection(2).XValues = "='F4'!R1C3:R1C6"
'ActiveChart.SeriesCollection(3).XValues = "='F4'!R1C3:R1C6"
'ActiveChart.Location Where:=xlLocationAsObject, Name:="Graphs"
With Charts(i)
.HasTitle = True
.ChartTitle.Characters.Text = xlBook.Sheets("F4").Range("A" & z + 1)
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.SeriesCollection(3).Select
ActiveChart.SeriesCollection(3).AxisGroup = 2
ActiveChart.SeriesCollection(2).Select
ActiveChart.SeriesCollection(2).AxisGroup = 2
Sheets("Graph" & i).Copy
xlBook.Sheets.Add
ActiveSheet.Name = xlBook.Sheets("F4").Range("A" & z + 1)
ActiveSheet.Paste
z = z + 3
End If
Next
Next |
Merci d'avance à ceux qui prendront le temps de se pencher sur mes problèmes.
Cordialement,
Nyectod