XL 2010 Durée maxi d'une macro

D.D.

XLDnaute Impliqué
Bonjour à tous.

Sur un ordi totalement automatique pour faire des DashBoard, j'ai parfois des macros qui se mettent en pause, en attente d'un événement extérieur (genre extraction SAP ou site Web) que la macro pilote elle-même.
Hélas, parfois, l’événement ne se produit pas et mon fichier Excel reste a attendre bêtement quelque chose qui ne se produira pas.

Pour l'instant je contourne le problème en lançant en même temps un VBS qui checke au bout de xx minutes si le fichier est encore ouvert et si c'est le cas le Kill.

C'est bourrin.

D'ou ma question: Connaissez vous une astuce pour que si une macro reste figée en attente d'une instruction dure trop longtemps une gestion d'erreur se mette en place ?
Pour simuler: un simple msgbox sans réponse utilisateur peut suffire.

Merci.
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Hélas, parfois, l’événement ne se produit pas et mon fichier Excel reste a attendre bêtement quelque chose qui ne se produira pas.

Pour l'instant je contourne le problème en lançant en même temps un VBS qui checke au bout de xx minutes si le fichier est encore ouvert et si c'est le cas le Kill.

C'est bourrin.

D'ou ma question: Connaissez vous une astuce pour que si une macro reste figée en attente d'une instruction dure trop longtemps une gestion d'erreur se mette en place ?
Pour simuler: un simple msgbox sans réponse utilisateur peut suffire.

Merci.
voir instruction : Application OnTime
à toi de t'assurer que :
  • durée d'attente normale ou pas
  • l'arret du traitement ne crée pas d'autres problèmes (fin brutale, rollback, point de reprise, archive, accès différé, connexions ??,,)
  • quelle information utilisateur
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour D.D et le fil
separe t sub lanceuse des action SAP ou web et transforme ces reponse de code en fonction

sub lance
x=mafunction1'attend la réponse de mafonction1
if x=truc then z=mafonction2 'si x est passé on lance avec z et attend la réponse de mafonction2

etc...
end if
les (do loop )c'est dans les fonctions
ainsi tu peux mettre un espion qui peut te dire a quel moment ca a planté ou trop long selon x ou z (x et z étant des variables de type que tu veux) bien sur
 

D.D.

XLDnaute Impliqué
Hello,

Merci pour vos réponses.
@Modeste geedee
Le Application.OnTime Now ne permet pas d'interrompre une attente d'un traitement. Dommage.

@job75 & patricktoulon
En fait je ne mets pas en pause moi-même.
Dans des extractions SAP, typiquement, c'est le Script SAP lui même qui "attend" la réponse de SAP. Donc la macro reste "coincée" sur une instruction, en attente que l'application serveur (SAP) réponde. Et il est possible qu'elle ne réponde pas. Je ne peux donc pas faire de test de durée car l’exécution de la macro est elle même interrompue.
 

D.D.

XLDnaute Impliqué
Bonsour®
je n'ai pas parlé de NOW !!!
l'instruction OnTime permet au moins l'éxécution de la proc "bourrin ou Kill" à un horiare à préciser !!!
A ce que je connais, il y a:
Application.OnTime Now + TimeValue("00:00:10"), "my_Procedure" pour lancer "my_Procedure" 10 sec après
ou.
Application.OnTime TimeValue("17:00:00"), "my_Procedure" pour lancer "my_Procedure" à 17:00

il y a d'autre techniques ?

Ce que je voudrais, par exemple, c'est que si la macro est interrompue (par exemple un bête "MSGBOX" ou une boule infinie, même si ce n'est pas mon cas), "quelque chose" d'automatique reprenne la main au bout d'un moment.
 

patricktoulon

XLDnaute Barbatruc
re
Bonsoir @D.D
tu prends le probleme a l'envers les attente tu les a deja sauf que des foit pour cause inconnue ca tourne a l'infini

ca veux dire que tu a certainement des do loop (until /while quelque chose
et bien c'est simple
dans ces attentes tu ajoute un timer
ex:
t=timer
do:x=x+1:doevents:loop until x=10000000 or timer-t>=4
if x<10000000 then msgbox "oulalah!! c'est un peu long tout ca ":exit sub

soit ca s'arrete a 10000000 soit si on y arrive pas au bout de 4 secondes on sort
 

Statistiques des forums

Discussions
312 107
Messages
2 085 355
Membres
102 873
dernier inscrit
yayo