Formater l'Axe des x d'un graphique avec code
bassmart
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
-
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous!
J'ai une macro pour effectuer un graphique automatiquement à partir d'une autre feuille(1). La macro crée une nouvelle feuille pour y insérer le graphique.
J'ai réussi à créer le code suivant à l'aide de plusieurs site sur le sujet, mais je suis bloqué sur une problème.
Sur mon axe des x se retrouve les date de lecture d'un appareil. Mon appareil prend 2 lectures par jours une à 12h00 et l'autre à 0h00. Dans mon fichier excel, j'ai donc une colonne (E) pour la date et une colonne pour l'heure (F) dans le format 1200.
À partir de ces données, j'ai inséré une nouvelle colonne (F) dans la feuille (1) qui concatène ma date et mon heure. Car, je ne voulais pas que les 2 valeurs de la même journée soit une par dessus l'autre dans mon graphique. Cette nouvelle colonne(F) ne me sert qu'à cette fin, ensuite je la cache. Probablement, qu'il y a une meilleur façon de faire mais pour l'instant ça fonctionne!
J'ai réussi à faire tracer mon graphique avec toute mes données correctement mais pour l'affichage des valeurs sur l'axe des x, ça ne fonctionne pas! Probablement dû au fait que j'ai caché la colonne (F), mais lorsque qu'elle n'est pas cachée, elle m'affiche une valeur sur l'axe des x du style 2016-01-25_12. Mes lectures se retrouve dans la colonne K de ma feuille 1.
J'ai essayé de trouver un moyen pour formater mon axe des x, mais sans succès jusqu'ici! Est-ce qu'on peut lui dire part de tel valeur jusqu'à tel autre valeur, etc...?
Je voudrais, que le maximum de l'axe des x du graphique soit dynamique, qu'il affiche seulement les données jusqu'à la dernière date trouvée et que les valeurs en dessous de l'axe soit fixe du style au mois avec subdivision au jours. Ainsi que si il détecte dans ma feuille (1) une nouvelle année, qu'il me crée une nouvelle série sur le même graphique.
Voici mon code:
Merci de votre aide!
J'ai une macro pour effectuer un graphique automatiquement à partir d'une autre feuille(1). La macro crée une nouvelle feuille pour y insérer le graphique.
J'ai réussi à créer le code suivant à l'aide de plusieurs site sur le sujet, mais je suis bloqué sur une problème.
Sur mon axe des x se retrouve les date de lecture d'un appareil. Mon appareil prend 2 lectures par jours une à 12h00 et l'autre à 0h00. Dans mon fichier excel, j'ai donc une colonne (E) pour la date et une colonne pour l'heure (F) dans le format 1200.
À partir de ces données, j'ai inséré une nouvelle colonne (F) dans la feuille (1) qui concatène ma date et mon heure. Car, je ne voulais pas que les 2 valeurs de la même journée soit une par dessus l'autre dans mon graphique. Cette nouvelle colonne(F) ne me sert qu'à cette fin, ensuite je la cache. Probablement, qu'il y a une meilleur façon de faire mais pour l'instant ça fonctionne!
J'ai réussi à faire tracer mon graphique avec toute mes données correctement mais pour l'affichage des valeurs sur l'axe des x, ça ne fonctionne pas! Probablement dû au fait que j'ai caché la colonne (F), mais lorsque qu'elle n'est pas cachée, elle m'affiche une valeur sur l'axe des x du style 2016-01-25_12. Mes lectures se retrouve dans la colonne K de ma feuille 1.
J'ai essayé de trouver un moyen pour formater mon axe des x, mais sans succès jusqu'ici! Est-ce qu'on peut lui dire part de tel valeur jusqu'à tel autre valeur, etc...?
Je voudrais, que le maximum de l'axe des x du graphique soit dynamique, qu'il affiche seulement les données jusqu'à la dernière date trouvée et que les valeurs en dessous de l'axe soit fixe du style au mois avec subdivision au jours. Ainsi que si il détecte dans ma feuille (1) une nouvelle année, qu'il me crée une nouvelle série sur le même graphique.
Voici mon code:
Option Explicit
Sub graphique()
Dim Grf As ChartObject
Dim Sh As Worksheet
Dim nom As String, DerLig As Integer
DerLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
Set Sh = Sheets("graphique")
'On crée notre graphique
Set Grf = Sh.ChartObjects.Add(100, 100, 600, 300)
With Grf.Chart
nom = Sheets(1).Range("K1").Value
.HasLegend = False
.HasTitle = True
.ChartTitle.Text = "No piézomètre: " & Mid(nom, 23, 14)
.ChartTitle.Left = 21
.ChartType = xlLine
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.Format.Line.Weight = xlThin
.Values = Sheets(1).Range("K2" & ":K" & DerLig)
.XValues = Sheets(1).Range("F2" & ":F" & DerLig)
End With
With .ChartTitle.Font
.Size = 10
.Name = "Arial"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Pression (KPa)"
.MinorTickMark = xlTickMarkInside
.MinorUnit = 0.2
.AxisTitle.Font.Bold = False
End With
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Date de lecture"
.AxisTitle.Font.Bold = False
'.CategoryType = xlTimeScale
'.TickLabels.NumberFormat = "dd-mm"
.MajorTickMark = xlTickMarkInside
'.MajorUnit = 20
.MinorTickMark = xlTickMarkOutside
'.MinorUnit = 2
'.MinimumScale = 0
'.MaximumScale = DerLig
'.TickLabels.NumberFormat = "yyyy-mm-dd"
End With
End With
Set Grf = Nothing
Set Sh = Nothing
End Sub
Merci de votre aide!
1 réponse
-
Je n'ai pas encore trouvé la solution à mon problème, mais j'ai amélioré mon code pour ajouter plus de 1 graphique sur la même feuille.
Toujours à la recherche d'une solution!
Option Explicit Sub graphique() Dim Grf As ChartObject Dim Sh As Worksheet Dim nom As String, DerLig As Integer, i As Integer Dim col DerLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row Set Sh = Sheets("graphique") For i = 1 To UserForm2.ComboBox1.Value Select Case i Case 1 Set Grf = Sh.ChartObjects.Add(100, 100, 600, 200) nom = Sheets(1).Range("K1").Value col = Split(Columns(11).Address, ":")(1) Case 2 Set Grf = Sh.ChartObjects.Add(100, 320, 600, 200) nom = Sheets(1).Range("L1").Value col = Split(Columns(12).Address, ":")(1) Case 3 nom = Sheets(1).Range("M1").Value Set Grf = Sh.ChartObjects.Add(100, 540, 600, 200) col = Split(Columns(13).Address, ":")(1) Case 4 nom = Sheets(1).Range("N1").Value Set Grf = Sh.ChartObjects.Add(100, 760, 600, 200) col = Split(Columns(13).Address, ":")(1) End Select With Grf.Chart .HasLegend = True With .Legend With .Border .Color = vbBlack .LineStyle = xlContinuous End With .Format.Line.Weight = 0.25 .Format.Fill.ForeColor.RGB = RGB(255, 255, 255) .Left = 55 .Top = 31 End With With .PlotArea .Left = 20 .Width = 550 .Height = 145 .Top = 18 End With .HasTitle = True .ChartTitle.Text = "No piézomètre: " & Mid(nom, 23, 14) .ChartTitle.Left = 21 With .ChartTitle.Font .Size = 10 .Name = "Arial" End With .ChartType = xlLine .SeriesCollection.NewSeries With .SeriesCollection(1) .Name = "2016" ' À changer pour que la date change avec les données de la colonne E .Format.Line.Weight = xlThin .Values = Sheets(1).Range(col & "2" & ":" & col & DerLig) .XValues = Sheets(1).Range("F2" & ":F" & DerLig) End With With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Characters.Text = "Pression (KPa)" .MinorTickMark = xlTickMarkInside .MinorUnit = 0.2 .AxisTitle.Font.Bold = False End With With .Axes(xlCategory, xlPrimary) .HasTitle = True .AxisTitle.Characters.Text = "Date de lecture" .AxisTitle.Font.Bold = False End With End With Next i Set Grf = Nothing Set Sh = Nothing End Sub