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)
>>>>>
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):
>>>>>
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)
>>>>>
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
Partager