info d'avancement d'une macro par msgbox

wwwhttp

XLDnaute Nouveau
bonjour,
j'ai une macro dont la durée d'exécution peut varier de 1 min à 1h30 selon la taille des données traitées.
j'aimerai informer l'utilisateur de l'état d'avancement.
j'ai désactivé le rafraichissement écran et on a donc un joli écran figé pendant ce temps.
pour 1 minute, ça va, on ne se pose pas trop de question. mais plus le temps passe, plus l'utilisateur va se demande si ça tourne ou pas.
j'aimerai donc l'informer de l'état d'avancement soit par msgbox (genre étape 1/8 - étape 2/8 - ...) même si le temps ou le % d'avancement n'est pas respecté, juste une info le rassurant, soit pas un réel affichage de %, mais la 1ere soluce me conviendrait.
il faut que la 1ere msg reste affiché le temps (temps n'étant pas à prendre au sens strict mais plutôt au point d'insertion dans la macro) de l'exécution de l'étape 1 puis soit remplacée par la 2ème msgbox, etc. jusqu'à la dernière msgbox qui doit elle même disparaitre au point choisi.
merci d'avance
 

Dranreb

XLDnaute Barbatruc
Re : info d'avancement d'une macro par msgbox

Bonsoir
Si vous pouvez calculez d'avance un nombre total d'opérations à effectuer, puis appelez ensuite une procédure autant de fois que ce nombre, j'ai un magnifique petit Userform de couleur cyan avec une barre d'avancement sophistiquée.

Cela dit pour avoir 1h 30 de traitement vous devez probablement utiliser des milliers de fois la méthode Range (ou Cells) chaque fois pour une seule cellule au lieu de l'utiliser une seule fois pour charger des milliers de valeurs de cellules dans un tableau de Variant. Or cela a tendance à être des milliers de fois plus long !
 

Pièces jointes

  • ExUfBarrAv.xls
    68.5 KB · Affichages: 161
  • ExUfBarrAv.xls
    68.5 KB · Affichages: 103
  • ExUfBarrAv.xls
    68.5 KB · Affichages: 111
Dernière édition:

wwwhttp

XLDnaute Nouveau
Re : info d'avancement d'une macro par msgbox

Bonsoir Dranreb,
je vais voir si je peux calculer les opérations et donc adapter le userform.
sinon, pas trop de Range dans ma macro, j'évite le plus possible, mais j'ai des rechercheV en double-sens sur des fichiers variant de 1000 à 60000 lignes et ce, sur 14 feuilles (7 fois le double croisement sur des données différentes). Quand je suis à 1000 entrées, ça va bien, dès qu'on dépasse les 10000, ça commence à prendre du temps.
je vais étudier le passage par un tableau variant, mais ça risque de me prendre un peu de temps d'adapter mes 4300 lignes de macro, je suis loin d'être un "bon" en vba.
en tout cas, merci pour la barre d'avancement
 

wwwhttp

XLDnaute Nouveau
Re : info d'avancement d'une macro par msgbox

bonsoir,
après recherche et essais, pas possible de calculer le nombre d'opérations, donc malgré la beauté du Userform, je me retrouve au même point
Si vous avez des idées, je prends !
merci d'avance
 

Dranreb

XLDnaute Barbatruc
Re : info d'avancement d'une macro par msgbox

Bonsoir.
J'en suis fort étonné, le peu d'information sur votre problème me donnait quand même à penser que cela dépendait d'une somme de nombres de lignes dans différentes feuilles, ce qui ne me parait pas insurmontable.
Par ailleurs en me parlant de RechercheV, vous m'avez fait pensé aux Dictionary. S'il s'agit de figer les valeurs trouvées, vous auriez d'autant plus intérêt à travailler avec des tableaux de Variant. Vous seriez étonné par la rapidité gagnée.
Compléter des tableaux de 14 feuilles d'un même classeur avec des informations prises les unes des autres par consultation d'un Dictionary établi sur un seul argument dans chaque feuille ne devrait pas prendre plus de 3 secondes. Je vous promet, avec des tableaux chargés et déchargés d'un coup dans chaque feuille ça décoiffe !
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 330
Membres
102 862
dernier inscrit
Emma35400