Graphique quand tu nous tient...

Résolu
madjb Messages postés 38 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 7 février 2014 - 21 avril 2008 à 10:35
Acta_6 Messages postés 29 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 22 avril 2008 - 21 avril 2008 à 18:18
Bonjour,


J'ai un petit soucis au niveau de génération de graphique. J'ai cherché sur le net mais encore rien trouvé la dessus.


Je me permet de vous demander. J'ai fait une boucle qui génére trois
graphique pour les afficher sur ma feuille acceuil dans excel. Cela
marche parfaitement sauf que les graphiques s'affichent les un sur les
autres... alors que je voudrais qu'ils soient alligné en colonnes.


Avez vous une idée ?

merci d'avance

9 réponses

Acta_6 Messages postés 29 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 22 avril 2008
21 avril 2008 à 13:29
Ben, du coup, tu n'as qu'a insérer dans ta sub graph (après ton end with) les 3 lignes que j'ai mis dans le 1er post. Et tu l'alignes sur la ligne et la colonne que tu veux.

Ca donne quelque chose du style:

Sub graph(selection As Range, iNumGraph as Integer)
    Dim oGraphic As Object

    Charts.Add
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=selection, PlotBy:= _
        xlColumns
      
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Accueil"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = ""
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With

    Set oGraphic = ThisWorkbook.Sheets("Accueil").ChartObjects(ThisWorkbook.Sheets("Accueil").ChartObjects.Count)
    oGraphic.Top = ThisWorkbook.Sheets("Accueil").Rows(1+iNumGraph*20).Top
    oGraphic.Left = ThisWorkbook.Sheets("Accueil").Columns(1).Left
    oGraphic.Name="Graphique 1"
  
End Sub

