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 :

Comportement different d'un graphique dans une macro et hors macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut Comportement different d'un graphique dans une macro et hors macro
    Bonjour a Tous, et aux sachants surtout ...

    J'ai un classeur excel qui contient plusieurs feuilles. Chaque feuille contient un tableau de mesures journalieres et un graphique incorpore pour voir l'evolution de ces valeurs.
    Chaque feuille a ete creee a l'origine avec une macro, le tableau etant organise en ordre chrono inverse, mais ceci ne doit pas avoir d'incidence sur le probleme.
    Le graphique est recree chaque fois qu'une nouvelle valeur arrive dans le tableau, la zone de donnees etant recreee entre la valeur la plus ancienne et la valeur la plus recente, mais ceci ne doit pas avoir d'incidence sur le probleme.
    Quand j'ajoute une donnee dans l'une ou plusieurs feuilles, les graphiques se mettent correctement a jour.
    comme tout cela est un peu repetitif, un UserForm avec trois boutons (Ouvrir, Lire donnees, Enregistrer) automatise la saisie operateur.
    Tout fonctionne a merveille sauf ...
    Le souci :
    Lorsque je sauvegarde le classeur, pas de probleme.
    Mais lorsque le UserForm reouvre le classeur, le graphique de la feuille sur laquelle le classeur etait positionne lors de la fermeture precedente, et UNIQUEMENT celui-la, ne s'affiche pas,
    et pour etre encore plus precis, le graphique connait bien la zone de donnees sous-jacente (le cadre, les axes, la legende, ..) mais il ne connait pas la serie de donnees a inclure dans la zone d'affichage.
    (Clic gauche sur la bordure illumine bien la zone de donnees du tableau mais zone interne vide)
    Tous les autres graphiques de toutes les autres feuilles se presentent bien.
    Une fois ouvert, l'ajout d'une simple ligne de donnees dans le tableau va recreer le graphique et, evidemment, il va bien s'afficher.

    Par contre, si je laisse tomber l'usage du UserForm et que j'ouvre directement le classeur depuis l'explorateur Windows, tout se passe (presque) bien
    et tous les graphiques s'affichent bien, sauf celui de la feuille sur laquelle le classeur a ete enregistré qui a perdu le formattage de l'axe dex X !! (ou du moins l'espacement des reperes).

    Et si, par perversite, j'ouvre le classeur avec le UserForm et, simplement, sans ajouter de donnees, je change de feuille affichee a l'ecran et que j'enregistre a nouveau,
    le mal se propage sur la nouvelle feuille par defaut, sans reparer l'ancienne, ce qui fait qu'apres avoir visualise chaque feuille avec un enregsitrement aussitot apres,
    j'aurai tout pourri tous les graphiques. Beuhhhh !!!

    Tout cela me laisse perplexe !!!
    La solution, je l'ai (il suffit que je ferme le classeur en etant positionne sur une feuille sans graphique)
    mais je ne comprends pas le comportement d'Excel !! (a moins qu'il ne faille chercher dans les 'differences' de comportement entre les langues locales et le VB en US-langage ?)
    Si quelqu'un a une idee du pourquoi du comment de ce comportement, elle serait la bienvenue.

    Cordialement
    Caramel13

    Ci apres, le code qui ouvre le classeur de donnees dans la macro (rien d'exceptionnel)
    >>>>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open Filename:=xRepertoireDonnees & "\MonClasseurDeDonnees.xls"
    <<<<<
    et le code qui cree le graphique (execute uniquement lors d'un ajout de donnees mais pas au chargement du classeur):
    >>>>>
    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
      If Application.Charts.Count <> 0 Then Application.Charts.Delete     ' suppression de toutes les feuilles graphiques 
        ' suppression de tous les graphiques incorpores de la feuille courante (au cas ou il y en ai plus d'un)
        Do While Application.ActiveSheet.Shapes.Count <> 0
            Application.ActiveSheet.Shapes(1).Delete
        Loop
        Set xRange = Range(xZone) ' pour attraper les donnees de la feuille courante : xRange de type Range, xZone de type string
     
        ActiveSheet.Shapes.AddChart.Select ' Creer un nouveau graphique incorpore
        ActiveSheet.ChartObjects(1).Name = "Donnees" ' donner un nom au graphique incorpore
        xNomGraphique = Application.ActiveChart.Name ' pour traquer la bete
        ActiveChart.ChartType = xlLineMarkers 
        ActiveChart.SetSourceData Source:=xRange ' definir la zone de donnees et pas d'affectation des parametres de 'serie', je laisse Excel se debrouiller
        .... suivi de commande de mise en forme pour faire joli, mais pas que .. !
        ActiveChart.Axes(xlCategory).Select
        With Selection
            .MinimumScaleIsAuto = False ' pour definir l'origine des x
            .MinimumScale = DateSerial(2000 + Val(Mid$(pDateInitiale, 1, 2)), Val(Mid$(pDateInitiale, 3, 2)), Val(Mid$(pDateInitiale, 5, 2)))
            .MaximumScaleIsAuto = True ' pour avoir toutes le valeurs jusqu'a ...
            .CrossesAt = 36735 ' pour poser l'axe des Y
            .ReversePlotOrder = False ' pour retablir un graphe par ordre chronologique croissant
            .TickMarkSpacing = 7 ' pour avoir un repere en X toutes les x valeurs
        End With
    <<<<<
    et le code qui referme le classeur (rien d'exceptionnel non plus)
    >>>>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Workbooks.Item(2).Activate
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    <<<<<

    Detail supplementaire :

    Meme avec la solution d'afficher une feuille sans graphique avant d'enregistrer le classeur apres avoir visionne une ou plusieurs feuilles avec graphique,
    le dernier graphique affiche est quand meme un peu malmene :
    Si on laisse Excel gerer quelques parametres de mise en forme et en particulier les unites principale et secondaire de l'axe X, il a une forte tendance a mettre n'importe quoi lors de la reouverture du classeur.
    J'aurai tendance a dire que si tous les parametres sont imposes a la creation du graphique par macro, meme si c'est pour y mettre les valeurs par defaut, les affichages suivants se passent mieux que si on laisse Excel choisir ce qu'il veut !!! mais ce n'est qu'une hypothese dont je ne vois pas la substantifique raison raisonnable .... sauf a imaginer un bug ....

    A+ sur les ondes
    Caramel13

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    En tout cas, la seule chose que je puis dire; c'est que nous ne sommes plus en 1975 ou 1980. Aujourd'hui les accents sont très bien acceptés autant dans VB.net que dans VBA. Les accents ont la particularité de faciliter la lecture en guidant l'œil.

    Mettre les accents quand ils sont nécessaires, c'est faire preuve de respect envers sa langue et envers ses lecteurs.

    Un formateur en informatique qui ne dit pas à ses clients qu'ils peuvent utiliser les caractères accentués, cela fait peur.

  3. #3
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut
    OK,

    Je demande à la communauté de bien vouloir m'excuser pour cette faute de goût dans la gestion des accents.

    Ceci dit, j'aurais aimé, aussi, une réponse au fond sur le comportement d'Excel en plus de la remarque parfaitement légitime sur la forme.
    Merci quand même.

    Je reste à l'écoute.
    Cordialement
    Caramel13

Discussions similaires

  1. inserer graphique dans une cellule
    Par veer2006 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/07/2007, 16h08
  2. [ImageMagick] Comment mettre plus qu'un graphique dans une page ?
    Par 12_darte_12 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 29/06/2006, 20h30
  3. [VBA-E] Création Graphique dans une boucle
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/06/2006, 10h32
  4. Réponses: 1
    Dernier message: 24/04/2006, 16h16
  5. [MFC] Intégration d'un graphique dans une mfc
    Par Nergaahl dans le forum MFC
    Réponses: 1
    Dernier message: 22/03/2006, 16h08

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