OVH Cloud OVH Cloud

RAZ variables -optimisation

16 réponses
Avatar
Patrick BASTARD
Bonjour à tous.

Trois questions aujourd'hui, et j'espère que vos réponses me permettront de
progresser :

Option Explicit impose la déclaration de variables, mais quand cette option
est omise, il arrive que le code fonctionne si certaines variables ne sont
pas définies.
Est-il préférable d'utiliser cette option et de déclarer toutes les
variables ?

Dans quels cas est-il nécessaire - utile - , pour libérer de la mémoire, de
remettre les variables (définies par Dim...As...) à zéro à l'issue de
l'exécution d'une procédure qui ne doit s'exécuter qu'une fois ?

Existe-t'il une commande pour remettre en une seule fois à zéro toutes les
variables d'une procédure (sans passer par Set Varxx As Nothing)?



Merci de vos réponses,

Bien cordialement,

Patrick.

10 réponses

1 2
Avatar
LSteph
Bonjour Patrick,
Pour des petites routines c'est probablement négligeable MAIS:
Même si tu n'utilises pas l'option explicit qui rend obligatoire les
déclarations,
c'est toujours mieux de prendre l'habitude de déclarer et surtout dans ce
cas de typer de façon optimale.
Voir la taille des différents types de variables.String integer, long,
double...
Le variant est sans doute le plus lourd car il accepte tout et n'a pas
besoin d'être précisé avec as.
Typer rend plus fluide l'execution du code.

Cela vaut la peine de remettre à Nothing par exemple les variables objet.

'lSteph



"Patrick BASTARD" a écrit dans le
message de news:
Bonjour à tous.

Trois questions aujourd'hui, et j'espère que vos réponses me permettront
de progresser :

Option Explicit impose la déclaration de variables, mais quand cette
option est omise, il arrive que le code fonctionne si certaines variables
ne sont pas définies.
Est-il préférable d'utiliser cette option et de déclarer toutes les
variables ?

Dans quels cas est-il nécessaire - utile - , pour libérer de la mémoire,
de remettre les variables (définies par Dim...As...) à zéro à l'issue de
l'exécution d'une procédure qui ne doit s'exécuter qu'une fois ?

Existe-t'il une commande pour remettre en une seule fois à zéro toutes les
variables d'une procédure (sans passer par Set Varxx As Nothing)?



Merci de vos réponses,

Bien cordialement,

Patrick.



Avatar
Patrick BASTARD
Bonjour, *LSteph*
J'ai lu ton post
avec le plus grand intéret :

Merci pour ce début de réponse.

Je ne connais pas encore l'instruction Type, mais je vais effectuer des
recherches.

Pour la remise à zéro des variables, l'intérêt est-il quantifié ?
Pour la RAZ de l'ensemble des variables, une piste ?

Bien cordialement,

Patrick.


Bonjour Patrick,
Pour des petites routines c'est probablement négligeable MAIS:
Même si tu n'utilises pas l'option explicit qui rend obligatoire les
déclarations,
c'est toujours mieux de prendre l'habitude de déclarer et surtout
dans ce cas de typer de façon optimale.
Voir la taille des différents types de variables.String integer,
long, double...
Le variant est sans doute le plus lourd car il accepte tout et n'a pas
besoin d'être précisé avec as.
Typer rend plus fluide l'execution du code.

Cela vaut la peine de remettre à Nothing par exemple les variables
objet.
'lSteph



"Patrick BASTARD" a écrit dans le
message de news:
Bonjour à tous.

Trois questions aujourd'hui, et j'espère que vos réponses me
permettront de progresser :

Option Explicit impose la déclaration de variables, mais quand cette
option est omise, il arrive que le code fonctionne si certaines
variables ne sont pas définies.
Est-il préférable d'utiliser cette option et de déclarer toutes les
variables ?

