[VBA] Graphique Dynamique

Bonjour,

Je dispose actuellement d' un programme qui me permet de mettre sous forme de graphique un fichier .CSV qui représente des températures en fonction du temps.

Cependant, les fichiers .CSV que je récupère n' ont pas le même nombre de mesures, je voulais donc savoir s' il était possible d' adapter mon graphique (en VBA) pour que la plage de donnée évolue en fonction du nombre de points de mesure afin que je puisse l' utiliser pour d' autres fichiers.

Ci joint le code que j' ai déjà fait, et un fichier .CSV pour tester.

209vba.txt (3.76 Ko)
211of4212ccs2n1.csv (18.14 Ko)

Bonjour,

Un début de réponse à finaliser.

Cdlt.

Public Sub CreateChartFromCSV()
'Déclaration des variables
Dim wsData As Worksheet
Dim n As Long
Dim rngChart As Range
Dim objChart As Chart

    Application.ScreenUpdating = False
    '---------------------------------------------------------------------------------------------
    'Traitement CSV
    Set wsData = ActiveSheet
    wsData.Columns(1).TextToColumns _
            Destination:=Range("A1"), _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            Comma:=True, _
            FieldInfo:=Array(Array(1, 4), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
            DecimalSeparator:=".", _
            TrailingMinusNumbers:=False
    n = wsData.Cells(Rows.Count, 1).End(xlUp).Row
    wsData.Columns(2).Insert shift:=xlToRight
    wsData.Cells(1) = "Date"
    wsData.Cells(2) = "Heure"
    wsData.Cells(2, 1).Resize(n - 1).TextToColumns _
            Destination:=Range("A2"), _
            DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 4), Array(10, 9), Array(11, 1)), _
            TrailingMinusNumbers:=True
    wsData.Cells(2, 1).Offset(, 1).Resize(n - 1).NumberFormat = "h:mm;@"
    wsData.Cells(2, 1).Offset(, 2).Resize(n - 1, 4).NumberFormat = "0.00;[Red]-0.00;"
    '---------------------------------------------------------------------------------------------
    'Création graphique
    Set rngChart = wsData.Cells(1).Offset(, 1).Resize(n - 1, 5)
    Set objChart = Charts.Add(after:=Worksheets(Worksheets.Count))
    objChart.Name = "Graphique 1"
    With objChart
        .ChartType = xlLine
        .SetSourceData Source:=rngChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Etuve T °C"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Temps (hh:mm)"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Température (°C)"
    End With
    '---------------------------------------------------------------------------------------------
    'RAZ variables
    Set objChart = Nothing
    Set rngChart = Nothing
    Set wsData = Nothing

End Sub

Merci beaucoup ça marche vraiment pas mal

Serait- ce possible d' avoir une explication sur le fonctionnement de ce code ? ( partie graphique dynamique en particulier )

Bonjour,

Le code est clair pour la partie graphique et il reprend tes données de base.

Quelles explications souhaites-tu ?

Cdlt.

Bonjour,

ca conçernerait ces lignes la :

wsData.Cells(2, 1).Resize(n - 1).TextToColumns _

Destination:=Range("A2"), _

DataType:=xlFixedWidth, _

FieldInfo:=Array(Array(0, 4), Array(10, 9), Array(11, 1)), _

TrailingMinusNumbers:=True

wsData.Cells(2, 1).Offset(, 1).Resize(n - 1).NumberFormat = "h:mm;@"

wsData.Cells(2, 1).Offset(, 2).Resize(n - 1, 4).NumberFormat = "0.00;[Red]-0.00;"

'---------------------------------------------------------------------------------------------

'Création graphique

Set rngChart = wsData.Cells(1).Offset(, 1).Resize(n - 1, 5)

Cdlt.

Bonjour,

Voir explications (commentaires).

Cdlt.

Public Sub CreateChartFromCSV()
'Déclaration des variables
Dim wsData As Worksheet
Dim n As Long
Dim rngChart As Range
Dim objChart As Chart
    Application.ScreenUpdating = False
    '---------------------------------------------------------------------------------------------
    'Traitement CSV
    '---------------------------------------------------------------------------------------------
    Set wsData = ActiveSheet
    'Conversion CSV avec prise en compte du point en séparateur décimal.
    wsData.Columns(1).TextToColumns _
            Destination:=Range("A1"), _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            Comma:=True, _
            FieldInfo:=Array(Array(1, 4), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
            DecimalSeparator:=".", _
            TrailingMinusNumbers:=False
    'Dernière ligne non vide colonne 1 (A)
    n = wsData.Cells(Rows.Count, 1).End(xlUp).Row
    'Insertion colonne pour l'heure
    wsData.Columns(2).Insert shift:=xlToRight
    'Renommage en-têtes de colonnes
    wsData.Cells(1) = "Date"
    wsData.Cells(2) = "Heure"
    'Conversion date et heure sur la plage n lignes (voir aide Resize)
    wsData.Cells(2, 1).Resize(n - 1).TextToColumns _
            Destination:=Range("A2"), _
            DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 4), Array(10, 9), Array(11, 1)), _
            TrailingMinusNumbers:=True
    'Mise en forme des données de la plage
    wsData.Cells(2, 1).Offset(, 1).Resize(n - 1).NumberFormat = "h:mm;@"
    wsData.Cells(2, 1).Offset(, 2).Resize(n - 1, 4).NumberFormat = "0.00;[Red]-0.00;"
    '---------------------------------------------------------------------------------------------
    'Création graphique
    '---------------------------------------------------------------------------------------------
    'Initialisation de la plage des données graphiques
    'Plage de n lignes sur 5 colonnes (dans l'exemple B2:F406)
    'Voir aide sur Offset
    Set rngChart = wsData.Cells(1).Offset(, 1).Resize(n - 1, 5)
    'Initialisation graphique (création feuille graphique)
    Set objChart = Charts.Add(after:=Worksheets(Worksheets.Count))
    objChart.Name = "Graphique 1"
    With objChart
        .ChartType = xlLine
        .SetSourceData Source:=rngChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Etuve T °C"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Temps (hh:mm)"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Température (°C)"
    End With
    '---------------------------------------------------------------------------------------------
    'RAZ variables
    Set objChart = Nothing
    Set rngChart = Nothing
    Set wsData = Nothing
End Sub

Super merci beaucoup !

Cordialement

Rechercher des sujets similaires à "vba graphique dynamique"