Bonsoir à tous,
Je bloc sur un point concernant la création d'un graphique via VBA.

-J'ai un flux de données que je DL qui créer une nouvelle ligne sur mon tableau à chaque minute.
-A partir de ce tableau je créer un graphique.
-jusque la pas de soucis.

La ou je bloque c'est qu'au fur et a mesure de la journée mon tableau devient illisible si bien que je souhaite borner l'axe des abscisses avec max = Valeur de la minute qui a été DL et Min (origine du graphique) 60 minute en arrière.

Comme chaque ligne du tableau équivaut a une minute et que le moment du DL est sur la colonne B (sous la forme 13:24 par exemple) le codage pour avoir TOUTE la journée est pas très compliquer et voici le code (qui fonctionne).

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Sub Graphique_MM()
 
'existandce du graphique
Dim Grph As ChartObject
    On Error Resume Next
    Set Grph = Sheets("Tab_Bord").ChartObjects("CourbeMM")
    If Not Grph Is Nothing Then Grph.Delete
 
'============================
 
Const sheDonnéesSource  As String = "Tab_Bord"
 
Dim chGraph As Chart
Dim rPlageAcceuil As Range
Dim rPlageSource As Range
Dim DerLign As Long
 
'recupere le nombre de ligne remplie
DerLign = Sheets("Chart_1min").Range("A1").End(xlDown).Row
 
 
With Sheets(sheDonnéesSource)
        ' Plage devant acceuillir le graphique
        Set rPlageAcceuil = .Range("A18:H32").Offset(0, 1)
 
        ' Création du graphique
        Set chGraph = .ChartObjects.Add(rPlageAcceuil.Left, rPlageAcceuil.Top, rPlageAcceuil.Width, rPlageAcceuil.Height).Chart
 
        ' Source du graphique
        Set rPlageSource = Sheets("Chart_1min").Range("B1:J" & DerLign)
 
End With
 
With chGraph
        ' Type 
        .ChartType = xlLine
        ' Source du graphique
        .SetSourceData Source:=rPlageSource, PlotBy:=xlColumns
        ' Affichage titre
        .HasTitle = True
        ' Intitulé
        .ChartTitle.Characters.Text = rPlageSource.Cells(1, 1)
        ' Légende en position haute
        .Legend.Position = xlLegendPositionTop
        ' On efface les colonnes que l'on ne veut pas
        .FullSeriesCollection(1).Delete
        .FullSeriesCollection(1).Delete
        .FullSeriesCollection(1).Delete
        .FullSeriesCollection(1).Delete
        .FullSeriesCollection(1).Delete
 
        'On definie le max min des ordonnées
        .Axes(xlValue).MinimumScale = Sheets("Chart_1min").Range("E" & DerLign)
        .Axes(xlValue).MaximumScale = Sheets("Chart_1min").Range("D" & DerLign)
 
 
 
        'On definie le max min des abcisses ================> LA JE BLOQUE
        '.Axes(xlPrimary).MinimumScale = Sheets("Chart_1min").Range("B" & DerLign - 60)
        '.Axes(xlCategory).MinimumScale = Sheets("Chart_1min").Range("B" & DerLign - 60)
        '.Axes(xlCategory).MaximumScale = Sheets("Chart_1min").Range("B" & DerLign)
        '.Axes(xlCategory).Crosses = Sheets("Chart_1min").Range("B" & DerLign - 60)
 
 
        'renomme le chartObject
        .Parent.Name = "CourbeMM"
 
 
     End With
 
    Sheets(sheDonnéesSource).Select
 
 
 
End Sub

Ce code est inclus dans un timer si bien que le graphique est mise a jour chaque minute, et donc, chaque minute il s'allonge...
Pourriez vous m'aider à le rendre glissant c'est a dire qu'a chaque mise à jour (toute les minute) il n'affiche en abscisse que l'intervalle de temps [instant t-60 min - instant t] ?
En fin de code vous pouvez voir toute les tentatives que j'ai fait Quant je lance la macro il n'y a pas de plantage, le graphique s'affiche mais il ne prend pas en compte mon intervalle d'abscisse (alors que pour l'ordonnée ça fonctionne très bien).

Je me demande si ce n'est pas lié au fait que sur l'axe des abcisse ce sont des dates que j'utilise et pas des nombres (même si dans ma colonne B ce sont bien des dates et au bon format que j'utilise).


merci de votre aide