Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Out of memory

2 réponses
Avatar
Jojo
Bonjour,

J'ai le probleme suivant

je possede un classeur qui possede 64 feuilles. Dans chacune de ces feuilles
j'ai un graphique type 'histogramme' avec 2 series.
Je peux sur chacune de ses feuilles rajouter une statistique: je lance alors
une macro qui me cree un nouveau graphique (2 series en ligne).

Ce qui fait que j'ai entre 64 et 128 graphiques au maximum dans mon
classeur. Or, apres un certain temps, j'ai le message out of memeory, qd je
desire ajouter un graphique. Pourtant le nombre total de graphique est
toujours le meme, qd je lance une simulation qui va me sortir un graphique,
je supprime d'abord l'ancien graphique et re-cree ensuite un nouveau. Mais
apparemment le chart supprime est toujours dans la memoire... (c'est fou le
nombre de fois ou je dis le mot graphique !!! ;o))

La limite etant de 256 graphiques selon l'aide excel, je ne comprends pas
pourquoi j'ai ce message d'erreur. Peut-on 'flusher' de la memoire les
graphes supprimes ?

exemple de macro que je lance sur une feuille... (j'ai tout mis - desole
c'est long - mais je veux juste montrer la suppression et la creation de
graphique)

Public Sub GetOptiRatio()
Dim ratio As Double

If Left(ActiveSheet.Name, 4) <> "Stat" Then Exit Sub

Range("AL4:AN22").ClearContents

For Each ch In ActiveSheet.ChartObjects
ch.Delete
Next ch

mois = CDbl((Range("B3") - Range("B2")) / 30)
factor = 3 / 12 * 12 / mois ' = 3 / mois

pas = 0.1

If mois <= 6 Then
If Right(ActiveSheet.Name, 3) <> "opp" Then
maxi = 1.3 ' 130 %
couv = 0.1
pas = 0.1
Else
maxi = 1.5 ' 150 %
couv = 0.2
pas = 0.1
End If
Else
If Right(ActiveSheet.Name, 3) <> "opp" Then
maxi = 1.4 ' 140 %
couv = 0.1
pas = 0.15
Else
maxi = 1.6 ' 200 %
couv = 0.25
pas = 0.2
End If
End If
i = 1

While couv <= maxi And i < 20
ratio = couv / factor
Call StratFutOIS(Range("D12"), Range("B5"), Range("B2"),
Range("B3"), Range(Range("D2"), Range("D2").End(xlDown).Offset(0, 5)),
Range("B15"), Range("B16"), Range("B7"), Range("B8"), Range("B9"),
Range("B11"), Range("B12"), Range("B13"), ratio, Range("B6"), Range("B10"),
Range("B4"), False)
Call GetStats(Range("D12"), Range("AB3"), False)
pertemaxi = Range("AC17").Value
valzero = Range("AC18").Value
Range("AL3").Offset(i, 0) = couv
Range("AL3").Offset(i, 0).NumberFormat = "0%"
Range("AL3").Offset(i, 1) = pertemaxi
Range("AL3").Offset(i, 2) = Abs(Range("AD17").Value /
Range("AC17").Value)
Range("AL3").Offset(i, 3) = valzero

couv = couv + pas
i = i + 1
Wend

Call StratFutStat(Range("D12"), Range("B5"), Range("B2"), Range("B3"),
Range(Range("D2"), Range("D2").End(xlDown).Offset(0, 8)), Range("B15"),
Range("B16"), Range("B7"), Range("B8"), Range("B9"), Range("B11"),
Range("B12"), Range("B13"), Range("B14"), Range("B6"), Range("B10"),
Range("B4"), True)
Call ChronoList(Range("A20"), Range("B2"), Range("B3"), Range("B12"),
Range(Range("D2"), Range("D2").End(xlDown).Offset(0, 8)))

ActiveSheet.Shapes(3).Height = 100
ActiveSheet.Shapes(3).Left = ActiveSheet.Columns("K").Left
ActiveSheet.Shapes(3).Top = ActiveSheet.Rows("2").Top

nom = ActiveSheet.Name

