FORUM Tom's Hardware » Programmation » VB / VBA / VBS » excel - taille d'un graphique
 

excel - taille d'un graphique

Overclocking & Tuning : fifi2191 et 96 utilisateurs inconnus
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : excel - taille d'un graphique
 
Plus d'informations

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
 

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


---------------
    akela
 
Un sourire ne coûte rien et produit beaucoup.

zeb
Profil : Modérateur libre
Plus d'informations

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


Message édité par zeb le 30-10-2007 à 14:25:00

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

je reprends seulement les lignes 19 à 41 :

Code :
  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. 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


---------------
    akela
 
Un sourire ne coûte rien et produit beaucoup.
zeb
Profil : Modérateur libre
Plus d'informations

:) 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 :

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


Code intelligent :

Code :
  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 :

Code :
  1. With Charts.Add
  2.     .Name = "graphique"
  3.     .Location Where:=xlLocationAsObject, Name:="graphe TRG"
  4. End With


 
Comprends-tu ? (Dis moi oui ;) )


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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

Code :
  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 ?


---------------
    akela
 
Un sourire ne coûte rien et produit beaucoup.
zeb
Profil : Modérateur libre
Plus d'informations

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 :

    Code :
    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 :

    Code :
    1. ChartObjects(ChartObjects.Count)

  • Ne pas créer un Chart, mais directement un ChartObject :

    Code :
    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.


Message édité par zeb le 31-10-2007 à 11:19:14

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

ok, merci... tout marche
pour info : pour déplacer un objet (ici le graphe)

Code :
  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 :

Code :
  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....


---------------
    akela
 
Un sourire ne coûte rien et produit beaucoup.
Plus d'informations

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)

Code :
  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 :

Code :
  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 !!

Code :
  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 !!


Message édité par loic_akela le 07-11-2007 à 09:55:31

---------------
    akela
 
Un sourire ne coûte rien et produit beaucoup.

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » excel - taille d'un graphique
 

Annonces Google
Publicité