cs_Le routier
Messages postés16Date d'inscriptionlundi 20 février 2006StatutMembreDernière intervention19 mai 2006
-
28 févr. 2006 à 17:57
cs_Le routier
Messages postés16Date d'inscriptionlundi 20 février 2006StatutMembreDernière intervention19 mai 2006
-
1 mars 2006 à 09:27
Pendant l'exécution d'une macro très longue, j'affiche une userform contenant un WindowsMediaPlayer (qui diffuse une image GIF patientez en mouvement)
.
Jusque là tout va bien sauf que ma macro "bouffe" toute la RAM (je pense) et mon fichier ne s'affiche en mouvement que lorsqu'elle s'arrête (Msgbox ou autres interruptions ...)
Quelqu'un(e) aurrait LA solution miracle?
voici mon code :
Sub Regroupement_Macro
With UserForm1
.Show (0) 'l'afiche en non modal pour permettre l'exe du reste de la macro
.WindowsMediaPlayer1.Controls.Play
End With
cs_Le routier
Messages postés16Date d'inscriptionlundi 20 février 2006StatutMembreDernière intervention19 mai 2006 28 févr. 2006 à 18:21
Ouais, j'y ai pensé, et c'est vrai que c'est une solution. Le seul pb c'est que c'est un code super long avec un max de boucle et que déjà il met pas loin de 5 minutes à le faire alors avec des DoEvents partout ça ralentit trop ....
Mais merci qd même et si vous avez d'autres propositions ...
Les routiers sont sympas !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 28 févr. 2006 à 18:33
Après je vois que les threads. Execute la lecture de ton gif dans un thread à part.
Mais je ne sais pas trop si vba supporte l'utilisation de plusieurs threads.
Ou essais l'api Sleep mais qui reviens au meme que DoEvent...
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 28 févr. 2006 à 20:37
Salut,
Willi, l'api Sleep n'est en aucun cas la même chose que doevents.
DoEvents redonne la main au système et permet ainsi (s'il est bien employé) que d'autres processus se déroulent.
Sleep, GELE le prog et ne redonne la main à aucun autre processus.
Une belle image animée c'est sympa pour faire patienter mais, surtout en VBA, faut peut-être éviter les fioritures quand on a un code qui met déjà 5mn pour s'exécuter.
Une petite question, si tu ne lances pas wmp, l'exécution de ta macro dure toujours 5mn ?
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 28 févr. 2006 à 21:04
Bonsoir à tous....
Je ne suis pas "expert".
N'ayant pas VB5, VB6, VB.Net...etc
J'utilise betement le VBS.
En VBS, il n'y a pas de ProgressBar, donc, via WMI, j'affiche une fenetre "Veuillez patentier !!!!', sans bouffer du RAM
fic = "c:\test.txt"
' ################## AFFICHER UNE FENETRE D'INFORMATION
strComputer = "."
Set objWMIService = GetObject("Winmgmts:\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
Set objExplorer = CreateObject("InternetExplorer.Application")
objExplorer.Navigate "about:blank"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Left = (intHorizontal - 800) / 2
objExplorer.Top = (intVertical - 100) / 2
objExplorer.Width = 500
objExplorer.Height = 180
objExplorer.Visible = 1
objExplorer.Document.Body.Style.Cursor = "wait"
objExplorer.Document.Title = fic & " - " & Now
objExplorer.Document.Body.InnerHTML = "
Création du fichier
""" &_
fic & """
en cours , merci de patienter.
"
' ################## FERMER LA FENETRE
objExplorer.Document.Body.Style.Cursor = "default"
objExplorer.Quit
Set objExplorer = Nothing
Set objWMIService = Nothing
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 28 févr. 2006 à 21:20
CanisLupus oui c'est vrai que Sleep gèle l'appli pendant un certain temps. Merci d'avoir rectifié.
Comme tu dis il est maintenant possible de wmp ralentisse l'execution de sa macro mais à vérifier.
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 28 févr. 2006 à 22:01
LE routier < Tu crains que des DoEvents ne ralentisse ta macro !! En fait, ce n'est pas le DoEvents (un seul par boucle suffit hein ! Pas la peine d'en mettre 12 derrière chaque instruction d ela boucle, je le rappelle au passage) qui va ralentir ta macro, c'est ce que Windows va devoir faire à cause du DoEvents, comme assumer WMP !! Si tu veux que ta macro soit aussi rapide que possible, comme Canis Lupus le dit, faut éviter les fioriture :
1- Un petit message "Veuillez patienter, cela va être long ............." sur une userform,
2- Un Dovents tout de même dans les boucles car sinon, si l'utilisateur joue du Alt+Tab pdt ta macro de 5minutes, et qu'il revient sur ton appli, il aura un joli carré tout blanc à la place.
3- Essaye d'optimiser tes macros ... il y a peut-être moyen de grapiller des dizaines de secondes d'execution.
4- Utiliser une machine 8 x µProc avec 16Go de RAM
cs_etniqs
Messages postés201Date d'inscriptionmardi 7 octobre 2003StatutMembreDernière intervention10 mai 2016 1 mars 2006 à 09:14
Dans la solution statique mais pas trop, j'utilise un userform (Waitbox) avec un label.caption d'information différent à chaque étape (un compteur de lignes,...) il suffit d'avoir :
Waitbox.Show vbModeless en tête de puit
et Waitbox.Repaint après chaque changement de caption
cs_Le routier
Messages postés16Date d'inscriptionlundi 20 février 2006StatutMembreDernière intervention19 mai 2006 1 mars 2006 à 09:27
Merci pour toutes ces infos ...
Pour répondre à 169075 CanisLupus c'est vrai que si je ne lance pas WMP la macro gagne 1 peu de temps ...
Et je crois que je vais suivre vos conseils et mettre seulement une petite userform "patientez" avec 1 ou 2 DoEvents avec l'astuce de =2204 jack (que je ne conaissait pas !!) ... Etant donné que c'est pour un projet professionnel c'était juste pour faire joli et le rendre plus PRO.... mais bon tant pis ... je préfère gagner en efficacité qu'en "Fioritures" ....
Encore merci à tous d'avoir user de votre temps et bonne journée !!!!!*