Range("AS12").Select
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets(nom).Range( _
"AM4:AN22"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).XValues = _
"='" & nom & "'!R4C38:R22C38"
ActiveChart.SeriesCollection(1).Name = "=""perte maxi"""
ActiveChart.SeriesCollection(2).XValues = _
"='" & nom & "'!R4C38:R22C38"
ActiveChart.SeriesCollection(2).Name = "=""max / min"""
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).Values = _
"='" & nom & "'!R4C41:R22C41"
ActiveChart.SeriesCollection(3).Name = "=""0*"""
ActiveChart.Location Where:=xlLocationAsObject, Name:=nom
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).AxisGroup = 2
ActiveChart.SeriesCollection(3).Select
ActiveChart.SeriesCollection(3).AxisGroup = 2
With Selection.Border
.Weight = xlThin
.LineStyle = xlAutomatic
End With
With Selection
.MarkerBackgroundColorIndex = xlAutomatic
.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlCircle
.Smooth = False
.MarkerSize = 2
.Shadow = False
End With

Range("AH1").Select
ActiveSheet.Shapes(4).Height = 150
ActiveSheet.Shapes(4).Width = 400
ActiveSheet.Shapes(4).Left = ActiveSheet.Columns("AA").Left
ActiveSheet.Shapes(4).Top = ActiveSheet.Rows("26").Top

Call MiseEnPage
Call GetStats(Range("D12"), Range("AB3"), True)
End Sub

2 réponses

Avatar
Michel Gaboly
Bonjour,

Ne serait-il pas plus simple d simplement mettre à jour la plage
en prendre en compte pour un graphique donné.

En clair sélectionner le graphique concerné, et le metre à jour, plutôt
que le détruire et en refaire un autre.

Pour cela, regarde laide de la méthode SetSourceData.

Pour info, voici un extrait de code faisant cela

Set Ref = Range("B8:" & ColFin & "8,B" & LigneDebut & ":" & ColFin & LigneFin)
With ActiveChart
.SetSourceData Ref, xlColumns


Bonjour,

J'ai le probleme suivant

je possede un classeur qui possede 64 feuilles. Dans chacune de ces feuilles
j'ai un graphique type 'histogramme' avec 2 series.
Je peux sur chacune de ses feuilles rajouter une statistique: je lance alors
une macro qui me cree un nouveau graphique (2 series en ligne).

Ce qui fait que j'ai entre 64 et 128 graphiques au maximum dans mon
classeur. Or, apres un certain temps, j'ai le message out of memeory, qd je
desire ajouter un graphique. Pourtant le nombre total de graphique est
toujours le meme, qd je lance une simulation qui va me sortir un graphique,
je supprime d'abord l'ancien graphique et re-cree ensuite un nouveau. Mais
apparemment le chart supprime est toujours dans la memoire... (c'est fou le
nombre de fois ou je dis le mot graphique !!! ;o))

La limite etant de 256 graphiques selon l'aide excel, je ne comprends pas
pourquoi j'ai ce message d'erreur. Peut-on 'flusher' de la memoire les
graphes supprimes ?

exemple de macro que je lance sur une feuille... (j'ai tout mis - desole
c'est long - mais je veux juste montrer la suppression et la creation de
graphique)

Public Sub GetOptiRatio()
Dim ratio As Double

If Left(ActiveSheet.Name, 4) <> "Stat" Then Exit Sub

Range("AL4:AN22").ClearContents

For Each ch In ActiveSheet.ChartObjects
ch.Delete
Next ch

mois = CDbl((Range("B3") - Range("B2")) / 30)
factor = 3 / 12 * 12 / mois ' = 3 / mois

pas = 0.1

If mois <= 6 Then
If Right(ActiveSheet.Name, 3) <> "opp" Then
maxi = 1.3 ' 130 %
couv = 0.1
pas = 0.1
Else
maxi = 1.5 ' 150 %
couv = 0.2
pas = 0.1
End If
Else
If Right(ActiveSheet.Name, 3) <> "opp" Then
maxi = 1.4 ' 140 %
couv = 0.1
pas = 0.15
Else
maxi = 1.6 ' 200 %
couv = 0.25
pas = 0.2
End If
End If
i = 1

