Pb d'actualisation sur graphe avec axe dynamique
Bonjour,
Avec un peu de retard.
Je vous joint cependant mon fichier
A tester évidemment...
Cordialement
A l'ouverture du fichier :
1 - Lancement mise à jour EDF
2- Création graphique avec les données à jour
nb : j'ai profité de ce post pour revoir la création des graphiques en VBA.
Option Explicit
Public Sub Graphique()
Dim X As Range 'Date
Dim Y As Range 'Instantané
Dim Plage As Range
Dim objChart As ChartObject
Dim ceJour As Date
Dim Hier As Date
Dim i As Integer
Dim j As Double
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
'On Error Resume Next
'Worksheets("Graphique").ChartObjects("Instantané").Delete
'On Error GoTo 0
'=================================================================================
ceJour = Date
Hier = ceJour - 1
Worksheets("EDF").Activate
Cells(1, 1).Select
i = 0
Do
i = i + 1
Loop While Cells(i, 1) > Hier
Set X = Range(Cells(2, 1), Cells(i, 1))
Set Y = Range(Cells(2, 5), Cells(i, 5))
Set Plage = Union(X, Y)
'=================================================================================
Set objChart = Worksheets(1).ChartObjects.Add( _
Left:=10, Top:=10, _
Width:=500, Height:=250)
With objChart.Chart
.ChartType = xlXYScatterLinesNoMarkers
.SetSourceData Source:=Plage
.Location Where:=xlLocationAsObject, Name:="Graphique"
Worksheets("Graphique").ChartObjects(1).Name = "Instantané"
End With
'=================================================================================
ActiveSheet.ChartObjects("Instantané").Activate
'Axe des abscisses (xlCategory)
'Echelle
ActiveSheet.ChartObjects("Instantané").Activate
With ActiveChart.Axes(xlCategory, xlPrimary)
.TickLabels.NumberFormat = "d/m h""h"";@"
Select Case Worksheets("EDF").Cells(2, 10).Value
Case Is = "0-6"
j = 1 / 24 * 5
Case Is = "7-10"
j = 1 / 24 * 2
Case "10-14", "14-18"
j = 1 / 24 * 3
Case Is = "18-20"
j = 1 / 24 * 1
Case Else
j = 1 / 24 * 3
End Select
.MinimumScale = Worksheets("EDF").Cells(2, 1) - j
.MaximumScale = Worksheets("EDF").Cells(2, 1) + 0.694 / 1000
.MajorUnit = 1 / 24
.MinorUnit = 1 / 48
With .Format.Line
.Visible = msoTrue
.Weight = 1
.ForeColor.ObjectThemeColor = msoThemeColorText1
End With
End With
'=================================================================================
'Axe des ordonnées (xlvalue)
'Echelle
With ActiveChart.Axes(xlValue, xlPrimary)
.MajorUnit = 0.5
.MinorUnit = 0.1
.HasMinorGridlines = True
With .Format.Line
.Visible = msoTrue
.Weight = 1
.ForeColor.ObjectThemeColor = msoThemeColorText1
End With
End With
'=================================================================================
'Série de données
With ActiveChart.SeriesCollection(1)
.Smooth = False
With .Format.Line
.Visible = msoTrue
.Weight = 1.25
End With
End With
'=================================================================================
'Légende
With ActiveChart
.Legend.Delete
End With
'Titre
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = Worksheets("EDF").Cells(2, 10)
With .ChartTitle
.Format.TextFrame2.TextRange.Font.Size = 11
End With
End With
'=================================================================================
Set Plage = Nothing
Set objChart = Nothing
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
Pour Jean-Eric
Je vois que j'ai affaire aux virtuoses du VBA et je suis un peu dépassé.
Néanmoins j'ai testé, le fichier bug à "msoThemeColorText1" variable non défini.
Re,
Je pense que c'est un problème lié à ta version d'Excel.
Supprime la ligne du code, et tentes un nouvel essai.
Cordialement.
Re,
Mise à jour du code avec nouvelle réactualisation EDF
J'ai supprimé la mise à l'echelle des abscisses et la ligne de code qui buggait chez toi.
Qu'en penses-tu?
Cordialement
Merci Jean-Eric
J'ai supprimé quelques lignes supplémentaires, mais maintenant cela marche.
Je me suis éloigné de mon application de départ, maintenant il faut que j'applique les bonnes choses avec sérénité tout en essayant de comprendre ce que je fais.
Je n'hésitera pas à solliciter le forum ci besoin.
Bravo Excel-Pratique