Pourquoi y a t il augmentation du temps d'exécution ?

Bonsoir à tous !

Nouveau projet oblige, je me trouve devant une question dont je ne trouve pas de réponse.

Voir le fichier joint :

Fonctionnement du code VBA :

à l'appuis sur le bouton "Allons-y", une boucle de 1 à 1000 est lancée.

Cette boucle a pour but :

d'insérer 3 lignes de D1 à BJ1 avec décalage vers le bas avec une fonction qui sélectionne

D1:BJ3 et qui insert : Range("D1:BJ3").Insert Shift:=xlDown

de supprimer 3 lignes en décalant les cellules vers le haut avec une fonction qui sélectionne

D101:BJ103 et qui supprime : Range("D101:BJ103").Delete Shift:=xlUp

Une variable Durée qui est égale à "Timer" avant l'ajout suppression, puis les cellules de la colonne A de 1 à 1000

qui sont renseignée avec la différence de "Timer" et Durée à l'issue de l'insertion/suppression.

Le problème est le suivant :

fichier ouvert, premier clic sur le bouton, les temps sont majoritairement de 0, avec quelque 0.016 (enfin sur ma machine)

La procédure s'arrête.

J'appuis une deuxième fois sur le bouton, la procédure s'arrête, mais en colonne A il y a majoritairement des 0.016 et un ou deux 0.031

J'appuis une nouvelle fois et je remarque que le temps d'ajout/suppression augmente de plus en plus lors des différents lancement...

J'enregistre le fichier et j'appuis sur le bouton, on redescend au niveau du temps, mais le problème persiste si l'on reclique dessus, le temps augmente...

Auriez vous une idée du pourquoi du comment ?

Le fait de faire des insertion continuelle vient saturer une mémoire quelconque ? Si tel est le cas comment la vider ?

Alors j'ai mis 1000 car cela influe sur l'augmentation des valeurs, celle-ci est vraiment due au nombre d'insertion/suppression de cellule

@ bientôt

LouReeD

Bonjour LouReed,

la dernière ligne utilisée (Ctrl+Fin) n'est mise à jour qu'avec un enregistrement suivant la suppression (à moins d'une autre technique que j'ignore).

De 101 elle passe à 104, puis 107 etc, ce qui fait d'autant plus de lignes à déplacer sur tes Insert/Supp.

Tu devrais essayer avec un copié-collé en décalant de 3 lignes et en vidant les 3 premières.

eric

Bonjour, merci eriiic !

Maintenant je fais un .Copy Destination :=

Je fais toujours le .Delete Shift:=xkUp

Résultat : une moyenne à 0.007 et ce quelque soit le nombre de lancement ! Et avec la gestion de déplacement de plusieurs shape et leur suppression arrivés à la hauteur de la cellule D201 !

Je suis sur téléphone mais je mettrais le fichier en pièce jointe.

Je me rappelle je crois, être parti sur cette option au début du projet mais le fait qu'il y avait des shapes, le copier Destination multiplier ces shapes ! Du coup j'ai juste à rendre les shapes "flottant" et à gérer leur déplacement avec une boucle for Each et en modifiant leur Top en y ajoutant 3 fois la hauteur d'une cellule... Et c'est le top !

Merci encore eriiic de m'avoir relancé sur cette voix.

@ bientôt

LouReeD

En fait je ne gère même plus les cellules à effacer, car ça copie "par dessus"!

Donc encore du code en moins !

Ça va pulser tout ça une fois le projet fini !

@ bientôt

LouReeD

cool

Bonsoir,

oui c'est plutôt cool !

Il me reste à gérer la "superposition" des shapes afin de savoir si l'un n'est pas en dessous de l'autre (ou l'inverse).

Je pars sur l'idée de comparer les zones de cellules "survolées" par les shapes grâce à TopLeftCell et/ou BottomRightCell avec l'instruction Intersect...

A moins qu'il existe quelque chose de "plus simple".

@ bientôt

LouReeD

Bonjour,

je ne sais pas trop ce que tu veux en faire.

Mais si elles doivent rester en place tu pourrais les déplacer à droite le temps de décaler tes lignes, qu'elles ne soient pas incluses.

eric

Rechercher des sujets similaires à "pourquoi augmentation temps execution"