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 :

Modification des axes d'un graphique par Macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut Modification des axes d'un graphique par Macro
    Bonjour,
    Je veux modifier les valeurs mim et max d'un axe d'un graphique "Nuage de points" existant.
    Je créé une macro grâce à l'enregistreur de macros.
    Lorsque je lance la macro, j'obtiens dès la première ligne (ligne 6) l'erreur 1004 Erreur définie par l'application ou par l'objet.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Option Explicit
     
    Sub changer_echelle()
    ' changer_echelle Macro
        ActiveSheet.ChartObjects("Graphique 4").Activate
        ActiveChart.ChartArea.Select
        ActiveSheet.ChartObjects("Graphique 4").Activate
        ActiveChart.Axes(xlCategory).Select
        ActiveChart.Axes(xlCategory).MinimumScale = 0
        ActiveChart.Axes(xlCategory).MinimumScale = 1
        ActiveChart.Axes(xlCategory).MaximumScale = 0
        ActiveChart.Axes(xlCategory).MaximumScale = 5
    End Sub
    Je ne comprends pas où est l'erreur car, lors de la l'enregistrement de la macro, les nouvelles valeurs d'axes ont été respectées sans problème.
    Il y a plusieurs jours que je butte sur ce problème de manipulation par macro des axes d'un graphique.
    Je suis quasi certain que la cause de cet dysfonctionnement doit être élémentaire pour un habitué du VBA ... ce qui n'est pas mon cas.
    Quelqu'un entendra-t-il mon SOS ? ;o)
    Merci de m'avoir lu.
    cordialement,
    Jean Le Brun

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il est probable que tu essayes de lancer cette macro dans une feuille qui n'est pas celle où tu as enregistré la macro, non ?
    Je pense donc que le graphique de la page en question ne s'appelle pas "Graphique 4".

    Le plus simple est que tu sélectionne "à la main" le graphique sur lequel tu veux lancer ta macro et que tu limites celle-ci à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub changer_echelle()
        ActiveChart.Axes(xlCategory).MinimumScale = 0
        ActiveChart.Axes(xlCategory).MinimumScale = 1
        ActiveChart.Axes(xlCategory).MaximumScale = 0
        ActiveChart.Axes(xlCategory).MaximumScale = 5
    End Sub
    Mais, à mon avis, il doit y avoir une erreur : il semble illogique de définir deux fois le maximum et le minimum pour le même Axe (celui des abscisse).
    A mon avis, il y a deux xlCategory qui sont à remplacer par des xlValue.

  3. #3
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    Bonjour Menhir,

    Là, à peu près sûr de mon coup : tu es breton ! ... non ?
    Pour mon compte : mi-breton, mi-gascon :o)


    Citation Envoyé par Menhir Voir le message
    Il est probable que tu essayes de lancer cette macro dans une feuille qui n'est pas celle où tu as enregistré la macro, non ?
    Je ne suis pas très sûr de moi en répondant à ta question vu que j'en suis au b a ba :
    Dans la fenêtre "projet", j'ai ceci :
    Nom : projet_triangle_qq.png
Affichages : 5305
Taille : 9,9 Ko
    La feuille contenant le graphique "Graphique4" est "Feuil1 (Accueil)" et la macro "changer_echelle" se trouve dans Module 3.

    Citation Envoyé par Menhir Voir le message
    Je pense donc que le graphique de la page en question ne s'appelle pas "Graphique 4".
    Si, c'est bien son nom, je l'ai vérifié avec la macro ci-dessous (elle aussi dans "module 3") qui fournit bien la valeur "Graphique 4" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ListeChart()
    Dim c As ChartObject
    For Each c In ActiveSheet.ChartObjects
        MsgBox c.Name
    Next
    End Sub
    Citation Envoyé par Menhir Voir le message
    Le plus simple est que tu sélectionne "à la main" le graphique sur lequel tu veux lancer ta macro et que tu limites celle-ci à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub changer_echelle()
        ActiveChart.Axes(xlCategory).MinimumScale = 0
        ActiveChart.Axes(xlCategory).MinimumScale = 1
        ActiveChart.Axes(xlCategory).MaximumScale = 0
        ActiveChart.Axes(xlCategory).MaximumScale = 5
    End Sub
    Bien que je souhaite que cette sélection soit assurée par la macro et à titre de test, j'ai suivi ton conseil :
    J'ai réduit ma macro à (CtrlC + Ctrl V) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
     
    Sub changer_echelle()
        ActiveChart.Axes(xlCategory).MinimumScale = 0
        ActiveChart.Axes(xlCategory).MinimumScale = 1
        ActiveChart.Axes(xlCategory).MaximumScale = 0
        ActiveChart.Axes(xlCategory).MaximumScale = 5
    End Sub
    Suite des opérations :
    Rappel de la feuille "Accueil" (où est "Graphique 4"), sélection de "Graphique 4" part un clic, lancement de la macro "changer_echelle", résultat décevant :
    Nom : erreur.png
