Se connecter avec
S'enregistrer | Connectez-vous

macro Excel VBA : Création automatique de 140 graphiques

Dernière réponse : dans Programmation

Bonjour,


Je souhaite générer au moins 140 graphes sur l'évolution sur 1 an de
mes données. Cependant, ce nombre peut varier, je souhaite donc tout automatiser.
Toutefois, j'ai un bug car si j'imagine que toutes mes données sont
sur un fichier et que sur 140 lignes, je créée mes graphes, mon
incrémentation ne marche pas, si je n'ai pas de variable et que je
créée 140 fois le même graphe, ça marche, mais, pour des lignes
différentes, rien, les 140 graphes sont sans courbe, donc, je n'ai pas
su écrire mon incrémentation, un truc que je cherche encore et que je
ne sais pas, donc, si quelqu'un connait mon erreur et vu que je
travaille surtout le soir là-dessus, ça me permettrait d'avancer,
merci !



J'ai compté que ma macro fonctionnera sur 140 courbes à exécuter
automatiquement, ce qui est gros.

J'ai 1 seul bug qui est que ma ligne d'incrémentation, VBA ne la
comprend pas :

Si je créée 5 fois la même courbe, ça marche, mais, si je veux prendre
en compte chaque ligne avec ses données, il crée 5 tableaux vides,
donc, il ne comprend pas ce que j'ai écrit, c'est bien écrit, mais
non, donc, je cherche une autre solution ou où est mon erreur ?



Ceci ne marche pas :

lignier1 = Chr(34) & "=" & "(tableau!R" & i & "C3," & "tableau!R"
& i & "C4," _
& "tableau!R" & i & "C6," & "tableau!R" & i & "C8," & "tableau!R"
& i & "C10)" & Chr(34)

ActiveChart.SeriesCollection(1).Values = lignier1



dans uen cellule, j'ai écrit ce que ça donne :

"=(tableau!R2C3,tableau!R2C4,tableau!R2C6,tableau!R2C8,tableau!R2C10)"

de 2 à 5 comme prévu et il ne me donne aucune courbe ?



J'ai essayé une autre méthode, mais ,j'ai là aussi un problème
d'incrémentation.



Merci.





Sub courbes()
'
' courbes Macro
' Macro enregistrée le 10/02/2007 par pc2
'
'
' version2 Macro
' Macro enregistrée le 09/02/2007 par eric31
'

'maxlig = Range("B65535").End(xlUp).Row
maxlign = 5


For i = 2 To maxlign

Sheets("tableau").Select
Charts.Add
'ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
"Courbes"
ActiveChart.ChartType = xlLine
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = _
"=(tableau!R1C3,tableau!R1C4,tableau!R1C6,tableau!R1C8,tableau!
R1C10)"

lignier1 = Chr(34) & "=" & "(tableau!R" & i & "C3," & "tableau!R"
& i & "C4," _
& "tableau!R" & i & "C6," & "tableau!R" & i & "C8," & "tableau!R"
& i & "C10)" & Chr(34)

ActiveChart.SeriesCollection(1).Values = lignier1

'voir ActiveChart.SeriesCollection(1).Values = _
"=(tableau!R2C3,tableau!R2C4,tableau!R2C6,tableau!R2C8,tableau!
R2C10)"
'"=(tableau!R2C3,tableau!R2C4,tableau!R2C6,tableau!R2C8,tableau!
R2C10)"

ActiveChart.SeriesCollection(1).Name = "=""1ereserie"""

'lignier2 = Chr(34) & "=" & "(tableau!R" & i & "C5," & "tableau!R"
& i & "C7," _
& "tableau!R" & i & "C9," & "tableau!R" & i & "C11,"
& "tableau!R" & i & "C13)" & Chr(34)

'ActiveChart.SeriesCollection(2).Values = lignier2

'ActiveChart.SeriesCollection(2).Values = _
"=(tableau!R(i)C5,tableau!R(i)C7,tableau!R(i)C9,tableau!R(i)
C11,tableau!R(i)C13)"
'tableau!R8C3,tableau!R8C4,tableau!R8C6,tableau!R8C8,tableau!
R8C10

