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 :

Rapport entre les objets Shape, ChartObject et Chart [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut Rapport entre les objets Shape, ChartObject et Chart
    Bonjour, je m'initie aux arcanes de VBA en cherchant à réaliser un VuMêtre à l'aide d'un graphique (demi-anneau, 2 couleurs).
    Dans le code qui suit j'utilise des objets Shape, ChartObject et Chart pour faire référence au même graphique. Puis-je utiliser le même objet (par exemple ChartObject) partout ?
    Un Chart serait un ChartObject qui serait lui-même un Shape !!! est-ce bien cela ?

    Merci pour votre aide

    PS : j'ai posté une autre question sur cette procédure

    Voici la procédure
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Sub Graphique()
    Dim Plage As Variant
    Dim NomDuGraphe As String
    Dim MonVuMetre As Chart
    Dim MaSerie As Series
     
    'Entrée des valeurs de la série
        Plage = Array(20, 30, 50)
    'Création du graphique vide
        ActiveSheet.Shapes.AddChart.Select
    'Nom du graphique
        NomDuGraphe = ActiveChart.Parent.Name
    'Index du graphique (c'est le dernier)
        nb = Shapes.Count
    'Mise à l'échelle du graphique
        With ActiveSheet.Shapes(nb)
        .Left = 30
        .Top = 80
        .Width = 100
        .Height = 100
       End With
    'Mise en forme du graphique
        Set MonVuMetre = ActiveChart
        With MonVuMetre
        'Ajout de la série
            .SeriesCollection.NewSeries.Values = Plage
        'Type de graphique
            .ChartType = xlDoughnut
        'Suppression de la légende
            .HasLegend = False
        'Rotation
            .Rotation = 270
        Set MaSerie = .SeriesCollection(1)
        With MaSerie
        'Partie gauche en rouge
            .Points(1).Select
            Selection.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
        'Partie droite en vert
            .Points(2).Select
            Selection.Format.Fill.ForeColor.RGB = RGB(0, 176, 80)
        'Effacement du secteur inférieur
            .Points(3).Select
            Selection.Format.Fill.Visible = msoFalse
        End With
        'Titre du graphique
            .HasTitle = True
            With .ChartTitle
                .Text = Plage(0)
                .Top = 52
                .Left = 42
                .Font.Size = 9
            End With
        'Zone de traçage
            .PlotArea.Select
            With Selection
                .Left = 20
                .Top = 20
                .Height = 60
                .Width = 60
                MsgBox "Left " & .Left
                MsgBox "Top " & .Top
                MsgBox "Height " & .Height
                MsgBox "Width " & .Width
            End With
        End With
    Cells(1, 1).Select
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Je ne sais pas si ma réponse va t'éclairer. La ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes.AddChart.Select
    crée à la fois un ChartObject et un graphique (Chart). "ChartObject" est un Shape (quand tu en crées un, le compteur de Shapes augmente de 1) qui contient un graphique. Le ChartObject permet l'inclusion du graphique dans la feuille de données. Il n'y a pas de ChartObject quand le graphique est sur une feuille de graphique. L'objet Chart contient les propriétés du graphique indépendamment de l'endroit où il se trouve.
    Je n'ai pas trouvé la question à propos du code. Est-ce que tu as ouvert un autre fil ?

  3. #3
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    Merci Daniel.C de me répondre.
    J'ai joint le code pour l'exemple.
    Quand tu dis :
    crée à la fois un ChartObject et un graphique (Chart)
    je suppose que c'est le même objet

    Pourquoi "ActiveSheet.Shapes.AddChart" crée un "ChartObject", pas un "Chart" ?
    Pourquoi le nom du graphique s'obtient par un "ActiveChart.Parent" alors que pour l'activer un "ActiveChart" suffit ? est-ce que le mystérieux polymorphisme de la POO a frappé une fois encore ?

    Je suis loin d'avoir tout compris

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Quand tu dis :
    crée à la fois un ChartObject et un graphique (Chart)
    je suppose que c'est le même objet
    Pas exactement. Tu crées un "Chartobject" qui lui même contient le graphique. Tu y fais référence avec la syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Graph = ActiveSheet.ChartObjects("GR1").Chart
    Pourquoi "ActiveSheet.Shapes.AddChart" crée un "ChartObject", pas un "Chart" ?
    L'un existe avec l'autre, comme une coquille d'oeuf contient le jaune.

    Pourquoi le nom du graphique s'obtient par un "ActiveChart.Parent" alors que pour l'activer un "ActiveChart" suffit ?
    Le nom du graphique s'obtient par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom = ActiveSheet.ChartObjects("GR1").Chart.Name
    ou :
    si le graphique est sélectionné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom = ActiveChart.Parent.Name
    donne le nom du ChartObject.

  5. #5
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    Merci pour tes explications. J'ai 3000 autres questions mais je vais d'abord essayer de trouver les réponses moi-même.

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

Discussions similaires

  1. [SSRS] Rapport entre les performances et la config
    Par Reskibil dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/10/2007, 16h52
  2. Rapport entre les Webparts et SQL serveur
    Par Louis-Guillaume Morand dans le forum ASP.NET
    Réponses: 1
    Dernier message: 04/10/2007, 16h09
  3. [POO] Mise en cummun de variables entre les objets
    Par ChriGoLioNaDor dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2007, 08h22
  4. Incompatibilité entre les objets
    Par bastoonet dans le forum Designer
    Réponses: 1
    Dernier message: 22/02/2007, 08h51
  5. GLScene et les collisions entre les objets
    Par HopeLeaves dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 13/06/2005, 19h45

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