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

  1. bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    0