Dans quels cas est-il nécessaire - utile - , pour libérer de la
mémoire, de remettre les variables (définies par Dim...As...) à zéro
à l'issue de l'exécution d'une procédure qui ne doit s'exécuter
qu'une fois ? Existe-t'il une commande pour remettre en une seule fois à
zéro
toutes les variables d'une procédure (sans passer par Set Varxx As
Nothing)? Merci de vos réponses,

Bien cordialement,

Patrick.




Avatar
LSteph
Re, *Patrick*
... non ce n'est pas vraiment ce que je disais !!!
Je ne connais pas encore l'instruction Type, mais je vais effectuer des
recherches.


C'est As qui permet de typer, je parle du type de variable exemple:
Dim test as boolean
ou
Dim maval as integer
ou
Dim monmess as string
ou
Dim ws As worksheet

va voir dans l' aide de VBA c'est expliqué là:
Référence Visual Basic Microsoft
Manuel de référence du langage
Types de données

recherche aussi déclaration de variable concernant ce qu'implique chaque
type et
également la notion de portée

Public définit une portée globale
Dim définit une portée interne
Static fixe...etc..

Pour ta troisième question libèrer toutes les variables de tout niveau d'un
coup
dans tous les projets ouverts je n'ai donc pas de réponse
à part peut être quitter excel et le relancer.

'lSteph

"Patrick BASTARD" a écrit dans le
message de news:
Bonjour, *LSteph*
J'ai lu ton post
avec le plus grand intéret :

Merci pour ce début de réponse.

Je ne connais pas encore l'instruction Type, mais je vais effectuer des
recherches.

Pour la remise à zéro des variables, l'intérêt est-il quantifié ?
Pour la RAZ de l'ensemble des variables, une piste ?

Bien cordialement,

Patrick.


Bonjour Patrick,
Pour des petites routines c'est probablement négligeable MAIS:
Même si tu n'utilises pas l'option explicit qui rend obligatoire les
déclarations,
c'est toujours mieux de prendre l'habitude de déclarer et surtout
dans ce cas de typer de façon optimale.
Voir la taille des différents types de variables.String integer,
long, double...
Le variant est sans doute le plus lourd car il accepte tout et n'a pas
besoin d'être précisé avec as.
Typer rend plus fluide l'execution du code.

Cela vaut la peine de remettre à Nothing par exemple les variables
objet.
'lSteph



"Patrick BASTARD" a écrit dans le
message de news:
Bonjour à tous.

Trois questions aujourd'hui, et j'espère que vos réponses me
permettront de progresser :

Option Explicit impose la déclaration de variables, mais quand cette
option est omise, il arrive que le code fonctionne si certaines
variables ne sont pas définies.
Est-il préférable d'utiliser cette option et de déclarer toutes les
variables ?

Dans quels cas est-il nécessaire - utile - , pour libérer de la
mémoire, de remettre les variables (définies par Dim...As...) à zéro
à l'issue de l'exécution d'une procédure qui ne doit s'exécuter
qu'une fois ? Existe-t'il une commande pour remettre en une seule fois à
zéro
toutes les variables d'une procédure (sans passer par Set Varxx As
Nothing)? Merci de vos réponses,

Bien cordialement,

Patrick.








Avatar
Clément Marcotte
Bonjour,

Option Explicit impose la déclaration de variables, mais quand cette
option

est omise, il arrive que le code fonctionne si certaines variables
ne sont

pas définies.
Est-il préférable d'utiliser cette option et de déclarer toutes les
variables ?


oui

ne serait-ce que pour éviter des histoires comme cela

accueil = 10
for i = 1 to acculie

Avatar
Patrick BASTARD
Merci, Clément.

Bien cordialement,

Patrick.


Option Explicit impose la déclaration de variables, mais quand cette
option est omise, il arrive que le code fonctionne si certaines
variables ne sont pas définies.
Est-il préférable d'utiliser cette option et de déclarer toutes les
variables ?


oui

ne serait-ce que pour éviter des histoires comme cela

accueil = 10
for i = 1 to acculie



Avatar
Gaenonius
Existe-t'il une commande pour remettre en une seule fois à zéro toutes les
variables d'une procédure (sans passer par Set Varxx As Nothing)?


End Sub

--
Gaenonius

Bonjour à tous.

Trois questions aujourd'hui, et j'espère que vos réponses me permettront de
progresser :

Option Explicit impose la déclaration de variables, mais quand cette option
est omise, il arrive que le code fonctionne si certaines variables ne sont
pas définies.
Est-il préférable d'utiliser cette option et de déclarer toutes les
variables ?

Dans quels cas est-il nécessaire - utile - , pour libérer de la mémoire, de
remettre les variables (définies par Dim...As...) à zéro à l'issue de
l'exécution d'une procédure qui ne doit s'exécuter qu'une fois ?

Existe-t'il une commande pour remettre en une seule fois à zéro toutes les
variables d'une procédure (sans passer par Set Varxx As Nothing)?



Merci de vos réponses,

Bien cordialement,

Patrick.




Avatar
Patrick BASTARD
Bonsoir, *Gaenonius*


Confirmes-tu que End Sub réinitialise les variables définies dans cette sub
?
Si oui, quelle est l'utilité de Set mavar = Nothing ?

Bien cordialement,

Patrick.




Existe-t'il une commande pour remettre en une seule fois à zéro
toutes les variables d'une procédure (sans passer par Set Varxx As
Nothing)?


End Sub



Avatar
LSteph
???

'lSteph

"Gaenonius" a écrit dans le message de news:
%
Existe-t'il une commande pour remettre en une seule fois à zéro toutes
les
variables d'une procédure (sans passer par Set Varxx As Nothing)?


End Sub

--
Gaenonius

Bonjour à tous.

Trois questions aujourd'hui, et j'espère que vos réponses me permettront
de progresser :

Option Explicit impose la déclaration de variables, mais quand cette
option est omise, il arrive que le code fonctionne si certaines variables
ne sont pas définies.
Est-il préférable d'utiliser cette option et de déclarer toutes les
variables ?

Dans quels cas est-il nécessaire - utile - , pour libérer de la mémoire,
de remettre les variables (définies par Dim...As...) à zéro à l'issue de
l'exécution d'une procédure qui ne doit s'exécuter qu'une fois ?

Existe-t'il une commande pour remettre en une seule fois à zéro toutes
les variables d'une procédure (sans passer par Set Varxx As Nothing)?



Merci de vos réponses,

Bien cordialement,

Patrick.




Avatar
Eric
Bonsoir Patrick,

Je ne suis pas sur de ce que j'affirme mais, au risque de me tromper :

Set mavar = Nothing permet de récupérer la mémoire allouée au
variables-objet (destruction de l'instance). Obligatoire à mon avis,
quitte à devoir l'écrire autant de fois que nécessaire car je ne connais
pas de moyen pour les désallouer toutes en une seule procédure.
(L'omission entraine parfois que l'application est toujours inscrite
dans la liste des process toujours actifs alors que l'on a mis fin à
l'application)

Pour les variables-standards (de type String, Integer, Double ...) ,
celles de portée locale(niveau procédure) sont détruites à la fin de la
durée de la procédure. Pour celles de portée de module, module de
classe, ou globale, elles sont détruites à la fin de la durée de vie de
l'endroit de leur déclaration.
Je ne garantis pas que leur desruction permet de récupérer la mémoire
allouée. Je pense que c'est en mettant fin à l'application que l'on doit
récupérer la mémoire allouée.(A demander confirmation)

Pour celles déclarées par Static, réinitialisation suivant leur portée.
Si déclarées dans des modules de feuille, elles conservent leurs valeurs
jusqu'à la fermeture de la feuille.
Si dans un module de classe, jusqu'à la destruction de l'instance.
Si dans un module global, jusqu'à la réinitialisation du module.

Erase Tableau : permet de récupérer la mémoire allouée UNIQUEMENT pour
les tableaux déclarés dynmiquement par Dim Tableau() suivi d'un ReDim
Tableau(Taille). Donc faire un Erase Tableau sur les tableaux dynamiques
me parait autant nécessaire que faire Set mavar = Nothing

Erase Tableau pour un tableau statique déclaré par l'instruction Dim
Tableau(Taille) ne fait que réinitialiser les valeurs du tableau à 0,
s'il s'agit de données numériques, à une chaine de longueur nulle("")
pour les String et Empty si Variant.


Voila ce que je crois être.

PS:
Pour l'Option Explicit, même avis que Clément, donc un fan de l'Option
Explicit ;-)
Pour la question de savoir s'il faut typer ou non les variables, je suis
partant de les typer toutes, car ça te permet d'économiser la mémoire
allouée aux variables.
--
A+
Eric
Voir : http://users.skynet.be/mpfa/

Bonsoir, *Gaenonius*


Confirmes-tu que End Sub réinitialise les variables définies dans cette sub
?
Si oui, quelle est l'utilité de Set mavar = Nothing ?

Bien cordialement,

Patrick.





Existe-t'il une commande pour remettre en une seule fois à zéro
toutes les variables d'une procédure (sans passer par Set Varxx As
Nothing)?


End Sub









Avatar
Patrick BASTARD
Bonjour, *Eric*
J'ai lu ton post
avec le plus grand intéret :

Et je te remercie de toutes ces précisions.

Bien cordialement,

Patrick.



Bonsoir Patrick,

Je ne suis pas sur de ce que j'affirme mais, au risque de me tromper :

Set mavar = Nothing permet de récupérer la mémoire allouée au
variables-objet (destruction de l'instance). Obligatoire à mon avis,
quitte à devoir l'écrire autant de fois que nécessaire car je ne
connais pas de moyen pour les désallouer toutes en une seule
procédure. (L'omission entraine parfois que l'application est
toujours inscrite dans la liste des process toujours actifs alors que
l'on a mis fin à l'application)

Pour les variables-standards (de type String, Integer, Double ...) ,
celles de portée locale(niveau procédure) sont détruites à la fin de
la durée de la procédure. Pour celles de portée de module, module de
classe, ou globale, elles sont détruites à la fin de la durée de vie
de l'endroit de leur déclaration.
Je ne garantis pas que leur desruction permet de récupérer la mémoire
allouée. Je pense que c'est en mettant fin à l'application que l'on
doit récupérer la mémoire allouée.(A demander confirmation)

Pour celles déclarées par Static, réinitialisation suivant leur
portée. Si déclarées dans des modules de feuille, elles conservent
leurs valeurs jusqu'à la fermeture de la feuille.
Si dans un module de classe, jusqu'à la destruction de l'instance.
Si dans un module global, jusqu'à la réinitialisation du module.

Erase Tableau : permet de récupérer la mémoire allouée UNIQUEMENT pour
les tableaux déclarés dynmiquement par Dim Tableau() suivi d'un ReDim
Tableau(Taille). Donc faire un Erase Tableau sur les tableaux
dynamiques me parait autant nécessaire que faire Set mavar = Nothing

Erase Tableau pour un tableau statique déclaré par l'instruction Dim
Tableau(Taille) ne fait que réinitialiser les valeurs du tableau à 0,
s'il s'agit de données numériques, à une chaine de longueur nulle("")
pour les String et Empty si Variant.


Voila ce que je crois être.

PS:
Pour l'Option Explicit, même avis que Clément, donc un fan de l'Option
Explicit ;-)
Pour la question de savoir s'il faut typer ou non les variables, je
suis partant de les typer toutes, car ça te permet d'économiser la
mémoire allouée aux variables.

Bonsoir, *Gaenonius*


Confirmes-tu que End Sub réinitialise les variables définies dans
cette sub ?
Si oui, quelle est l'utilité de Set mavar = Nothing ?

Bien cordialement,

Patrick.





Existe-t'il une commande pour remettre en une seule fois à zéro
toutes les variables d'une procédure (sans passer par Set Varxx As
Nothing)?


End Sub







1 2