Réduire le temps d'exécution d'une macro

Résolu/Fermé
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 - Modifié par siamens_duj le 16/02/2016 à 12:49
 siamens_duj - 16 févr. 2016 à 14:07
Bonjour,

J'aimerais réduire le temps d'exécution d'une macro.

Ce qui pose problème est apparemment ce bout de code :

For Z = 2 to 40000

Do While Workbooks("CAP").Sheets ("confirm").Range("A1").Value <> "0"

If Workbooks("CAP").Sheets("confirm").Range ("H1").Value = Workbooks("txt").Sheets("bdd").cells (Z, 3).Value Then
Workbooks("CAP").Sheets("confirm").Range ("I1").Value = Workbooks("txt").Sheets("bdd").cells (Z, 7).Value
End if

Loop
Next Z


Merci pour votre aide.
A voir également:

1 réponse

jordane45 Messages postés 38137 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
16 févr. 2016 à 13:29
Bonjour,

Do While Workbooks("CAP").Sheets ("confirm").Range("A1").Value <> "0"

Signifie que tant que la cellule A1 de ta Feuille "confirm" est différente de 0 ... alors tu boucle....
Ce qui veut dire que si c'est le cas... tu entres dans une boucle infinie ... à moins qu'à un moment ton code change la valeur de cette cellule... chose que je ne voie pas dans ton code actuel.

Ensuite... plutôt que de faire une boucle de z = 1 à 40000 ..... pour vérifier ceci :
If Workbooks("CAP").Sheets("confirm").Range ("H1").Value = Workbooks("txt").Sheets("bdd").cells (Z, 3).Value Then

Tu ferais mieux d'utiliser la méthode FIND ( et plus exactement la FIND ALL ) afin de trouver rapidement toutes les lignes correspondant à ce critère.
Regardes ici :
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel#findall

Il suffit ensuite de boucler sur l'array retourné par cette fonction pour effectuer le traitement désiré.



1
Bonjour et merci pour votre réponse.

J'ai utilisé la méthode Find mais ça n'a pas fonctionné car je veux renvoyer la valeur de la cellule G lorsque je trouve la valeur de H1 dans mon second classeur et j'ai été vite bloqué.
Quant à la fonction Find ALL j'avoue n'avoir rien compris donc je suis resté sur la méthode simple mais bancale que je vous ai montré.

J'ai essayé d'appliquer vos conseils, j'ai changé la valeur de H1 quand il trouve la valeur en i1 et j'ai aussi mis un Exit Do et ça fonctionne.

Merci beaucoup pour vos conseils.
0