Graphique quand tu nous tient...

Résolu
Signaler
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014
-
Messages postés
29
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
22 avril 2008
-
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

Messages postés
29
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
22 avril 2008

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.
@+
Messages postés
29
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
22 avril 2008

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
Messages postés
29
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
22 avril 2008

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.
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

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
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

merci je vais essayer
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

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...........
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Autant pour moi

Il suffit de mettre "boucle" merci infiniment ça marche super bien !!!!!
Messages postés
29
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
22 avril 2008

De rien et content d'avoir pu t'aider. 
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

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