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

vider la mémoire

9 réponses
Avatar
c06
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je lance le
code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en mémoire et je
voulais savoir comment vider la mémoire dans vba ou sur l'ordi avant de
lancer le code...
meric
a+

9 réponses

Avatar
lSteph
Bonjour,
Oui, le code...

LSteph
"c06" a écrit dans le message de news:
4467038d$0$18315$
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je lance le
code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en mémoire et
je voulais savoir comment vider la mémoire dans vba ou sur l'ordi avant de
lancer le code...
meric
a+



Avatar
lSteph
Re,

...il se peut que tu sois dans le vrai mais il serait bon de voir ce que
fait le code et comment il est écrit.
C'est un peu comme si tu disais Docteur j'ai mal à la tête , je suis sûr que
c'est la peste bubonique,
préparez moi un vaccin.

Amicalement.

lSteph

"c06" a écrit dans le message de news:
4467038d$0$18315$
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je lance le
code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en mémoire et
je voulais savoir comment vider la mémoire dans vba ou sur l'ordi avant de
lancer le code...
meric
a+



Avatar
lSteph
...sinon on peut jouer à la loterie, misons:

tu as défini une variable objet en début de code, en fin de code mettre
avant end sub

Set mavar= Nothing
'mavar le nom de ta variable

Cordialement.

"c06" a écrit dans le message de news:
4467038d$0$18315$
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je lance le
code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en mémoire et
je voulais savoir comment vider la mémoire dans vba ou sur l'ordi avant de
lancer le code...
meric
a+



Avatar
Ardus Petus
Si la variable est locale à la procédure, ça ne sert à rien d'écrire Set
mavar = Nothing, puisqu'elle sera automatiquement détruite en fin de
procédure (end sub).

Cordialement,
--
AP

"lSteph" a écrit dans le message de news:
%
...sinon on peut jouer à la loterie, misons:

tu as défini une variable objet en début de code, en fin de code mettre
avant end sub

Set mavar= Nothing
'mavar le nom de ta variable

Cordialement.

"c06" a écrit dans le message de news:
4467038d$0$18315$
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je lance le
code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en mémoire et
je voulais savoir comment vider la mémoire dans vba ou sur l'ordi avant
de lancer le code...
meric
a+







Avatar
lSteph
Bonjour Ardus
;o)
Précisément! Si....ceci pour ceci ou cela... si.. cela...
C'est pourquoi des précisions ne seraient pas inutiles...

lSteph
"Ardus Petus" a écrit dans le message de news:

Si la variable est locale à la procédure, ça ne sert à rien d'écrire Set
mavar = Nothing, puisqu'elle sera automatiquement détruite en fin de
procédure (end sub).

Cordialement,
--
AP

"lSteph" a écrit dans le message de news:
%
...sinon on peut jouer à la loterie, misons:

tu as défini une variable objet en début de code, en fin de code mettre
avant end sub

Set mavar= Nothing
'mavar le nom de ta variable

Cordialement.

"c06" a écrit dans le message de news:
4467038d$0$18315$
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je lance
le code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en mémoire et
je voulais savoir comment vider la mémoire dans vba ou sur l'ordi avant
de lancer le code...
meric
a+











Avatar
c06
Bonjour

merci pr vos réponses qui fuse... en fait j'ai pas le code sous la main et
il est très long ... mais je peux préciser la declaration des
variables...les variable sont déclarés en TYPE.... et elles sont publiques
(il y a plusieurs sub et j'ai besoin de renvoyer les valeurs des variables
dans un autre sub)..
j'espère que ca ira comme réponse
a+

"lSteph" a écrit dans le message de news:

Bonjour Ardus
;o)
Précisément! Si....ceci pour ceci ou cela... si.. cela...
C'est pourquoi des précisions ne seraient pas inutiles...

lSteph
"Ardus Petus" a écrit dans le message de news:

Si la variable est locale à la procédure, ça ne sert à rien d'écrire Set
mavar = Nothing, puisqu'elle sera automatiquement détruite en fin de
procédure (end sub).

Cordialement,
--
AP

"lSteph" a écrit dans le message de news:
%
...sinon on peut jouer à la loterie, misons:

tu as défini une variable objet en début de code, en fin de code mettre
avant end sub

Set mavar= Nothing
'mavar le nom de ta variable

Cordialement.

"c06" a écrit dans le message de news:
4467038d$0$18315$
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je lance
le code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en mémoire
et je voulais savoir comment vider la mémoire dans vba ou sur l'ordi
avant de lancer le code...
meric
a+















Avatar
lSteph
Effectivement, Type sert à définir un type utlisateur et est de portée
globale (sauf pour les modules de classe),
les variables déclarées qui en découlent peuvent toutefois être déclarées
ou utilisées à différents niveaux...

donc a fortiori si tel est le cas
(il y a plusieurs sub et j'ai besoin de renvoyer les valeurs des
variables dans un autre sub)..
j'en déduis que tu les a définies en Public je maintiendrais donc ma

suggestion.

lSteph

"c06" a écrit dans le message de news:
4467130a$0$18303$
Bonjour

merci pr vos réponses qui fuse... en fait j'ai pas le code sous la main et
il est très long ... mais je peux préciser la declaration des
variables...les variable sont déclarés en TYPE.... et elles sont publiques
(il y a plusieurs sub et j'ai besoin de renvoyer les valeurs des
variables dans un autre sub)..
j'espère que ca ira comme réponse
a+

"lSteph" a écrit dans le message de news:

Bonjour Ardus
;o)
Précisément! Si....ceci pour ceci ou cela... si.. cela...
C'est pourquoi des précisions ne seraient pas inutiles...

lSteph
"Ardus Petus" a écrit dans le message de news:

Si la variable est locale à la procédure, ça ne sert à rien d'écrire Set
mavar = Nothing, puisqu'elle sera automatiquement détruite en fin de
procédure (end sub).

Cordialement,
--
AP

"lSteph" a écrit dans le message de news:
%
...sinon on peut jouer à la loterie, misons:

tu as défini une variable objet en début de code, en fin de code mettre
avant end sub

Set mavar= Nothing
'mavar le nom de ta variable

Cordialement.

"c06" a écrit dans le message de news:
4467038d$0$18315$
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je lance
le code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en mémoire
et je voulais savoir comment vider la mémoire dans vba ou sur l'ordi
avant de lancer le code...
meric
a+



















Avatar
guiom
Le dimanche 14 Mai 2006 à 12:20 par c06 :
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je
lance le
code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en
mémoire et je
voulais savoir comment vider la mémoire dans vba ou sur l'ordi avant de

lancer le code...
meric
a+


Bonjour à tous,

j'ai également un problème de mémoire lors de l'execution consécutive d'une macro

j'appelle des données d'une requete access avec la méthode suivante :

With Sheets(nom_onglet).ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID­min;Data Source=ma_base_access;M" _
, _
"ode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB" _
, _
":Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OL" _
, _
"EDB:New Database Password="""";Jet OLEDB:Create System Databaseúlse;Jet OLEDB:Encrypt Databaseúlse;Jet OLEDB:Don't Copy Locale" _
, _
" on Compactúlse;Jet OLEDB:Compact Without Replica Repairúlse;Jet OLEDB:SFPúlse;Jet OLEDB:Support Complex Dataúlse" _
), Destination:=Sheets(nom_onglet).Range(cible)).QueryTable
.CommandType = xlCmdTable
.CommandText = requete
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = "ma_base_access"
.ListObject.DisplayName = nom_tableau
.Refresh BackgroundQuery:úlse
End With

Merci par avance de votre support.
Avatar
guiom
Le dimanche 14 Mai 2006 à 12:20 par c06 :
Bonjour

j'ai un code vba qui permet de remplir une grosse matrice et effectue
'lopération un certain nombre de fois ...la première fois que je
lance le
code tout se passe bien mais la deuxième fois il est plus lent , la
troisième plus lent etc ...je pense que c'est du à la mise en
mémoire et je
voulais savoir comment vider la mémoire dans vba ou sur l'ordi avant de

lancer le code...
meric
a+


Bonjour,

Ce problème de mémoire de venait finalement pas de la requete ou de son résultat mais de la méthode dont j'effaçais le résultat précédent (lequel était un peu fait à la sauvage):

avant : Sheets(nom_onglet).Range("a1:zz1000000).Clear

après : Sheets(nom_onglet).ListObjects(nom_tableau).Delete

gain significatif de performance...