'ActiveChart.SeriesCollection(2).Name = "=""2emeserie"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="graphmaison"

'ActiveChart.Axes(xlCategory).Select
ActiveChart.PlotArea.Select
ActiveChart.ChartType = xlLine
'ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
"Courbes" '"Courbes à deux axes"

With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
'.Axes(xlCategory, xlSecondary).HasTitle = False
'.Axes(xlValue, xlSecondary).HasTitle = False
End With
Sheets("graphmaison").Cells(i, 1) = lignier1

Sheets("tableau").Select

Next
'


'
ActiveSheet.Shapes.AddTextEffect
(msoTextEffect11, "courbes", "Impact", 20#, _
msoFalse, msoFalse, 249#, 147#).Select
Selection.ShapeRange.IncrementLeft 208.5
Selection.ShapeRange.IncrementTop -30.75
Range("H15").Select
End Sub
Lassé par la pub ? Créez un compte

Ok, merci, voici donc le code source :
  1. Sub courbes()
  2. '
  3. ' courbes Macro
  4. ' Macro enregistrée le 10/02/2007 par pc2
  5. '
  6. '
  7. ' version2 Macro
  8. ' Macro enregistrée le 09/02/2007 par eric31
  9. '
  10.  
  11. 'maxlig = Range("B65535" ).End(xlUp).Row
  12. maxlign = 5
  13.  
  14.  
  15. For i = 2 To maxlign
  16.  
  17. Sheets("tableau" ).Select
  18. Charts.Add
  19. 'ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
  20. "Courbes"
  21. ActiveChart.ChartType = xlLine
  22. ActiveChart.SeriesCollection.NewSeries
  23. ActiveChart.SeriesCollection(1).XValues = _
  24. "=(tableau!R1C3,tableau!R1C4,tableau!R1C6,tableau!R1C8,tableau!
  25. R1C10)"
  26.  
  27. lignier1 = Chr(34) & "=" & "(tableau!R" & i & "C3," & "tableau!R"
  28. & i & "C4," _
  29. & "tableau!R" & i & "C6," & "tableau!R" & i & "C8," & "tableau!R"
  30. & i & "C10)" & Chr(34)
  31.  
  32. ActiveChart.SeriesCollection(1).Values = lignier1
  33.  
  34. 'voir ActiveChart.SeriesCollection(1).Values = _
  35. "=(tableau!R2C3,tableau!R2C4,tableau!R2C6,tableau!R2C8,tableau!
  36. R2C10)"
  37. '"=(tableau!R2C3,tableau!R2C4,tableau!R2C6,tableau!R2C8,tableau!
  38. R2C10)"
  39.  
  40. ActiveChart.SeriesCollection(1).Name = "=""1ereserie"""
  41.  
  42. 'lignier2 = Chr(34) & "=" & "(tableau!R" & i & "C5," & "tableau!R"
  43. & i & "C7," _
  44. & "tableau!R" & i & "C9," & "tableau!R" & i & "C11,"
  45. & "tableau!R" & i & "C13)" & Chr(34)
  46.  
  47. 'ActiveChart.SeriesCollection(2).Values = lignier2
  48.  
  49. 'ActiveChart.SeriesCollection(2).Values = _
  50. "=(tableau!R(i)C5,tableau!R(i)C7,tableau!R(i)C9,tableau!R(i)
  51. C11,tableau!R(i)C13)"
  52. 'tableau!R8C3,tableau!R8C4,tableau!R8C6,tableau!R8C8,tableau!
  53. R8C10
  54.  
  55. 'ActiveChart.SeriesCollection(2).Name = "=""2emeserie"""
  56. ActiveChart.Location Where:=xlLocationAsObject, Name:="graphmaison"
  57.  
  58. 'ActiveChart.Axes(xlCategory).Select
  59. ActiveChart.PlotArea.Select
  60. ActiveChart.ChartType = xlLine
  61. 'ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
  62. "Courbes" '"Courbes à deux axes"
  63.  
  64. With ActiveChart
  65. .HasTitle = False
  66. .Axes(xlCategory, xlPrimary).HasTitle = False
  67. .Axes(xlValue, xlPrimary).HasTitle = False
  68. '.Axes(xlCategory, xlSecondary).HasTitle = False
  69. '.Axes(xlValue, xlSecondary).HasTitle = False
  70. End With
  71. Sheets("graphmaison" ).Cells(i, 1) = lignier1
  72.  
  73. Sheets("tableau" ).Select
  74.  
  75. Next
  76. '
  77.  
  78.  
  79. '
  80. ActiveSheet.Shapes.AddTextEffect
  81. (msoTextEffect11, "courbes", "Impact", 20#, _
  82. msoFalse, msoFalse, 249#, 147#).Select
  83. Selection.ShapeRange.IncrementLeft 208.5
  84. Selection.ShapeRange.IncrementTop -30.75
  85. Range("H15" ).Select
  86. End Sub


voilà.

Techneric

Merci, en revanche, j'ai un peu avancé, car je pense que c'est Chr(34) qui ne me done pas " comme je veux, j'ai remplacé le tout par ceci :
lignier1 = "=(tableau!R" & i & "C3," & "tableau!R" & i & "C4," _
& "tableau!R" & i & "C6," & "tableau!R" & i & "C8," & "tableau!R" & i & "C10)"
là, ça marche, j'ai mes courbes, c'est déjà bien, sauf que ce que je n'ai pas compris, c'est que si j'écrit ce que celà donne, Excel ne comprends pas ce contenu, j'ai #VALEUR! mais bon, tant pis, j'ai au moins mes courbes ! Le bug, en revanche et que je voudrai supprimer, c'est que la macro me créée un double du bouton de lancement de la macro, chaque fois que j'appuie sur le bouton macro, le bouton est dupliqué autant de fois que je clique sur ma feuille tableau ?
Est-ce que quelqu'un connait ce bug ?
Merci.

Autant pour moi, Excel m'a enregistré quelque chose que je n'ai pas vu :
ActiveSheet.Shapes.AddTextEffect
(msoTextEffect11, "courbes", "Impact", 20#, _
msoFalse, msoFalse, 249#, 147#).Select
Selection.ShapeRange.IncrementLeft 208.5
Selection.ShapeRange.IncrementTop -30.75
Range("H15" ).Select

Il avait enregistré mon bouton !
Expert Programmation

Balise [CODE] bon sang de bois !

Sinon, je vois que tu t'en sors bien avec l'enregistreur de macro.

Chr(34), c'est bien le caractère ". Par contre, les guillemets ne font pas partie de la chaîne de caractères pour Excel. En revanche, les guillemets servent à délimiter cette chaîne en VB. Donc, en utilisant Chr(34), tu mettais explicitement un guillemet dans ta chaîne.

Je n'ai pas compris ton histoire de #VALEUR!
Vérifie bien tout (Facile à dire :D  ) et reformule ta demande.

Bonjour,
j'ai résolu mon pb en faisant:
xxxxx="= Feuil1!R2C3"
i = 2
xxxxx="=Feuil1!R" & Val(i) & "C3"


brice07 a dit :
Bonjour,


Je souhaite générer au moins 140 graphes sur l'évolution sur 1 an de
mes données. Cependant, ce nombre peut varier, je souhaite donc tout automatiser.
Toutefois, j'ai un bug car si j'imagine que toutes mes données sont
sur un fichier et que sur 140 lignes, je créée mes graphes, mon
incrémentation ne marche pas, si je n'ai pas de variable et que je
créée 140 fois le même graphe, ça marche, mais, pour des lignes
différentes, rien, les 140 graphes sont sans courbe, donc, je n'ai pas
su écrire mon incrémentation, un truc que je cherche encore et que je
ne sais pas, donc, si quelqu'un connait mon erreur et vu que je
travaille surtout le soir là-dessus, ça me permettrait d'avancer,
merci !



J'ai compté que ma macro fonctionnera sur 140 courbes à exécuter
automatiquement, ce qui est gros.

J'ai 1 seul bug qui est que ma ligne d'incrémentation, VBA ne la
comprend pas :

Si je créée 5 fois la même courbe, ça marche, mais, si je veux prendre
en compte chaque ligne avec ses données, il crée 5 tableaux vides,
donc, il ne comprend pas ce que j'ai écrit, c'est bien écrit, mais
non, donc, je cherche une autre solution ou où est mon erreur ?



Ceci ne marche pas :

lignier1 = Chr(34) & "=" & "(tableau!R" & i & "C3," & "tableau!R"
& i & "C4," _
& "tableau!R" & i & "C6," & "tableau!R" & i & "C8," & "tableau!R"
& i & "C10)" & Chr(34)

ActiveChart.SeriesCollection(1).Values = lignier1



dans uen cellule, j'ai écrit ce que ça donne :

"=(tableau!R2C3,tableau!R2C4,tableau!R2C6,tableau!R2C8,tableau!R2C10)"

de 2 à 5 comme prévu et il ne me donne aucune courbe ?



J'ai essayé une autre méthode, mais ,j'ai là aussi un problème
d'incrémentation.



Merci.





Sub courbes()
'
' courbes Macro
' Macro enregistrée le 10/02/2007 par pc2
'
'
' version2 Macro
' Macro enregistrée le 09/02/2007 par eric31
'

'maxlig = Range("B65535").End(xlUp).Row
maxlign = 5


For i = 2 To maxlign

Sheets("tableau").Select
Charts.Add
'ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
"Courbes"
ActiveChart.ChartType = xlLine
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = _
"=(tableau!R1C3,tableau!R1C4,tableau!R1C6,tableau!R1C8,tableau!
R1C10)"

lignier1 = Chr(34) & "=" & "(tableau!R" & i & "C3," & "tableau!R"
& i & "C4," _
& "tableau!R" & i & "C6," & "tableau!R" & i & "C8," & "tableau!R"
& i & "C10)" & Chr(34)

ActiveChart.SeriesCollection(1).Values = lignier1

'voir ActiveChart.SeriesCollection(1).Values = _
"=(tableau!R2C3,tableau!R2C4,tableau!R2C6,tableau!R2C8,tableau!
R2C10)"
'"=(tableau!R2C3,tableau!R2C4,tableau!R2C6,tableau!R2C8,tableau!
R2C10)"

