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 :

Modifier la taille des polices d'un graph en boite à moustache [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Santé
    Inscrit en
    Février 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Février 2022
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Modifier la taille des polices d'un graph en boite à moustache
    Bonjour à tous,

    j'ai un souci pour gérer mon graphique en boite à moustache (sachant que j'ai déjà eu bcp de mal à trouver comment le créer).
    Je voudrais modifier la taille du titre, de l'axe des ordonnées et de la légende mais tous mes essais avec des commandes type ".Font.Size" ont échouées.
    Est-ce que cela peut venir du fait que le graphique est créer via .Shape et non .Chart

    Merci pour toute aide.

    Physm

    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
        With ActiveSheet
     
            .Shapes.AddChart2(406, xlBoxwhisker, 400, 100, 700, 400, True).Select
     
                With ActiveChart
     
                    ActiveChart.Axes(xlCategory).TickLabels.Delete
     
                    .Axes(xlValue).HasTitle = True
                    .Axes(xlValue).AxisTitle.Text = "PDL (mGy.cm)"
     
                    .HasLegend = True
                    .Legend.Position = xlBottom
     
                    .HasTitle = True
                    .ChartTitle.Text = "Infiltration"
     
                End With
     
        End With

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Je ne comprends pas trop ce que tu souhaites faire mais tu ne peux pas supprimer un axe qui n'existe pas

    Nom : 2022-02-24_16h44_47.png
