Gain en mémoire, gain en vitesse d’exécution

simraill

XLDnaute Occasionnel
Salut à tous,
Donc voilà au boulot on m'a demandé de faire une modif sur un gros gros fichier excel. Par gros j'entends qu'il est tout automatisé avec des macros énormes. Il avait donc été fait par un sous-traitants qui avait été pris exprès pour. Donc normalement il s'y connait.

Sauf que premier truc que je remarque en ouvrant le fichier, sa déclaration de variable est toute fausse...
Il a mis par exemple

Code:
Dim i, j, k ,l as integer

au lieu de

Code:
Dim i as integer
dim j as integer
dim k as integer
dim l as integer

Et il y a 80 variables...dont une 60aine mal déclarer, donc en variant...
Je vous explique pas ce que ça doit bouffer comme mémoire... Et là c'est la première macro...

Donc voilà ma question :
Si je déclare tout correctement, je vais grandement gagner en mémoire. Mais est ce que cela va me permettre de gagner en temps d'exécution?
 

simraill

XLDnaute Occasionnel
Re : Gain en mémoire, gain en vitesse d’exécution

Bonjour gilbert,

merci pour ta réponse.
Dommage que je viens de finir de remettre toutes mes variables sous la forme
dim i as integer
:(

Sinon on les mettants dans le bon format et non plus en variant, car mal déclaré, est ce que je gagne en vitesse d'exécution?
 

gilbert_RGI

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

je ne suis pas un pro de la vitesse alors je ne pourrai pas te dire cela dépend de la capacité de la machine sur laquelle la macro s'execute
en mémoire oui ça doit
ce qui gagne du temps en execution c'est le blocage de l'actualisation de l'écran pendant l'execution de la macro
 

Efgé

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

Bonjour simraill, Bonjour gilbert_RGI :)
Il est préférable de ne pas déclarer les variable As Integer.
Excel les transforme en Long. Donc autant les déclarer ainsi dès le début.
Dim i&, j&, k&, l&
Ensuite si tu as des "objects" déclare les bien (Par exemple As WorkSheet est toujours plus rapide que As Object..)
Utilise l'option explicit.
Après, il faut voir si le code lui même est optimisé (mais vu les déclarations que tu as trouvées j'ai des doutes.)
Cordialement
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Gain en mémoire, gain en vitesse d’exécution

Bonjour le fil, bonjour le forum,

Pas spécialiste de la vitesse mais il me semble que si tu disposes de plus de mémoire tu devrais aller plus vite.
Sinon je suis pas fan non plus des symboles pour déclarer les variables, même si ça fait très pro. J'ai eu à travailler sur des fichiers où les variables étaient codées et j'ai eu un mal fou à trouver leur signification. L'aide VBA ne m'a été d'aucune utilité en cliquant sur un % ou un &. Je pense qu'en étant le plus explicite possible on permet à ceux qui viennent modifier le code de s'y retrouver plus facilement... Ma référence en matière de
variables.
 

MJ13

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

Bonjour à tous

Pour éviter les nombreuse lignes, au lieu de:
Code:
Dim i as integer
dim j as integer
dim k as integer
dim l as integer

Tu peux écrire (qui est équivalent au code de Gibert):

Code:
Dim i as integer, j as integer, k as integer, l as integer


Sinon pour les tests de temps d'éxécution, c'est plutôt à toi de faire les tests et si tu peux nous dire le gain obtenu, cela pourrait nous intéresser :).
 

ROGER2327

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

Bonjour à tous.


(...)
Sinon on les mettants dans le bon format et non plus en variant, car mal déclaré, est ce que je gagne en vitesse d'exécution?
Test :​
Code:
Sub toto()
    For i = 1 To 2000000000
    Next
End Sub
68,32s​
Code:
Sub tata()

Dim i&

    For i = 1 To 2000000000
    Next
End Sub
54.73s, gain de 25 % du temps.

Ce n'est évidemment pas une norme ! S'il y a toujours un gain de performance en typant les variables, bien d'autres paramètres sont à prendre en considération...​


Bonne journée.


ROGER2327
#6619


Samedi 14 Palotin 140 (Equivoque, Sans - culotte - fête Suprême Quarte)
14 Floréal An CCXXI, 4,4310h - chamærops
2013-W18-5T10:38:04Z
 

ChTi160

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

Bonjour simraill
Bonjour le fil
Bonjour le forum

Juste pour pouvoir saluer cette belle brochette de participants.
Il y a aussi Les "Select" à tout va ,qui peuvent aussi ralentir un Programme .
Donc ça y est !!!!!!
Bonne Journée à Tous
Amicalement
Jean Marie
 

nyko283

XLDnaute Occasionnel
Re : Gain en mémoire, gain en vitesse d’exécution

Bonjour à tous,

Un autre bon moyen de gagner en vitesse d'execution est de basculer le calcul des formules à sur ordre en debut de macro et au fur et à mesure du code ( lorsque l'on a besoin et si on en a besoin) de lancer le calcul uniquement pour la zone ou la feuille souhaité ou bine tout le classeur, puis à la fin du code remettre le calcul en automatique et relancer un cacul du classeur.

Marche bien si tu modifie des cellules pendant l'execution du code et le gain dépent du nombre de formules contenues dans le classeur bien entendu.

donc en combinant toutes ces solutions : Déclaration des variables, mise à jour de l'ecran et mode de calcul, le temps d'executions sera optimisé.

J'espere pour toi qu'il n'y a pas de select ou alors que c'est dernier soit indispensable.

Bonne journée à tous.
 

Misange

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

Bonjour simraill, Bonjour gilbert_RGI :)
Il est préférable de ne pas déclarer les variable As Integer.
Excel les transforme en Long.

Bonjour Efgé
Que veu tu dire ?
Si tu déclares en integer et que ta variable doit prendre des valeurs non compatibles tu obtiens un joli message d'erreur mais excel ne transforme pas le type de ta variable si tu l'as déclarée explicitement comme long.
 

laetitia90

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

bonjour tous :):):):):):)

peut être voir les macros!!!!!! pour peut être optimiser l'ecriture;) ou peut être un fichier allege sans données conf.. pour voir
beaucoup de "peut être" surement???
 

Efgé

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

Re aux premiers, Bonjours aux suivants
Misange, va voir le lien laissé par Robert, sur le site de MyDearFriend.
La situation est mieux expliquée que je ne saurai le faire ; )
Cordialement
 

Modeste geedee

XLDnaute Barbatruc
Re : Gain en mémoire, gain en vitesse d’exécution

Bonsour® en plus de typer correctement les varaiables , il est également pratique d'inclure le type avec le nom explicite(*) de la variable, voir à ce sujet : Descriptif des conventions typographiques du code Visual Basic , il ne s'agit que de conventions, donc de contraintes mais on y trouve plus d'info que si celles-ci ne sont que dans les commentaires de déclaration. (*) le nom d'une variable occupe le même encombrement mémoire que ce nom soit sur 1 ou 31 caractères(limite il me semble)
 

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 183
Membres
103 152
dernier inscrit
Karibu