ActiveChart.SeriesCollection(1).Name = "=""1ereserie"""

'lignier2 = Chr(34) & "=" & "(tableau!R" & i & "C5," & "tableau!R"
& i & "C7," _
& "tableau!R" & i & "C9," & "tableau!R" & i & "C11,"
& "tableau!R" & i & "C13)" & Chr(34)

'ActiveChart.SeriesCollection(2).Values = lignier2

'ActiveChart.SeriesCollection(2).Values = _
"=(tableau!R(i)C5,tableau!R(i)C7,tableau!R(i)C9,tableau!R(i)
C11,tableau!R(i)C13)"
'tableau!R8C3,tableau!R8C4,tableau!R8C6,tableau!R8C8,tableau!
R8C10

'ActiveChart.SeriesCollection(2).Name = "=""2emeserie"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="graphmaison"

'ActiveChart.Axes(xlCategory).Select
ActiveChart.PlotArea.Select
ActiveChart.ChartType = xlLine
'ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
"Courbes" '"Courbes à deux axes"

With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
'.Axes(xlCategory, xlSecondary).HasTitle = False
'.Axes(xlValue, xlSecondary).HasTitle = False
End With
Sheets("graphmaison").Cells(i, 1) = lignier1

Sheets("tableau").Select

Next
'


'
ActiveSheet.Shapes.AddTextEffect
(msoTextEffect11, "courbes", "Impact", 20#, _
msoFalse, msoFalse, 249#, 147#).Select
Selection.ShapeRange.IncrementLeft 208.5
Selection.ShapeRange.IncrementTop -30.75
Range("H15").Select
End Sub

Lassé par la pub ? Créez un compte