IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Création Plusieurs graph sur une feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 49
    Points
    49
    Par défaut Création Plusieurs graph sur une feuille
    Bonjour,
    Avec une macro je cré 5 graph. Pour l'instant pour chaque graph je cré une feuille particuliére (un feuille graph normal !)
    Maintenant j'aimerai ne créer qu'une feuille graph et positionner les 5 graph sur une seule feuille.
    je met le code à l'heure actuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Set MaFeuille = ActiveWorkbook.Sheets("Feuil1")
        MaFeuille.Activate
        With MaFeuille
            Set PlageData = .Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Resize(, 16)
            Set PlageNom = .Range(.Cells(1, 1), .Cells(1, 1).End(xlToRight))
        End With
    For i = 1 To Cells(1, 2).End(xlToRight).Column - 1 Step 3
            Set MonGraphe = ActiveWorkbook.Charts.Add
            MonGraphe.ChartArea.Clear
            MonGraphe.ChartType = xlColumnClustered
            'MonGraphe.ChartType = xlXYScatterLines
     
            Set PlageX = PlageData.Columns(1)
            For compteur = 1 To 3
                Set PlageY = PlageData.Columns(compteur + i)
                Set MaSerie = MonGraphe.SeriesCollection.NewSeries
                With MaSerie
                    .Values = PlageY
                    .XValues = PlageX
                    .Name = PlageNom.Cells(1, 1).Offset(, compteur + i - 1)
                End With
            Next compteur
     
            ActiveChart.PlotArea.Select
            ActiveChart.HasLegend = True
            ActiveChart.Legend.Select
            Selection.Position = xlBottom
     Next i
    Une idée ?!

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour le positionnement du graphe tu peux jeter un coup d'oeil ici, la seconde procédure

    FL1 est l'instance de la feuille de calculs crée dans la première procédure.
    Tu sauras adapter ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Merci !
    Alors si je comprends bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub PositionnerLeGrapheDansExcel(FL1 As Worksheet)
        With FL1.Shapes(FL1.Shapes.Count)
            .Select
            .Top = FL1.Range("D5").Top
            .Left = FL1.Range("D5").Left
        End With
    End Sub
    Tu sélectionnes le dernier shapes (donc le dernier créé je suppose, c'est malin!!) puis tu "ancre" le coin haut gauche du graphe en D5 ?

    Mais pour ça tu as créé ton graphe où ? C'est ça que je ne comprends pas trop. Lorsque tu cré ton graph dans ta permiére procédure, tu cré un nouvel objet "graph" considéré un peut comme une sheet. Or là tu sélectionne le shapes d'une worksheet...

    C'est cette subtilité que je pige pas trop..

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par deniooo
    Mais pour ça tu as créé ton graphe où ?
    Dans une feuille de calculs, pas dans une feuille graphique.
    Lorsque tu crées ton graph dans ta permière procédure, tu crées un nouvel objet "graph" considéré un peut comme une sheet. Or là tu sélectionne le shapes d'une worksheet...
    Si tu le places sur une feuille de calculs, le chart n'a pas la propriété top ni left, un shape si. Tu peux donc positionner un shape.
    Citation Envoyé par l'aide en ligne (extrait)
    Les formes sont représentées par trois objets : la collection Shapes qui représente toutes les formes d'un document, la collection ShapeRange qui représente un sous-ensemble précis de formes dans un document (par exemple, un objet ShapeRange peut représenter les formes 1 et 4 du document) et l'objet Shape qui représente une seule forme du document
    Bonne nuit

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Merci de ta réponse !
    Donc j'en suis là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub CreerLeGraphe()
    Dim FL1 As Worksheet
    Dim Graph As Object
    Dim PlageData As Range, PlageX As Range, PlageY As Range
    Dim MaSerie As Series
    
        Set FL1 = Worksheets("Feuil1")
        With FL1
            Set PlageData = .Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Resize(, 16)
            Set PlageNom = .Range(.Cells(1, 1), .Cells(1, 1).End(xlToRight))
        End With
        
        Set Graph = Charts.Add
        With Graph
            .ChartType = xlColumnClustered 'Histogramme (*)
    '        .SetSourceData Source:=FL1.Range("E1:F9")
            .Location Where:=xlLocationAsObject, Name:=FL1.Name
        End With
        Set PlageX = PlageData.Columns(1)
        Set PlageY = PlageData.Columns(2)
        Set MaSerie = Graph.SeriesCollection.NewSeries
        With MaSerie
            .Values = PlageY
            .XValues = PlageX
            .Name = PlageNom.Cells(1, 1).Offset(, 2)
        End With
    
        'PositionnerLeGrapheDansExcel FL1
    End Sub
    Seulement à l'éxécution, il m'affiche une erreur en pointant la ligne en gras,
    Erreur 404, Objet Requis.

    Je suppose qu'il ne considére pas le "Graph" comme un objet alros que pourtant il est déclaré comme tel..

    Une idée ?

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Une indication : Je n'ai jamais réussi à modifier un graphe sans l'avoir sélectionné... Ce qui ne veut pas dire... mais ça ne doit pas être évident évident...
    Faudrait qu'AlainTech passe par là

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je passe par là mais j'ai très peu d'expérience avec les Graphs.

    Si j'ai un peu de temps c'taprem (pas certain), je vais essayer de jeter un oeil au code de deniooo.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Hop, aprés quelques recherches et surtout beaucoup de tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Set MonGraphe = Charts.Add
            MonGraphe.ChartArea.Clear
            MonGraphe.ChartType = xlColumnClustered
     
            Set PlageX = PlageData.Columns(1)
            For compteur = 1 To 3
                Set PlageY = PlageData.Columns(compteur + i)
                Set MaSerie = MonGraphe.SeriesCollection.NewSeries
                With MaSerie
                    .Values = PlageY
                    .XValues = PlageX
                    .Name = PlageNom.Cells(1, 1).Offset(, compteur + i - 1)
                End With
            Next compteur
     
            ActiveChart.PlotArea.Select
            ActiveChart.HasLegend = True
            ActiveChart.Legend.Select
            Selection.Position = xlBottom
     
            MonGraphe.Location Where:=xlLocationAsObject, Name:="Graphs"

    et c'est surtout cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonGraphe.Location Where:=xlLocationAsObject, Name:="Graphs"[/
    Qui me permet de traiter les graph en objets.

    résolu !

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, pour l'objet Chart, c'est possible mais tu utilises bien une sélection dans ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            ActiveChart.PlotArea.Select
            ActiveChart.HasLegend = True
            ActiveChart.Legend.Select
            Selection.Position = xlBottom
    C'est cette partie que je ne sais pas traiter en tant qu'objet

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    La position que tu vois ici ce n'est que pour la légende du graph !

    Mon principal soucis était de traiter un graphe en tant qu'objet, or là c'est fait

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok mais là, je répondais à ta question "Maintenant j'aimerai ne créer qu'une feuille graph et positionner les 5 graph sur une seule feuille"
    Bon week-end
    A+ pour une autre bonne question

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Regrouper plusieurs graphes sur une seule page
    Par Pur2000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/12/2008, 11h53
  2. Réponses: 21
    Dernier message: 22/05/2008, 15h08
  3. [JpGraph] Plusieurs graphes sur une même page
    Par Dam1en dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/12/2007, 23h13
  4. Imprimer plusieurs page sur une feuille ?!?
    Par Sheriff dans le forum Word
    Réponses: 0
    Dernier message: 19/12/2007, 16h11
  5. [C#][SVG] Combinaison de plusieurs graphe sur une même page
    Par doudoustephane dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/11/2006, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo