Se connecter avec
S'enregistrer | Connectez-vous

Macros sur graphiques

Dernière réponse : dans Programmation

Bonjour,

J'essaie d'effectuer une macro sur un graphique excel. Le but de la macro est de faire évoluer le graphique en fonction des données sources qui diffèrent.
Voici ma macro


Dim a, b, c As String
Dim Z_NAT02 As Long
Dim Z_NAT07 As Long


a = CStr(ThisWorkbook.Sheets("Données").Cells(1, 1).Value)
b = CStr(ThisWorkbook.Sheets("Données").Cells(2, 1).Value)
c = a & "\CRS" & b & ".xls"


Workbooks.Open (c)
Workbooks("CRS" & b & ".xls").Sheets("CACE").Activate

Sheets("CACE").Range("U4:U12").Select
ActiveSelection = Z_NAT02
Sheets("CACE").Range("U28:U36").Select
ActiveSelection = Z_NAT07


Workbooks("Graphiques.xls").Sheets("Feuil1").Activate
ActiveSheet.ChartObjects("Graphique 1").Activate
With ActiveChart
.SeriesCollection(1).Values = Z_NAT02
.SeriesCollection(2).Values = Z_NAT07
End With

End Sub


Dans cette macro, la variable a et b me permettent d'ouvrir un autre fichier excel où je retrouve ma plage de données.
Les plages de données Z_NAT02 et Z_NAT07 varient en fonction du fichier ouvert.
Dans mon fichier "Graphiques", le graphique est déjà construit mais sans valeur dans les plages de données.

Je ne comprend pas, excel n'arrive paas à me prendre les valeurs souhaitées.

Je ne sais pas comment ça marche réellement les macros pour les graphiques. Faut il que j'affecte forcément la macro au graphique ou pas ??

Merci d'avance pour vos éclaircissements.

Autres pages sur : macros graphiques

Lassé par la pub ? Créez un compte

Lis les règles de publication et rajoute donc les balises code là ou il faut.
Ensuite as tu mis le code suivant au début de ton module.
  1. Option Explicit


Ensuite je comprends pas bien l'utilisation de Z_NAT... Déjà c'est des variables donc pas de majuscule (c'est beurk...)
Ensuite tu dis qu'elle sont variables mais tu affectes une plage de données fixe (U4U12 dans un cas)

Seriescollection est une collection qui contient les plages de données des différentes courbe qui apparaissent, et non pas les entiers.

mimasis a dit :

Pardon pour les codes... :whistle: 
je remets ma macro avec les codes
je changerai aussi les majuscules de mes variables.

  1. Option Explicit
  2. Dim a, b, c As String
  3. Dim Z_NAT02 As Long
  4. Dim Z_NAT07 As Long
  5.  
  6.  
  7. a = CStr(ThisWorkbook.Sheets("Données").Cells(1, 1).Value)
  8. b = CStr(ThisWorkbook.Sheets("Données").Cells(2, 1).Value)
  9. c = a & "\CRS" & b & ".xls"
  10.  
  11.  
  12. Workbooks.Open (c)
  13. Workbooks("CRS" & b & ".xls").Sheets("CACE").Activate
  14.  
  15. Sheets("CACE").Range("U4:U12").Select
  16. ActiveSelection = Z_NAT02
  17. Sheets("CACE").Range("U28:U36").Select
  18. ActiveSelection = Z_NAT07
  19.  
  20.  
  21. Workbooks("Graphiques.xls").Sheets("Feuil1").Activate
  22. ActiveSheet.ChartObjects("Graphique 1").Activate
  23. With ActiveChart
  24. .SeriesCollection(1).Values = Z_NAT02
  25. .SeriesCollection(2).Values = Z_NAT07
  26. End With
  27.  
  28. End Sub


Concernant les variables, je ne sais pas comment faire comprendre à excel que je veux prendre une plage de données dans un fichier qui sera différent a chaque fois. Je voulais juste dire que Z_NAT.. correspond à une plage de données qu'il doit prendre comme donnée sources. Cette plage de données sera toujours la même mais dans des feuilles ou des classeurs différents.
Je pense que ça ne doit pas être la meilleure solution!!! :) 

PS : rajouter Option Explicit me sert à quoi concrètement ?

Merci Freeman23

Option explicit, ca permet une meilleur vérification quand tu compiles le code.

Si la plage est constante il n'y a rien de compliquer.
  1. Dim a, b, c As String
  2. Dim wbfile as workbook
  3.  
  4.  
  5. a = CStr(ThisWorkbook.Sheets("Données" ).Cells(1, 1).Value)
  6. b = CStr(ThisWorkbook.Sheets("Données" ).Cells(2, 1).Value)
  7. c = a & "\CRS" & b & ".xls"
  8.  
  9. set wbfile = Workbooks.Open (c)
  10. wbfile.Sheets("CACE" ).Activate
  11. Workbooks("Graphiques.xls" ).Sheets("Feuil1" ).Activate
  12. ActiveSheet.ChartObjects("Graphique 1" ).Activate
  13. With ActiveChart
  14. .SeriesCollection(1).Values = wbfile.Sheets("CACE" ).Range("U4:U12" )
  15. .SeriesCollection(2).Values = wbfile.Sheets("CACE" ).Range("U28:U36" )
  16. End With
  17. End Sub


Voilà ca me semble plus judicieux comme ca meme si j'ai pu mal comprendre.
Lassé par la pub ? Créez un compte