Se connecter avec
S'enregistrer | Connectez-vous

excel - taille d'un graphique

Dernière réponse : dans Programmation

me revoila (je suis c*** voir embetant :)  ... je sais !)
bon, je fais un graphique... jusque là pourquoi pas.

J'ai 2 questions
1/ la taille de ma zone de selection peut varier... Je ne trouve pas encore pourquoi cela ne amrche pas....
2/ je voudrais que agrandir mon graphique.
je m'explique : j'ai fais une page avec une mise en page (logo, date, et autres...) et je voudrais que mon graphique prenne le reste de la place sur ma feuille, pour pouvoir l'imprimer...
J'ai vu, dans l'aide, des instructions, mais elle donne au graphique toute la page...
j'ai essayer de la faire avec l'assistant de création de macro, mais quand je la lance, mon graphe est toujours aussi petit....

voici déja ce que j'ai fais :

je fais mon graphique dans l'onglet "graphe TRG"
mes données sont dans l'onglet "TRG"
la taille de ma selection est indiqué dans la cellule I4 (de l'onglet TRG)
LA première cellule de ma selection est C3
la dernière est dans la colonne E

  1. Sub graphe()
  2.  
  3. Dim nouveau_graphique As Chart
  4. Dim nbre As Integer ' n° de ligne de fin de selection
  5. Dim per As Integer
  6. Dim srce_d As Range
  7. Dim zone_select As Range
  8.  
  9. per = Worksheets("TRG").Range("I4").Value+2
  10.  
  11. '// définition de la zone pour le graph
  12. Set srce_d = Worksheets("TRG").Range("C4").End(xlDown)
  13. If srce_d.row > per Then ' juste au cas ou il y aurais moins de lignes
  14. nbre = per
  15. Else
  16. nbre = srce_d.row
  17. End If
  18.  
  19. Set zone_select = Worksheets("TRG").Range(Cells("C4"), Cells(nbre, 5))
  20.  
  21. ' // supprime les raphique existant sur la page
  22. Worksheets("graphe TRG").ChartObjects.Delete
  23.  
  24. ' // on s'occupe du graphe
  25. Set nouveau_graphique = Charts.Add
  26. nouveau_graphique.Name = "graphique"
  27. nouveau_graphique.ChartType = xlLineMarkers
  28. nouveau_graphique.SetSourceData Source:=zone_select, PlotBy:= _
  29. xlColumns
  30. ActiveChart.Location Where:=xlLocationAsObject, Name:="graphe TRG"
  31. With ActiveChart
  32. .HasTitle = True
  33. .ChartTitle.Characters.Text = Worksheets("TRG").Range("A4").Text
  34. .Axes(xlCategory, xlPrimary).HasTitle = False
  35. .Axes(xlValue, xlPrimary).HasTitle = False
  36. .ChartSize = xlFitToPage
  37. End With
  38. ActiveChart.Axes(xlCategory).Select
  39. Selection.TickLabels.NumberFormat = "dd - mmm"
  40.  
  41. End Sub

Autres pages sur : excel taille graphique

Lassé par la pub ? Créez un compte
Expert Programmation

Je veux et j'exige que tu me vire tous les ActiveMachin, et les Select/Selection. C'est source d'erreur et consommateur de ressources. :fou: 

(...zen, coocool, exomil...)

Lignes 13, 14 et 15. Oh, quelqu'un d'intelligent. :) 

Ligne 19. Attention, tu ne précises pas l'onglet pour tes deux Cells ! En plus, Cells n'accepte pas une adresse, mais deux coordonnées. C'est là qu'est ton erreur
Set zone_select = Range(Worksheets("TRG" ).Range("C4" ), Worksheets("TRG" ).Cells(nbre, 5))


Ligne 30 :fou:  cf. exigences

Ligne 31 With.... Ben tant qu'à faire, mets le dès la ligne 26 si tu es fainéant à ce point (mais non, je sais bien que c'est un copier/coller de l'enregistreur de macros ;)  )

Lignes 38/39 :fou:  cf. exigences