Affichages : 374
Taille : 25,5 Ko
    la collection Axes contient 0 axe.
    Tu as essayé d'utiliser l'enregistreur de Macro pour te donner les grandes lignes?

    Voila une modification du code, qui ne résoudra pas ton problème mais sera plus robuste

    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
    Sub essai()Dim MyShape As Shape
        With Feuil1
            Set MyShape = .Shapes.AddChart2(406, xlBoxwhisker, 400, 100, 700, 400, True)
     
                With MyShape.Chart
     
                    .Axes(xlCategory).TickLabels.Delete
     
                    .Axes(xlValue).HasTitle = True
                    .Axes(xlValue).AxisTitle.Text = "PDL (mGy.cm)"
     
                    .HasLegend = True
                    .Legend.Position = xlBottom
     
                    .HasTitle = True
                    .ChartTitle.Text = "Infiltration"
     
                End With
     
        End With
     
     
    End Sub
    [Edit]
    Tu devrais sans doute ajouter les données vers les données avant de commencer à vouloir modifier les axes

    Pour info, le chart se sert d'une shape comme container.
    [/Edit]
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre à l'essai
    Homme Profil pro
    Santé
    Inscrit en
    Février 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Février 2022
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Bonjour Qwazerty

    merci pour ta réponse.

    Je réponds à tes interrogations :

    - dans une feuille, j'ai 3, 4 ou 5 colonnes de données. En insérant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Shapes.AddChart2(406, xlBoxwhisker, 400, 100, 700, 400, True)
    , toutes les colonnes sont correctement sélectionnées (quelques soit leurs nombres) donc pour ne pas alourdir mon code, je n'ai pas voulu définir une plage de données.

    - quand un graphe en boite à moustache est créé, il n'y a effectivement pas d'axe des abscisses mais l'étiquette de l'axe apparait quand même avec "1", donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Axes(xlCategory).TickLabels.Delete
    c'est jute pour supprimer ce "1"

    - malheureusement l'enregistreur de macro affiche juste un désespérant +

    Physm

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    ... Je n'avais pas pensé à pointer des données... Je n'utilise jamais les graph :p

    Voila ça devrait le faire
    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
    Sub essai()
    Dim MyShape As Shape
        With Feuil1
            Set MyShape = .Shapes.AddChart2(406, xlBoxwhisker, 400, 100, 700, 400, True)
     
                With MyShape.Chart
                    .Axes(xlCategory).TickLabels.Delete
     
                    .Axes(xlValue).HasTitle = True
                    .Axes(xlValue).AxisTitle.Text = "PDL (mGy.cm)"
     
                    .HasLegend = True
                    .Legend.Position = xlBottom
     
                    .HasTitle = True
                    '.ChartTitle.Text = "Infiltration"
                    .ChartTitle.Characters.Font.Size = 20
                    .ChartTitle.Caption = "Essai2"
                End With
     
        End With
     
     
    End Sub
    [Edit] .Caption ou .Text ça revient au même[/Edit]
    Par contre si tu défini la taille après le changement de texte, il faut rafraichir le graph pour que ça prenne effet....

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut

    Pour intégrer les données, j'ai voulu utiliser SetSourceData plutôt que de passer par une sélection avant le création du tableau mais j'avoue que je reste dubitation devant l'erreur soulevé par le code.
    Les données sont bien prisent en compte mais le code génère une erreur.
    Citation Envoyé par Message d'erreur
    "Cette objet ne gère pas cet action"
    J'ai mis un On error resume next... mais c'est très laid... Je n'en suis pas bien fière ^^/
    Si quelqu'un passe par la, je serait curieux d'en connaitre la raison, j'ai trouvé des post qui parle de d'activation du sheet mais rien n'y fait chez moi.
    D'ailleurs .Refresh provoque la même erreur...


    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
    Sub essai()
    Dim MyShape As Shape, MyChart As Chart
        With Feuil1
            Set MyShape = .Shapes.AddChart2(406, xlBoxwhisker, 400, 100, 700, 400, True)
            Set MyChart = MyShape.Chart
                With MyChart
                    On Error Resume Next 'oui c'est laid... mais sinon la ligne fonctionne mais crée une erreur...
                    .SetSourceData Feuil1.ListObjects("Tableau1").Range
                    On Error GoTo 0
                    .Axes(xlCategory).TickLabels.Delete
     
                    .Axes(xlValue).HasTitle = True
                    .Axes(xlValue).AxisTitle.Text = "PDL (mGy.cm)"
     
                    .HasLegend = True
                    .Legend.Position = xlBottom
     
                    .HasTitle = True
                    '.ChartTitle.Text = "Infiltration"
                    .ChartTitle.Characters.Font.Size = 30
                    .ChartTitle.Text = "Essai2"
                    '.Refresh
                End With
        End With
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre à l'essai
    Homme Profil pro
    Santé
    Inscrit en
    Février 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Février 2022
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Merci Qwazerty!

    je n'avais pas vu qu'il fallait passer par la propriété Character. Donc ça marche bien pour le titre du graphique et et le titre de l'axe des ordonnées.

    Pour l'étiquette de l'axe des ordonnées, j'utilise .Axes(xlValue).Tick.Labels.Font.Size = 20 mais j'obtiens
    Erreur 438 Propriété ou Méthode non gérée par cette objet.
    Pourtant j'ai l'impression de bien dérouler les propriétés. J'ai même vu cette ligne dans d'autre réponse sur le forum

    Pour la légende c'est pire : .Legend.Font.Size = 20 fait complètement crasher excel.

    Physm

  7. #7
    Membre à l'essai
    Homme Profil pro
    Santé
    Inscrit en
    Février 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Février 2022
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Oups

    evidemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Axes(xlValue).Tick.Labels.Font.Size = 20
    ne marche pas et c'est normal

    celle que j'utilise, qui ne marche pas et je ne comprends pas pourquoi est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Axes(xlValue).TickLabels.Font.Size = 20

  8. #8
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Pour intégrer les données, j'ai voulu utiliser SetSourceData plutôt que de passer par une sélection avant le création du tableau mais j'avoue que je reste dubitation devant l'erreur soulevée par le code.
    Les données sont bien prises en compte mais le code génère une erreur.
    J'ai mis un On error resume next... mais c'est très laid... Je n'en suis pas bien fière ^^/
    Si quelqu'un passe par la, je serait curieux d'en connaitre la raison, j'ai trouvé des post qui parle de d'activation du sheet mais rien n'y fait chez moi.
    D'ailleurs .Refresh provoque la même erreur...
    Bonjour.
    il faudrait tester en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Charts(1).SetSourceData Feuil1.ListObjects("Tableau1").Range
    et : et peut-être remplacer 1 par le bon numéro de l'objet.
    Cordialement.

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Citation Envoyé par laurent_ott Voir le message
    il faudrait tester en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Charts(1).SetSourceData Feuil1.ListObjects("Tableau1").Range
    et :
    Le problème c'est que je ne trouve pas de collection Charts dans l'objet Worksheet.
    Il faut passer par l'objet Shape (donc shapes(x)) pour atteindre l'objet Chart, je pense que c'est assez logique, puisque comme je l'ai dit plus haut, je pense que le Chart utilise le shape comme container.

    Le code correspondant et celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Shapes("Graphique 1").Chart.SetSourceData Feuil1.ListObjects("Tableau1").Range
    Je l'avais déjà testé et de toute façon cette ligne pointe le même objet.

    @Physm : Oui c'est la même erreur qui pointe sur plusieurs propriété et méthode (dont celle que je traite avec le on error resume next). Je ne comprends pas.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Modifier la taille des bulles dans un graphe à bulles
    Par keepcalm dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/06/2014, 11h41
  2. Réponses: 2
    Dernier message: 20/02/2006, 16h06
  3. modifier la police et la taille des polices
    Par gilleski2010 dans le forum C++
    Réponses: 1
    Dernier message: 28/12/2005, 12h03
  4. Réponses: 1
    Dernier message: 12/09/2005, 14h31
  5. [Kylix] Taille des police dans kylix
    Par merzhin dans le forum EDI
    Réponses: 2
    Dernier message: 04/09/2004, 21h18

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