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 :

Positionnement de la zone de traçage avec PlotArea


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier 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
    Points : 77
    Points
    77
    Par défaut Positionnement de la zone de traçage avec PlotArea
    Bonjour, je m'initie aux arcanes de VBA en cherchant à réaliser un VuMêtre à l'aide d'un graphique (demi-anneau, 2 couleurs).
    Ce qui me bloque actuellement c'est le comportement de PlotArea.Top (voir ligne 52 et suivantes)
    Les propriétés Left, Height et Width réagissent normalement mais Top bloque. Le code qui suit retourne la valeur 26,98... au lieu des 20 attendus.
    A quoi correspondent exactement ces propriétés ?
    Vaut-il mieux utiliser les propriétés InsideLeft, InsideTop, etc. ?
    Quelle différence y a-t-il ? (l'aide d'Excel VBA n'est pas explicite)
    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
    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
            Set MaSerie = .SeriesCollection(1)
        'Type de graphique
            .ChartType = xlDoughnut
        'Suppression de la légende
            .HasLegend = False
        'Rotation
            .Rotation = 270
        'Partie gauche en rouge
            .SeriesCollection(1).Points(1).Select
            Selection.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
        'Partie droite en vert
            .SeriesCollection(1).Points(2).Select
            Selection.Format.Fill.ForeColor.RGB = RGB(0, 176, 80)
        'Effacement du secteur inférieur
            .SeriesCollection(1).Points(3).Select
            Selection.Format.Fill.Visible = msoFalse
        '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
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Points : 94
    Points
    94
    Par défaut
    Bonjour,
    Ton probleme ne vient-il pas de ta variable nb?
    J'ai testé ton code mais nb =Shapes.count ne marche pas
    si nb=variable il marche sinon message d'erreur.

    Que veux tu faire exactement avce nb?

  3. #3
    Membre régulier 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
    Points : 77
    Points
    77
    Par défaut
    Bonjour, merci de t'intéresser à mon code.

    La variable nb sert d'index pour désigner le graphique pour la mise à l'échelle qui suit. Ce programme n'est pas parfait, comme je supprime à chaque fois mon graphique, à chaque relance de la procédure c'est le seul donc le dernier, donc celui que je viens de créer. C'est certainement pour cela qu'il ne fonctionne pas correctement pour toi. Je l'ai maintenant remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Nom du graphique
        NomDuGraphe = ActiveChart.Parent.Name
    'Mise à l'échelle du graphique
        With ActiveSheet.Shapes(NomDuGraphe)
    Cet aspect est en rapport avec le second message que j'ai posté (figure actuellement plus loin sur la page 2 du forum), je n'ai pas saisi pourquoi, ici je dois désigner le graphique comme étant un "Shape" pour redimensionner le graphique, ailleurs comme étant un "Chart" pour l'activer, alors que c'est un "ChartObject" pour en obtenir le nom.
    J'ai juste compris qu'un "Chart" représente un graphique seul dans une feuille, un "ChartObject" désigne un graphique incorporé dans une feuille et un "Shape" une désignation encore plus générale de ce qui peut figurer dans une feuille. Dit autrement le "Chart" est un "ChartObject", lui même étant un "Shape".

    Pour revenir au thème de ma question concernant le PlotArea ('Zone de traçage en fin du code) le dimensionnement de la zone de traçage fonctionne avec InsideTop, pas avec Top, alors que pour Left, Height et Width ça fonctionne correctement. Quelle est la différence ? Mystère.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/06/2005, 11h37
  2. [MFC] zone de texte avec "wrap" automatique
    Par bigquick dans le forum MFC
    Réponses: 3
    Dernier message: 21/04/2005, 16h26
  3. forcer le curseur à ce positionner dans une zone texte
    Par caton dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/04/2005, 14h17
  4. Zone de texte avec SDL
    Par bobtux dans le forum OpenGL
    Réponses: 2
    Dernier message: 08/03/2005, 18h47
  5. [FLASH MX2004] Zone de saisie avec scrollbar
    Par carlito dans le forum Flash
    Réponses: 3
    Dernier message: 29/11/2004, 14h30

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