Faire tourner une macro en tache de fond

Faire tourner une macro en tache de fond - VB/VBA/VBS - Programmation

Marsh Posté le 01-10-2008 à 15:50:08    

Bonjour,
 
J'ai un petit souci en VBA sous Excel.
D'un coté j'ai un PC avec une appli tiers qui tourne en temps réel. J'ai la possibilité de réaliser des exports réguliers vers un fichier excel, ce que je fais.
De l'autre coté, j'ai un autre PC avec excel et une feuille d'analyse des données.
 
J'ai codé une macro qui va régulièrement chercher le dernier fichier mais le problème c'est que tant qu'elle tourne l'excel est freezé et du coup je ne peux pas faire mes analyses :(
 
Est-il possible de faire en sorte que ma macro d'import des données tourne en tache de fond et me laisse la main sur excel ?
 
Merci d'avance,
 
Jul

Reply

Marsh Posté le 01-10-2008 à 15:50:08   

Reply

Marsh Posté le 02-10-2008 à 11:43:28    

Bonjour
 
Par "régulierement" tu entends quoi ?
Excel est frisé pour le fichier en question non ? Pas pour un autre fichier ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 02-10-2008 à 20:35:51    

SuppotDeSaTante a écrit :

Bonjour

 

Par "régulierement" tu entends quoi ?
Excel est frisé pour le fichier en question non ? Pas pour un autre fichier ?

 

Le "régulièrement" est variable. Disons qu'un rafraichissement des données de base avec une période inférieur à 5 minutes serait idéal.

 

Et quand je dis que Excel freeze, il s'agit de l'instance excel qui va chercher les données, c'est à dire celle sur laquelle je fais mes calculs. Tant que la macro qui va récupérer les données est active, je ne peux rien faire. A cela je vois deux possibilités :

  • Soit ma macro qui va chercher les données ne s'active que toutes les x minutes puis s'arrête puis redémarre x minutes après etc...
  • Soit ma macro qui va chercher les données tourne en continu et va chercher les données toutes les x minutes avec une boucle "while timer"


Dans les deux cas je ne sais pas comment faire :

  • Comment démarrer automatiquement (sans action de la part de l'utilisateur) une macro toutes les x minutes ? existe-t'il un évènement pour cela ?
  • Comment faire tourner en continu une macro sur un classeur sans empêcher l'utilisation des feuilles de calcul de celui-ci ?


Merci pour votre aide,

 

Jul


Message édité par JulG le 02-10-2008 à 20:38:13
Reply

Marsh Posté le 02-10-2008 à 22:49:37    

Et bien fait, tu peux lancer ton timer des que le fichier est ouvert non ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 03-10-2008 à 00:29:40    

SuppotDeSaTante a écrit :

Et bien fait, tu peux lancer ton timer des que le fichier est ouvert non ?


oui mais alors comme la macro tourne, je ne peux pas modifier les cellules de mon fichier (par exemple changer des valeurs de test). C'est ça que j'entends par excel qui freeze... En fait c'est que lorsqu'une macro tourne, je n'ai plus la main sur les feuilles...
 
Jul

Reply

Marsh Posté le 03-10-2008 à 09:13:04    

Il parrait evident que tu ne peux modifier des valeurs pendant l'execution de la macro... imagine, tu changes de page pendant une execution, tu te retrouves donc a activer une autre feuille, et donc, les calculs se feront a partir de la feuille que tu viens d'activer, et non de celle qui devrait etre utilisé, ou bien un simple "Me.Textbox1.value" ne fonctionnera plu si tu changes de feuille etc....


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
Reply

Marsh Posté le 03-10-2008 à 09:50:14    

JulG a écrit :


oui mais alors comme la macro tourne, je ne peux pas modifier les cellules de mon fichier (par exemple changer des valeurs de test). C'est ça que j'entends par excel qui freeze... En fait c'est que lorsqu'une macro tourne, je n'ai plus la main sur les feuilles...
 
Jul


 
Il sera freezé seulement le temps d'execution. Ta macro ne mets pas 10mn a s'executer si ?
Je pars du principe que tu executes ta macro toutes les 5 minutes et qu'elle met 20sc a s'executer (c'est deja pas mal 20sc...)
Bah tu auras un freeze pendant 20sc... et donc 4mn40 pour bosser dessus.
 
Regarde la fonction DoEvents.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 03-10-2008 à 14:07:31    

SuppotDeSaTante a écrit :


 
Il sera freezé seulement le temps d'execution. Ta macro ne mets pas 10mn a s'executer si ?
Je pars du principe que tu executes ta macro toutes les 5 minutes et qu'elle met 20sc a s'executer (c'est deja pas mal 20sc...)
Bah tu auras un freeze pendant 20sc... et donc 4mn40 pour bosser dessus.
 
Regarde la fonction DoEvents.


 
Tu oublies le temps de la sauvegarde automatique  :whistle:  
Puis si c'est comme les miennes (avec import a partir d'une base aux *staÿtes* toussa) t'en a pour 15 20min d'execution quoi...:d


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
Reply

Marsh Posté le 03-10-2008 à 15:20:11    

Moonschild a écrit :


 
Tu oublies le temps de la sauvegarde automatique  :whistle:  
Puis si c'est comme les miennes (avec import a partir d'une base aux *staÿtes* toussa) t'en a pour 15 20min d'execution quoi...:d


 
Ca n'etait pas precisé dans son post... Pis excel n'est pas un SGBD.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 03-10-2008 à 15:37:10    

SuppotDeSaTante a écrit :


 
Ca n'etait pas precisé dans son post... Pis excel n'est pas un SGBD.


 
Le but de mon idée est que l'utilisateur n'a pas besoin d'activer manuellement la macro... Sinon je n'ai plus du tout de problème : le freeze dure une dizaine de secondes et tout est fini. Mais là je souhaite que mes données viennent toutes seules.
 
Est ce qu'il est possible de démarrer automatiquement (sans action de la part de l'utilisateur) une macro toutes les x minutes ou de faire tourner en continu une macro sur un classeur sans empêcher l'utilisation des feuilles de calcul de celui-ci ?
 
Jul

Reply

Marsh Posté le 03-10-2008 à 15:37:10   

Reply

Marsh Posté le 03-10-2008 à 15:43:30    

Comme dis plus haut, tu auras forcement un freez de 10sc.
Pour demarrer automatiquement il suffit de le mettre dans le demarrage du fichier Private Sub Workbook_Open()
Et avec une boucle de temps de lui dire de le faire toutes les 5mn...
 
Sinon, je ne sais pas ce que tu as d'installer sur ta machine, mais normalement le controle Timer permet de le faire en tache de fond. Mais il ne doit pas etre exploitable avec Office seulement...


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 03-10-2008 à 15:47:24    

SuppotDeSaTante a écrit :

Pour demarrer automatiquement il suffit de le mettre dans le demarrage du fichier Private Sub Workbook_Open()
Et avec une boucle de temps de lui dire de le faire toutes les 5mn...


Procedure de declanchement de macro en fonction du temps : Application.ontime (Regarde l'aide dessus, elle est complete :) )
J'espere que tu trouveras ta solution avec ca :jap:


Message édité par Moonschild le 03-10-2008 à 15:47:57

---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed