[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.
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 SubMerci 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 SubSuper merci beaucoup !
Cordialement