je reprends seulement les lignes 19 à 41 :
  1. Set zone_select = Range(Worksheets("TRG").Range("C4"), Worksheets("TRG").Cells(nbre, 4))
  2.  
  3. ' // supprime les raphique existant sur la page
  4. Worksheets("graphe TRG").ChartObjects.Delete
  5.  
  6. '// mise en place du graphe
  7. With Charts.Add
  8. .Name = "graphique"
  9. .ChartType = xlLineMarkers
  10. .SetSourceData Source:=zone_select, PlotBy:= _
  11. xlColumns
  12. End With
  13. With ActiveChart
  14. .Location Where:=xlLocationAsObject, Name:="graphe TRG"
  15. .HasTitle = True
  16. .ChartTitle.Characters.Text = Worksheets("TRG").Range("A4").Text
  17. .Axes(xlCategory, xlPrimary).HasTitle = False
  18. .Axes(xlValue, xlPrimary).HasTitle = False
  19. .Axes(xlCategory).TickLabels.NumberFormat = "dd - mmm"
  20. End With
  21.  
  22. End Sub

mais je suis désolé... je ne te suis pas trop pour la suite...
Citation :
Ligne 30 :fou:  cf. exigences


Ligne 31 With.... Ben tant qu'à faire, mets le dès la ligne 26 si tu es fainéant à ce point (mais non, je sais bien que c'est un copier/coller de l'enregistreur de macros ;)  )


Lignes 38/39 :fou:  cf. exigences
Expert Programmation

:)  Mes exigences :
Citation :
Je veux et j'exige que tu me vire tous les ActiveMachin, et les Select/Selection. C'est source d'erreur et consommateur de ressources.

Donc pas d'ActiveChart !!!!

Qu'est-ce que ActiveChart ? C'est le graphique actif. Et pourquoi serait-il actif ou pas ? Comme je n'en sais rien, je ne travaille pas sur un truc actif mais sur un objet correstement désigné : par son nom, son numéro, par une variable, par ce qu'il y a dans un With, etc.

Code idiot parce qu'on y mélange tout :
  1. Set nouveau_graphique = Charts.Add
  2. nouveau_graphique.Name = "graphique"
  3. ActiveChart.Location Where:=xlLocationAsObject, Name:="graphe TRG"

Code intelligent :
  1. Set nouveau_graphique = Charts.Add
  2. nouveau_graphique.Name = "graphique"
  3. nouveau_graphique.Location Where:=xlLocationAsObject, Name:="graphe TRG"


En condensé, par ce qu'on est fainéant :
  1. With Charts.Add
  2. .Name = "graphique"
  3. .Location Where:=xlLocationAsObject, Name:="graphe TRG"
  4. End With


Comprends-tu ? (Dis moi oui ;)  )

okok, je pense avoir compris...
donc mon code deviendrais (pour le graphe) :

  1. '// mise en place du graphe
  2. With Charts.Add
  3. .Name = "graphique"
  4. .ChartType = xlLineMarkers
  5. .SetSourceData Source:=zone_select, PlotBy:= xlColumns
  6. .Location Where:=xlLocationAsObject, Name:="graphe TRG"
  7. .HasTitle = False
  8. .Axes(xlCategory, xlPrimary).HasTitle = False
  9. .Axes(xlValue, xlPrimary).HasTitle = False
  10. .Axes(xlCategory).TickLabels.NumberFormat = "dd - mmm"
  11. End With


il (excel) n'aime toujours pas la ligne 8.
Et sinon, peut t'on lui donner une localisation plus précise (ligne 7), que seulement l'onglet ? Par exemple, en dessous de la ligne n ou alors dans une plage de donnée prédéfinie ?

une dernière question : si la valeur est False, est on obligé de le mettre ? Y a-t-il une valeur par defaut ?
Expert Programmation

Ah oui, tiens. En fait, la ligne 6 transforme ton Chart en ChartObject. et l'objet nommé "graphique" disparaît. Un nouvel objet est créé. Et on n'a plus la main dessus :/ 