En admettant que tes graphiques prennent pas plus de 20 lignes de ton classeur. (Et ton iNumGraph valant successivement 0, 1, 2
Sinon, tu peux aussi essayer de récupérer le bas du précédent graphique et de laepasser en paramêtre de ta sub graph.
Du coup, ca ressemblerait plutot a:

Sub graph(selection As Range, byRef lPreviousBottom as Integer)
    Dim oGraphic As Object

    Charts.Add

    ActiveChart.ChartType = xlLineMarkers

    ActiveChart.SetSourceData Source:=selection, PlotBy:= _

        xlColumns

      

    ActiveChart.Location Where:=xlLocationAsObject, Name:="Accueil"

    With ActiveChart

        .HasTitle = True

        .ChartTitle.Characters.Text = ""

        .Axes(xlCategory, xlPrimary).HasTitle = False

        .Axes(xlValue, xlPrimary).HasTitle = False

    End With


    Set oGraphic = ThisWorkbook.Sheets("Accueil").ChartObjects(ThisWorkbook.Sheets("Accueil").ChartObjects.Count)
    if lPreviousBottom = 0 Then
       oGraphic.Top = ThisWorkbook.Sheets("Accueil").Rows(1).Top
    else
        oGraphic.Top = iPreviousBottom
    End If  
    oGraphic.Left = ThisWorkbook.Sheets("Accueil").Columns(1).Left
    lPreviousBottom = oGraphic.Top + oGraphic.height

  

End Sub

Par contre, j'ai jamais testé le coup du height donc ce sera a toi d'essayer si ca t'intéresse.
@+
3
Acta_6 Messages postés 29 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 22 avril 2008
21 avril 2008 à 18:18
Si ton abscisse est toujours la même.
Inutile de le passer en paramêtre de ta sub graph
Tu le définit en "dur" dans ta macro.

Essaie d'utiliser ceci:
ActiveChart.SeriesCollection(1).XValues = "=" & Sname & "!R1C1:R16384C1"
J'ai mis 16384 pour rentrer une ligne mais faut voir ton cas a toi. C'est sensé être la dernière ligne de tes données. Peut-être même qu'il faut mettre dans ton cas la toute dernière ligne d'une feuille excel (65536 je crois).

Ou alors, tu peux essayer:
ActiveChart.SeriesCollection(1).XValues = "=" & Sname & "!C1:C1"

Bref, tu écris cette ligne juste après:
ActiveChart.SetSourceData Source:=selection, PlotBy:= _
        xlColumns
3
Acta_6 Messages postés 29 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 22 avril 2008
21 avril 2008 à 12:09
Tu n'as qu'a utiliser les propriétés Left et Top de ton graphic.
Ex qui devrait marcher: (que tu peux simplifier en fonction de ce que tu veux faire)

Const  GRAPHIC_SHEET="Feuil1"
dim oGraphic as object
dim i1ereLigneDuGraphique1 as integer
dim i1ereColonneDuGraphique1 as integer
dim i1ereLigneDuGraphique2 as integer

dim i1ereColonneDuGraphique2 as integer
dim i1ereLigneDuGraphique3 as integer

dim i1ereColonneDuGraphique3 as integer
 

 

 'Ajout de ton graphique

 'Et après chaque ajout.....
  Set oGraphic = ThisWorkbook.Sheets(GRAPHIC_SHEET).ChartObjects(ThisWorkbook.Sheets(GRAPHIC_SHEET).ChartObjects.Count)
  oGraphic.Top = ThisWorkbook.Sheets(GRAPHIC_SHEET).Rows(i1ereLigneDuGraphique1 ).Top
  oGraphic.Left = ThisWorkbook.Sheets(GRAPHIC_SHEET).Columns(i1ereColonneDuGraphique1).Left
  oGraphic.Name="Graphique 1"
.
.
.

Voili. A toi de jouer.
0
madjb Messages postés 38 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 7 février 2014
21 avril 2008 à 12:23
ok merci de ton aide.


ma boucle est comme ça:




Sub graph(selection As Range)


    Charts.Add

    ActiveChart.ChartType = xlLineMarkers

    ActiveChart.SetSourceData Source:=selection, PlotBy:= _

        xlColumns

      

    ActiveChart.Location Where:=xlLocationAsObject, Name:="Accueil"

    With ActiveChart

        .HasTitle = True

        .ChartTitle.Characters.Text = ""

        .Axes(xlCategory, xlPrimary).HasTitle = False

        .Axes(xlValue, xlPrimary).HasTitle = False

    End With

End Sub

Suivi de cela:


Sub fgraph(Sname As String)

       

        Dim Boucle As Integer

        Dim DerniereValeur As Long

       

   

    DerniereValeur = Worksheets(Sname).Rows(1).Find("").Column - 1

  

   MsgBox DerniereValeur

    For Boucle = DerniereValeur To DerniereValeur - 2 Step -1

   

           Call graph(Worksheets(Sname).Columns(Boucle))

      

    Next

    Set NewSheet = Nothing


End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
madjb Messages postés 38 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 7 février 2014
21 avril 2008 à 13:51
merci je vais essayer
0
madjb Messages postés 38 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 7 février 2014
21 avril 2008 à 13:58
Juste une question dans ma deuxième boucle quand j'appelle ma fonction graph:

Call
graph(Worksheets(Sname).Columns(Boucle),                      
)


je met quoi pour iNumGraph as Integer ?? je vois pas ce qu'il faut mettre...........
0
madjb Messages postés 38 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 7 février 2014
21 avril 2008 à 14:29
Autant pour moi

Il suffit de mettre "boucle" merci infiniment ça marche super bien !!!!!
0
Acta_6 Messages postés 29 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 22 avril 2008
21 avril 2008 à 14:36
De rien et content d'avoir pu t'aider. 
0
madjb Messages postés 38 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 7 février 2014
21 avril 2008 à 16:34
Juste encore un petit soucis


quand j'appelle ma fonction Call graph(Worksheets(Sname).Columns(Boucle)) cela marche parfaitement


Or je voulais mettre en absice les dates qui figure dans la colonne A


En gros Worksheets(Sname).Columns(Boucle) replace "selection" dans


Sub graph (selection As Range)

alors comment ajouter "A:A" ou "A2:A30" à la variable  graph ????
0
Rejoignez-nous