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 :

Décalage Chart vs Shape (rectangle,..) [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Par défaut Décalage Chart vs Shape (rectangle,..)
    Bonjour,

    Je cherche un moyen de rajouter des formes à un graphique, c'est à dire en utilisant les coordonnées locales du graphique.

    Le bout de code suivant rajoute une "forme" (servant de support à des graphiques ou autres formes telles que des rectangles) à une feuille de position et de taille aléatoire, afin de ne pas biaiser le test.

    Dans cette même forme, je rajoute une courbe (simple line XY de dimension aléatoire) afin de faire varier les échelles de axes.

    Ensuite, je rajoute une forme (un simple carré) qui est censé recouvrir toute la zone du graphique. C'est le cas, mais j'ai systématiquement un décalage. Avez-vous une explication à ce décalage ? Est-ce possible de directement dessiner une forme en utilisant des coordonnées locale du graphique sans calculer des valeurs absolues avec les .InsideLeft,... ?

    Bien sûr, je ne souhaite pas me limiter à un rectangle recouvrant l'ensemble de la PlotArea... Il ne me semble pas que le décalage est constant suivant les échelles des axes (je ne suis pas sûr que mon programme ci-dessous permet de faire varier le décalage, mais c'est le cas avec mon programme complet).

    Ps : j'ai essayé de changer la position des TickMark (xlNone, xlInside), mais cela ne change rien au décalage.


    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
     
    Option Explicit
     
    Sub test()
     
        Dim ws As Worksheet: Set ws = ActiveSheet
     
        Dim sh As Shape: For Each sh In ws.Shapes
            sh.Delete
        Next sh
     
        Dim left As Double, top As Double, width As Double, height As Double
     
        With ws.Shapes
     
            With .AddChart
     
                'random chart position and size
                .left = Rnd() * Application.UsableWidth
                .top = Rnd() * Application.UsableHeight
                .width = Rnd() * (Application.UsableWidth - .left)
                .height = Rnd() * (Application.UsableHeight - .top)
     
                'set shape relative position (the shape dimension will be set based on the plotArea size)
                left = .left
                top = .top
                width = 0
                height = 0
     
                With .Chart
     
                    .ChartType = xlXYScatterLinesNoMarkers
     
                    'random series (will set the axes)
                    With .SeriesCollection.NewSeries
     
                        .XValues = Array(1000 * Rnd(), 1000 * Rnd())
                        .Values = Array(1000 * Rnd(), 1000 * Rnd())
     
                    End With
     
                    'compute shape absolute position based on shape and chart positions and sizes
                    With .PlotArea
     
                        left = left + .InsideLeft
                        top = top + .InsideTop
                        width = width + .InsideWidth
                        height = height + .InsideHeight
     
                    End With
     
                End With
     
            End With
     
            '--------------------------------------
     
            With .AddShape(msoShapeRectangle, left, top, width, height)
     
                .Fill.Transparency = 0.5
     
            End With
     
        End With
     
    End Sub
    Nom : Capture.PNG
Affichages : 274
Taille : 78,1 Ko

    Merci pour votre aide et Joyeux Noël !

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Par défaut
    Visiblement, je viens de me rendre compte qu'il est quand même possible de rajouter des formes (rectangle,...) directement dans le Chart sans corriger par le décallage de la forme de support, mais juste avec les .InsideLeft,...

    Cela réssoud bien le problème .

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

Discussions similaires

  1. Décalage raster avec shape
    Par mauriceletendu dans le forum R
    Réponses: 0
    Dernier message: 09/12/2014, 10h27
  2. [XL-2010] Rapport entre les objets Shape, ChartObject et Chart
    Par horemheb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/03/2013, 13h46
  3. [XL-2003] D'un objet "Shape" à l'objet "Chart"
    Par JOHN14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/01/2013, 02h07
  4. Réponses: 5
    Dernier message: 11/11/2009, 16h01
  5. Réponses: 5
    Dernier message: 24/08/2008, 21h37

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