Affichages : 5211
Taille : 8,7 Ko

    Mais, à mon avis, il doit y avoir une erreur : il semble illogique de définir deux fois le maximum et le minimum pour le même Axe (celui des abscisse).
    C'est pourtant l'enregistreur qui a "fabriqué" la macro !!!
    J'ai l'impression de buter toujours sur le même problème : il semble que je ne suis pas autorisé à toucher à l'objet Chart ???

    A mon avis, il y a deux xlCategory qui sont à remplacer par des xlValue.
    Vu que çà plante avant, je n'ai pas testé cette modification :o(

    Au lieu d'avancer en connaissances du VBA, j'ai l'impression d'en comprendre de moins en moins de "règles".
    Merci beaucoup à toi de tenter de me sortir de mon "moyen âge" ;o)
    Très cordialement,
    Jean Le Brun
    Images attachées Images attachées  

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par CyranOrion Voir le message
    Mais, à mon avis, il doit y avoir une erreur : il semble illogique de définir deux fois le maximum et le minimum pour le même Axe (celui des abscisse).
    C'est pourtant l'enregistreur qui a "fabriqué" la macro !!!
    Il est quand même étrange de demander que me minimum d'un axe soit 0 et, la ligne suivante, demande que le même minimum du même axe soit 1, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ListeChart()
    Dim c As ChartObject
    For Each c In ActiveSheet.ChartObjects
        MsgBox c.Name
    Next
    End Sub
    Quand tu fais ce type de vérification, je te conseille de passer par Debug.Print plutôt que par MsgBox qui implique l'ouverture d'une fenêtre et une validation.
    Le résultat de Debug.Print s'affiche dans la fenêtre d'exécution (il faut l'avoir ouverte avant avec Ctrl+G si elle ne l'était pas).

    Pour ce qui est de ton problème, essaye de sélectionner ton graphique et de lancer la macro suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub changer_echelle()
        Debug.Print "$" & ActiveChart.Name & "$"
        Debug.Print ActiveChart.Axes(xlCategory).Type
     
        ActiveChart.Axes(xlCategory).MinimumScale = 1
        ActiveChart.Axes(xlCategory).MaximumScale = 5
    End Sub
    Regarde ce qu'il écrit dans la fenêtre d'exécution.

  5. #5
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    Re Bonjour Menhir,

    Merci pour ta prompte réponse;

    Citation Envoyé par Menhir Voir le message
    Il est quand même étrange de demander que me minimum d'un axe soit 0 et, la ligne suivante, demande que le même minimum du même axe soit 1, non ?
    Eh bien non ;o
    Je viens juste d'en découvrir l'explication :
    Lorsque l'on fait appel à la boîte qui permet d'imposer de nouvelles valeurs min et max d'un axe, il faut :
    - cocher le bouton radio "Fixe" (s'il était sur "Automatique"). C'est cela qui génère la première ligne.
    - entrer la valeur à imposer (pour remplacer la présente). c'est cela qui génère la seconde ligne.
    A titre de démonstration, les deux macros qui suivent :
    - la première traite un graphique dans lequel les boutons radio sont sur "Automatique", on les passe sur "Fixe" et on impose les valeurs,
    - la seconde traite un graphique dont les boutons radio sont sur "Fixe" (avec valeurs imposées) et on les passe sur "Automatique.
    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
    Option Explicit
    Sub Fixer_minmax_axe_1()
    ' Fixer les valeurs min et max de l'axe 1'
        Sheets("Accueil").Select
        ActiveSheet.ChartObjects("Graphique 4").Activate
        ActiveChart.Axes(xlCategory).Select
        ActiveChart.Axes(xlCategory).MinimumScale = -2
    'La ligne ci-dessus a été créée par le cochage de "Fixe" (au lieu de "Automatique" pour la ligne "Minimum"
        ActiveChart.Axes(xlCategory).MinimumScale = -1
    'La ligne ci-dessus a été créée par l'introduction du nombre "-1" comme valeur du "Minimum" (cela a remplacé le "-2" initialement présent).
        ActiveChart.Axes(xlCategory).MaximumScale = 4
    'La ligne ci-dessus a été créée par le cochage de "Fixe" (au lieu de "Automatique" pour la ligne "Maximum"
        ActiveChart.Axes(xlCategory).MaximumScale = 5
    'La ligne ci-dessus a été créée par l'introduction du nombre "5" comme valeur du "Minimum" (cela a remplacé le "4" initialement présent).
    End Sub
    Sub Mis_Maxe_Automatique()
    'Cochage des boutons min et Max Axe 1
        Sheets("Accueil").Select
        ActiveSheet.ChartObjects("Graphique 4").Activate
        ActiveChart.Axes(xlCategory).Select
        ActiveChart.Axes(xlCategory).MinimumScaleIsAuto = True
        ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True
    End Sub
    Le drame c'est que ces macros refusent toutes les deux de fonctionner en se mettant en "Erreur 1004 - Erreur définie par l'application ou par l'objet" et le débogueur accuse la ligne "ActiveSheet.ChartObjects("Graphique 4").Activate" (lignes 5 et 19).
    Le problème reste donc le même :o(

    Citation Envoyé par Menhir Voir le message
    Quand tu fais ce type de vérification, je te conseille de passer par Debug.Print plutôt que par MsgBox qui implique l'ouverture d'une fenêtre et une validation.
    Le résultat de Debug.Print s'affiche dans la fenêtre d'exécution (il faut l'avoir ouverte avant avec Ctrl+G si elle ne l'était pas).

    OK. Je vais dorénavant adopter cette méthode. Merci pour le tuyau.




    Citation Envoyé par Menhir Voir le message
    Pour ce qui est de ton problème, essaye de sélectionner ton graphique et de lancer la macro suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub changer_echelle()
        Debug.Print "$" & ActiveChart.Name & "$"
        Debug.Print ActiveChart.Axes(xlCategory).Type
     
        ActiveChart.Axes(xlCategory).MinimumScale = 1
        ActiveChart.Axes(xlCategory).MaximumScale = 5
    End Sub
    Regarde ce qu'il écrit dans la fenêtre d'exécution.
    Helas, toujours pas le résultat escompté :
    - Erreur d'exécution '-2147467259 (8000400591' : La méthode 'MinimumScale' de l'objet'Axis' a échoué et ce sur la première lignhe :
    ActiveChart.Axes(xlCategory).MinimumScale = 1
    - pourtant, dans la boîte d'exécution on lit :
    $Accueil Graphique 4$
    1

    Détail ... significatif ou non, le résultat précédent, je l'ai obtenu en sélectionnant le graphique avant de lancer la macro;
    Je viens de la relancer mais après avoir (manuellement) dé-sélectionné le graphique.
    Dans ce cas, l'erreur devient Erreur '91' : Variable objet ou variable de bloc With non définie et le débogueur s'arrête sur la première ligne, le premier Debug.Print.
    Conclusion : comment activer l'objet "ActiveChart" par macro ?

    Toujours dans la panade mais je sens que grâce à toi je suis moins perdu qu'hier. Encore merci.
    très cordialement,
    Jean Le Brun
    --

    ?-

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par CyranOrion Voir le message
    Lorsque l'on fait appel à la boîte qui permet d'imposer de nouvelles valeurs min et max d'un axe, il faut :
    - cocher le bouton radio "Fixe" (s'il était sur "Automatique"). C'est cela qui génère la première ligne.
    - entrer la valeur à imposer (pour remplacer la présente). c'est cela qui génère la seconde ligne.
    Donc, comme je le pensais, il y a deux lignes de code inutiles et à supprimer.

    Helas, toujours pas le résultat escompté :
    - Erreur d'exécution '-2147467259 (8000400591' : La méthode 'MinimumScale' de l'objet'Axis' a échoué et ce sur la première lignhe :
    ActiveChart.Axes(xlCategory).MinimumScale = 1
    - pourtant, dans la boîte d'exécution on lit :
    $Accueil Graphique 4$
    1
    C'est déjà une information intéressante.
    La macro trouve bien le graphique. Au passage, il permet de voir qu'il ne s'appelle pas "Graphique 4" mais "Accueil Graphique 4".
    La macro accède aussi à l'axe puisqu'elle en donne le type (1=Abscisse) donc on peut éliminer cette partie des sources d'erreur.

    Essaye ça pour voir si la macro peut accéder aux valeurs des bornes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub changer_echelle()
        Debug.Print "$" & ActiveChart.Name & "$"
        Debug.Print ActiveChart.Axes(xlCategory).MinimumScaleIsAuto,ActiveChart.Axes(xlCategory).MaximumScaleIsAuto
        Debug.Print ActiveChart.Axes(xlCategory).MinimumScale,ActiveChart.Axes(xlCategory).MaximumScale
    End Sub
    Ca répond quoi dans la fenêtre d'exécution ?

    Détail ... significatif ou non, le résultat précédent, je l'ai obtenu en sélectionnant le graphique avant de lancer la macro;
    C'est ce que je demandais dans mon message 2.

    Je viens de la relancer mais après avoir (manuellement) dé-sélectionné le graphique.
    Mauvaise idée.
    La macro fait référence à ActiveChart qui, assez logiquement, représente le graphe actif.
    S'il n'y a pas de graphe actif au moment où tu la lances, ça ne risque pas de marcher.

    Conclusion : comment activer l'objet "ActiveChart" par macro ?
    Il y a deux solution pour débuguer un code.
    Soit on a la science infuse ou l'inspiration divine et on trouve directement le problème.
    Soit on procède par petits pas en éliminant une à une les cause possible et en resserrant petit à petit la zone pour finalement mettre le doigt sur le détail à modifier.

    Pour l'instant, essayons de comprendre pourquoi sur l'axe de ton graphique, la macro n'accepte pas de fixer des bornes.
    Ensuite on passera à la sélection du graphique.

  7. #7
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Donc, comme je le pensais, il y a deux lignes de code inutiles et à supprimer.

    C'est déjà une information intéressante.
    La macro trouve bien le graphique. Au passage, il permet de voir qu'il ne s'appelle pas "Graphique 4" mais "Accueil Graphique 4".
    La macro accède aussi à l'axe puisqu'elle en donne le type (1=Abscisse) donc on peut éliminer cette partie des sources d'erreur.

    Essaye ça pour voir si la macro peut accéder aux valeurs des bornes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub changer_echelle()
        Debug.Print "$" & ActiveChart.Name & "$"
        Debug.Print ActiveChart.Axes(xlCategory).MinimumScaleIsAuto,ActiveChart.Axes(xlCategory).MaximumScaleIsAuto
        Debug.Print ActiveChart.Axes(xlCategory).MinimumScale,ActiveChart.Axes(xlCategory).MaximumScale
    End Sub
    Ca répond quoi dans la fenêtre d'exécution ?
    $Accueil Graphique 4$
    Vrai Vrai
    -2 4
    Bravo. Ce sont bien les bornes de l'axe des x du graphique présélectionné


    Citation Envoyé par Menhir Voir le message
    C'est ce que je demandais dans mon message 2.

    Mauvaise idée.
    La macro fait référence à ActiveChart qui, assez logiquement, représente le graphe actif.
    S'il n'y a pas de graphe actif au moment où tu la lances, ça ne risque pas de marcher.
    C'est ce que j'ai voulu vérifier.


    Citation Envoyé par =Menhir Voir le message

    Il y a deux solution pour débuguer un code.
    Soit on a la science infuse ou l'inspiration divine et on trouve directement le problème.
    Soit on procède par petits pas en éliminant une à une les cause possible et en resserrant petit à petit la zone pour finalement mettre le doigt sur le détail à modifier.

    Pour l'instant, essayons de comprendre pourquoi sur l'axe de ton graphique, la macro n'accepte pas de fixer des bornes.
    Ensuite on passera à la sélection du graphique.
    Merci, j'ai compris.

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par CyranOrion Voir le message
    $Accueil Graphique 4$
    Vrai Vrai
    -2 4
    Bravo. Ce sont bien les bornes de l'axe des x du graphique présélectionné
    On avance : la syntaxe est bonne.
    Donc, il faut trouver la raison pour laquelle il ne veux pas modifier ces bornes.
    C'est peut-être parce qu'elle ont un statut "automatique" (raison pour laquelle j'ai voulu connaitre MinimumScaleIsAuto.
    Pourtant l'aide VBA dit de modifier MinimumScale modifie automatiquement MinimumScaleIsAuto.

    Essayons :
    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
    Sub changer_echelle()
        Debug.Print "$" & ActiveChart.Name & "$"
     
        With ActiveChart.Axes(xlCategory)
     
            Debug.Print .MinimumScaleIsAuto,.MaximumScaleIsAuto
            Debug.Print .MinimumScale,.MaximumScale
     
            .MinimumScaleIsAuto = False
            .MaximumScaleIsAuto = False
            .MinimumScale = 1
            .MaximumScale = 5
     
            Debug.Print .MinimumScaleIsAuto,.MaximumScaleIsAuto
            Debug.Print .MinimumScale,.MaximumScale
        End With
     
    End Sub

  9. #9
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    La macro proposée démarre bien mais se plante sur la ligne 9 : .MinimumScaleIsAuto = False avec le message :
    Erreur d'exécution '-2147467259 (80004005' : La méthode 'MinimumScaleIsAuto' de l'objet 'axis' a échoué.
    La fenêtre d'exécution (préalablement vidée) contient :
    $Accueil Graphique 4$
    Vrai Vrai
    -2 4
    Ce sont bien les valeurs effectives des bornes de l'axe des x
    (bien entendu, j'ai pré-sélectionné le graphique avant de lancer la macro)
    Avant le lancement de la macro les boutons de l'axe des x étaient tous les deux sur "Automatique"
    Merci pour la poursuite de ton aide.
    --

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Essayons de faire la même chose sur l'axe des Y :

    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
    Sub changer_echelle()
        Debug.Print "$" & ActiveChart.Name & "$"
     
        With ActiveChart.Axes(xlValue)
     
            Debug.Print .MinimumScaleIsAuto,.MaximumScaleIsAuto
            Debug.Print .MinimumScale,.MaximumScale
     
            .MinimumScaleIsAuto = False
            .MinimumScale = 0
     
            Debug.Print .MinimumScaleIsAuto,.MaximumScaleIsAuto
            Debug.Print .MinimumScale,.MaximumScale
        End With
     
    End Sub
    De quel type de graphique s'agit-il ?

  11. #11
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    Comme dans le test précédent, bon début puis plantage.
    Fenêtre d'exécution :
    $Accueil Graphique 4$
    Vrai Vrai
    -2,5 2,5
    Ce sont bien les valeurs min et max effectives.
    Message d'erreur :
    Erreur d'exécution '-2147467259 (80004005': La méthode 'MinimumScaleIsAuto' de l'objet 'Axis' a échoué
    Le débogueur met en jaune la ligne 9 : ".MinimumScaleIsAuto = False"

    Je n'ai pas compris comment tu atteins l'axe des y ?
    Il faut que je trouve la différence entre
    "With ActiveChart.Axes(xlValue)" et
    "With ActiveChart.Axes(xlCategory)"



    Citation Envoyé par Menhir Voir le message
    De quel type de graphique s'agit-il ?
    Nuage de points - Points reliés par des segments.
    Voir image ci-dessous :
    Nom : image_graphique_r.png
Affichages : 5410
Taille : 48,9 Ko
    Dans une feuille Excel, je rentre un tableau de données (x,y) des coordonnées des trois sommets d'un triangle et j'ai créé un graphique "nuage de points" affichant ces trois sommets et les segments les joignant.
    Pour des questions de présentation de ma feuille Excel, j'ai fixé la position et les dimensions du graphique. De ce fait découle, lors du changement des données, un recalcul automatique par Excel des échelles en x et y. Autrement dit, mon repère Oxy n'est plus normé et donc les angles ne sont pas respectés.
    Je souhaite créer une procédure VBA ayant pour seul but de redimensionner la largeur du graphique et les données de l'axe des x, en conservant sa hauteur (selon un critère que je suis entrain de mettre au point)

    Merci pour ta persévérance :o)

  12. #12
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par CyranOrion Voir le message
    Je n'ai pas compris comment tu atteins l'axe des y ?
    La réponse est dans ta question suivante.
    Il faut que je trouve la différence entre
    "With ActiveChart.Axes(xlValue)" et
    "With ActiveChart.Axes(xlCategory)"
    Pour le reste, je ne vois pas.
    La syntaxe est bonne puisqu'on peut afficher les valeurs.
    C'est comme si ces propriétés étaient en lecture seule alors que rien dans l'aide ne le suggère.
    Et ce n'est pas le cas puisque je viens de tester la macro sur un graphe que j'ai fait et ça marche sans problème.

    Tu n'aurais pas verrouillé le graphique, par hasard ?

  13. #13
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 87
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    Nom de dieu !!! Si !! Comme ce truc est destiné à des collégiens, j'avais prévu la protection de tout ce qui n'est pas cellules d'entrée de données :o(

    Je viens de relancer la macro et le mini en y est bien passé de -2.5 à 0.

    Je suis un vieil imbécile .... mais tu viens de m'impressionner durablement.
    Sherlock Holmes n'aurait pas mieux relevé les indices et foncé vers la solution d'un problème réputé inexplicable.
    Je te demande humblement pardon de t'avoir bien malgré moi lancé dans cette quête. Je t'en remercie d'autant plus.

    Si tous mes maux provenaient de cette protection, je pense que je vais devenir capable de maîtriser ma programmation.

    J'ai vainement cherché un tutoriel détaillant quel est l'usage efficace de l'éditeur VBA pour faire pas à pas, en cours de programmation, le tri et les choix pertinents entre les objets, les méthodes, les propriétés et autres joyeusetés de ce langage pour moi bourré d'embuches (je n'ai surtout utilisé jusqu'ici que Fortran, Basic et html).
    Si tu en connais un, je suis preneur.

    J'attendrai deux ou trois jours pour clore cette discussion.
    Un grand merci à toi et encore Nom : bravo_r.jpg
Affichages : 5148
Taille : 7,7 Ko
    Images attachées Images attachées  

  14. #14
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par CyranOrion Voir le message
    Si tous mes maux provenaient de cette protection, je pense que je vais devenir capable de maîtriser ma programmation.
    Au cas où... voici une version propre (sans sélection préalable du graph) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub changer_echelle()
        ActiveSheet.ChartObjects("Graphique 4").Chart.Axes(xlCategory).MinimumScale = 1
        ActiveSheet.ChartObjects("Graphique 4").Chart.Axes(xlCategory).MaximumScale = 5
    End Sub
    Les Select/Selection, c'est à éviter autant que possible, même si l'enregistreur automatique de macro en colle partout.
    On est dans un langage objet, les objets peuvent s'enchaîner en cascade (voir l'exemple ci-dessus).

    J'ai vainement cherché un tutoriel détaillant quel est l'usage efficace de l'éditeur VBA pour faire pas à pas, en cours de programmation, le tri et les choix pertinents entre les objets, les méthodes, les propriétés et autres joyeusetés de ce langage pour moi bourré d'embuches (je n'ai surtout utilisé jusqu'ici que Fortran, Basic et html).
    Si tu en connais un, je suis preneur.
    Déjà, tu as l'aide VBA intégrée à Excel. Elle est très bien faite (bien mieux que celle de Word).
    Si plus de personnes la consultait, le nombre de demandes sur ce forum fondrait comme neige au soleil.
    Jeter un oeil sur la liste des membres de Application, Workbook, Worksheet et Range peut ouvrir d'étonnantes perspectives.

    Ensuite, tu peux fouiller ici : http://excel.developpez.com/cours/?p...#environnement
    Il y a quelques trésors.

  15. #15
    Invité de passage
    Homme Profil pro
    psychomotricien
    Inscrit en
    Février 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : psychomotricien
    Secteur : Santé

    Informations forums :
    Inscription : Février 2018
    Messages : 1
    Par défaut Même erreur avec un histogramme horizontal
    Le problème venait de ce que j'essayais de changer l'échelle de l'axe horizontal en ActiveChart.Axes(xlCategory)

    Mais dans un histogramme horizontal, c'est l'axe vertical qui est référencé par xlCategory et on ne peut changer l'échelle de cet axe puisqu'il s'agit de valeurs en nombre défini (le nombre de barres de l'histogramme).

    Il faut utiliser xlValue et là ça marche.

Discussions similaires

  1. Réponses: 10
    Dernier message: 01/07/2014, 16h12
  2. [XL-2010] Macro modification des plages de données graphiques
    Par FP789 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/08/2013, 10h42
  3. [débutant] gestion des axes d'un graphique
    Par 20100. dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2008, 23h35
  4. [MySQL] Modification des données d'une base par les membres
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/03/2006, 17h25
  5. [VB6] Modification des axes d'un composant Chart
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/05/2003, 08h33

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