Soluces :
  • Faire tout ce qu'on peut sur le Chart tant qu'on l'a :
    1. With Charts.Add
    2. .Name = "graphique"
    3. .ChartType = xlLineMarkers
    4. .SetSourceData Source:=zone_select, PlotBy:= xlColumns
    5. .HasTitle = False
    6. .Axes(xlCategory, xlPrimary).HasTitle = False
    7. .Axes(xlValue, xlPrimary).HasTitle = False
    8. .Axes(xlCategory).TickLabels.NumberFormat = "dd - mmm"
    9. .Location Where:=xlLocationAsObject, Name:="graphe TRG"
    10. End With

  • Récupérer l'objet ChartObject avec ça :
    1. ChartObjects(ChartObjects.Count)

  • Ne pas créer un Chart, mais directement un ChartObject :
    1. Set niou_tchart = WorkSheets("graphe TRG").ChartObjects.Add


    Pour ce qui est de la localisation, tu veux dire l'emplacement sur la page ? Utilise les propriétés Left, Top, etc de l'objet ChartObject.

    Pour ta dernière question, Teste par toi-même + RTFM.
    L'aide d'Excel te dira si un paramètre est obligatoire ou pas et dans ce dernier cas, quelle est la valeur par défaut.

    ok, merci... tout marche
    pour info : pour déplacer un objet (ici le graphe)
    1. With Worksheets("graphe TRG").ChartObjects(1)
    2. .Left = 20 ' en pixel
    3. .Top = 210
    4. End With


    d'après l'aide, on pourrais faire :
    1. With Worksheets("graphe TRG").ChartObjects(1)
    2. ' aligne le coté gauche du graphe avec la bordure droite de la 1ère colonne
    3. .Left = .columns(1).right
    4. ' aligne le haut du graphe avec le haut de la 15ème ligne
    5. .Top = .rows(15).Top
    6. End With

    mais ce dernier ne fonctionne pas... je ne sais pas trop....

    Encore plus fort dans le graphique : les courbes de tendance.. c'est jolie, mais je m'en sort pas (pour respecter les exigences de ZEB)
    1. With Charts.Add
    2. .Name = "graphique2"
    3. .ChartType = xlLineMarkers
    4. .SetSourceData source:=zone_select, PlotBy:=xlColumns
    5. .HasTitle = False
    6. .Axes(xlCategory, xlPrimary).HasTitle = False
    7. .Axes(xlValue, xlPrimary).HasTitle = False
    8. .Axes(xlCategory).TickLabels.NumberFormat = "dd - mmm"
    9. .Location Where:=xlLocationAsObject, Name:="graphe TRG"
    10. End With
    11.  
    12. With Worksheets("graphe TRG").ChartObjects(2)
    13. .Left = 20
    14. .Top = 470
    15. End With

    puis j'appelle le programme moyenne :
    1. ActiveSheet.ChartObjects(2).Activate
    2. ActiveChart.SeriesCollection(1).Select
    3. ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlLinear, Forward:=1, _
    4. Backward:=0, DisplayEquation:=False, DisplayRSquared:=False, Name:= _
    5. "evolution").Select
    6. ActiveChart.SeriesCollection(1).Trendlines(1).Select
    7. With Selection.Border
    8. .ColorIndex = 3
    9. .Weight = xlThin
    10. .LineStyle = xlContinuous
    11. End With


    j'ai essayé de simplifier, mais je m'embrouille pas mal !!
    1. With Charts.Add
    2. .Name = "graphique"
    3. .ChartType = xlLineMarkers
    4. .SetSourceData source:=zone_select, PlotBy:=xlColumns
    5. .HasTitle = False
    6. .Axes(xlCategory, xlPrimary).HasTitle = False
    7. .Axes(xlValue, xlPrimary).HasTitle = False
    8. .Axes(xlCategory).TickLabels.NumberFormat = "dd - mmm"
    9. .SeriesCollection(1).Trendlines.Add(Type:=xlLinear, Forward:=1, _
    10. Backward:=0, DisplayEquation:=False, DisplayRSquared:=False, Name:= _
    11. "evolution").Select
    12. .SeriesCollection(1).Border.ColorIndex = 3
    13. .SeriesCollection(1).Border.Weight = xlThin
    14. .SeriesCollection(1).Border.LineStyle = xlContinuous
    15. .Location Where:=xlLocationAsObject, Name:="graphe TRG"
    16. End With
    17.  
    18. With Worksheets("graphe TRG").ChartObjects(2)
    19. .Left = 20
    20. .Top = 470
    21. End With

    je sais, il reste un select... mais euh... ben je sais pas !! c la le probleme !!
    et mes lignes 12, 13, 14 ne font rien !! (le programme marche.. mais il saute des lignes !!)
    => il prend la 1ere courbe et pas la courbe tendance, j'ai essayer en mettant "2" ou "evolution" à la place de "1" dans SerieCollection("..")
    en plus, il me fait le graph sur un autre onglet !! bref, je suis pas encore au point !!
    Lassé par la pub ? Créez un compte