While couv <= maxi And i < 20
ratio = couv / factor
Call StratFutOIS(Range("D12"), Range("B5"), Range("B2"),
Range("B3"), Range(Range("D2"), Range("D2").End(xlDown).Offset(0, 5)),
Range("B15"), Range("B16"), Range("B7"), Range("B8"), Range("B9"),
Range("B11"), Range("B12"), Range("B13"), ratio, Range("B6"), Range("B10"),
Range("B4"), False)
Call GetStats(Range("D12"), Range("AB3"), False)
pertemaxi = Range("AC17").Value
valzero = Range("AC18").Value
Range("AL3").Offset(i, 0) = couv
Range("AL3").Offset(i, 0).NumberFormat = "0%"
Range("AL3").Offset(i, 1) = pertemaxi
Range("AL3").Offset(i, 2) = Abs(Range("AD17").Value /
Range("AC17").Value)
Range("AL3").Offset(i, 3) = valzero

couv = couv + pas
i = i + 1
Wend

Call StratFutStat(Range("D12"), Range("B5"), Range("B2"), Range("B3"),
Range(Range("D2"), Range("D2").End(xlDown).Offset(0, 8)), Range("B15"),
Range("B16"), Range("B7"), Range("B8"), Range("B9"), Range("B11"),
Range("B12"), Range("B13"), Range("B14"), Range("B6"), Range("B10"),
Range("B4"), True)
Call ChronoList(Range("A20"), Range("B2"), Range("B3"), Range("B12"),
Range(Range("D2"), Range("D2").End(xlDown).Offset(0, 8)))

ActiveSheet.Shapes(3).Height = 100
ActiveSheet.Shapes(3).Left = ActiveSheet.Columns("K").Left
ActiveSheet.Shapes(3).Top = ActiveSheet.Rows("2").Top

nom = ActiveSheet.Name

Range("AS12").Select
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets(nom).Range( _
"AM4:AN22"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).XValues = _
"='" & nom & "'!R4C38:R22C38"
ActiveChart.SeriesCollection(1).Name = "=""perte maxi"""
ActiveChart.SeriesCollection(2).XValues = _
"='" & nom & "'!R4C38:R22C38"
ActiveChart.SeriesCollection(2).Name = "=""max / min"""
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).Values = _
"='" & nom & "'!R4C41:R22C41"
ActiveChart.SeriesCollection(3).Name = "=""0*"""
ActiveChart.Location Where:=xlLocationAsObject, Name:=nom
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).AxisGroup = 2
ActiveChart.SeriesCollection(3).Select
ActiveChart.SeriesCollection(3).AxisGroup = 2
With Selection.Border
.Weight = xlThin
.LineStyle = xlAutomatic
End With
With Selection
.MarkerBackgroundColorIndex = xlAutomatic
.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlCircle
.Smooth = False
.MarkerSize = 2
.Shadow = False
End With

Range("AH1").Select
ActiveSheet.Shapes(4).Height = 150
ActiveSheet.Shapes(4).Width = 400
ActiveSheet.Shapes(4).Left = ActiveSheet.Columns("AA").Left
ActiveSheet.Shapes(4).Top = ActiveSheet.Rows("26").Top

Call MiseEnPage
Call GetStats(Range("D12"), Range("AB3"), True)
End Sub


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Jojo
"Michel Gaboly" wrote in message
news:
Bonjour,

Ne serait-il pas plus simple d simplement mettre à jour la plage
en prendre en compte pour un graphique donné.

En clair sélectionner le graphique concerné, et le metre à jour, plutôt
que le détruire et en refaire un autre.


Bonjour Michel,

J'y avais pense effectivement, le probleme de mon classeur c'est que mes
feuilles elles-memes sont supprimees et recrees tous les matins. Il n'y pas
moyen de creer des feuilles statiques car elles representent des donnes qui
vont varier au cours du temps.

PS: Pour ceux que cela interessent:il s'agit ici d'avoir une feuille par
strategie financiere: swap contre contrat future (donc une maturite 1m, 2m,
etc... jusqu'a 1 an, contre les contrats futures decembre 2003, mars, juin
et septembre 2004) Ainsi, une strategie 1m contre decembre 2003 est possible
mais dans 6 mois la feuille sera inutile...

Amicalement
Jojo