XL 2019 Macro à l'ouverture d'un fichier : Délai d'exécution et interruption

CiolBel

XLDnaute Nouveau
Un peu comme une alarme de maison,
J'ai un fichier xlsm qui est inclu dans mon planificateur de tâches pour se lancer à intervalles réguliers, il s'ouvre et excécute au démarrage

VB:
Private Sub Workbook_Open()

Call OpenRunMacroandCopy

End Sub

qui est une macro assez lourde et enregistre.

Comme j'ai besoin de pouvoir l'ouvrir et regarder ce qu'il y a dedans, je me demande si je peux faire en sorte que ladite macro ne s'active qu'après un certain délai, mettons 5 minutes, ce qui me permettrait je crois d'utiliser ctrl-Pause pour l'interrompre si je dois bosser dessus.

Je connais Application.Wait et Sleep qui ne fonctionnent pas ici mais je ne sais pas pourquoi, auriez-vous une solution?
 

CiolBel

XLDnaute Nouveau
Bonjour CiolBel, le forum,

VB:
Private Sub Workbook_Open()
Application.OnTime Now + 5 / 1440, "OpenRunMacroandCopy"
End Sub
La macro OpenRunMacroandCopy doit être placée dans un module standard.

A+

Ta soluce semble marcher parfaitement pour créer un délai d'exécution donc problème à moitié résolu (tu peux m'expliquer le 1440??) mais elle ne semble pas me permettre d'interrompre comme je le fais avec ctrl-Pause dans la boucle infinie suivante:

VB:
Sub InfiniteLoop()
'If you don't want an infinite loop, do not run this macro.
Dim i As Long
Do
    i = i + 1
Loop
End Sub

Qui me donne bien une fenêtre "d'erreur" m'assurant son interruption...
 

CiolBel

XLDnaute Nouveau
bonjour,
je ne comprends pas!
si tu maintiens la touche majuscule enfoncé pendant l'ouverture du fichier y compris après avoir clické sur activer les macros, la macro ne se lancera pas et tu pourras modifier ton classeur et/ou tes macros!

Je viens d'essayer ta technique, que je connaissais pas, et cela ne semble pas fonctionner... le fichier est dans mon explorateur, je reste sur caps lock enfoncé et je double clique. ( Je confirme, essayé dix fois, essayé avec shift droit et gauche dix fois aussi)
Comme le fichier est très gros et les fichiers appelés dans la macro aussi (une quinzaine de fichiers de 20Mo chacun...) si je me foire c'est assez conséquent, j'aurais souhaité une méthode plus sûre
 
Dernière édition:

dysorthographie

XLDnaute Accro
On est bien d'accord j'ai dis maintenir jusqu'à ouverture complète d'Excel ,pas appuyer sur majuscule pendant le double click sur le fichier excel ?

Il faut maintenir majuscule pour éviter l'exécution de la macro open qui ce produit bien après l'ouverture du fichier !

C'est un raccourci clavier défini par excel pour ne pas exécuter les macros !

Si non tu peux modifier ta Macro pour qu'elle ne s'exécute plus à l'ouverture et modifier l'appel dans le planificateur de tâches pour que ce soit lui qui lance la macro.

Ou utiliser un vbscrip via ton planificateur de tâches
 
Dernière édition:

CiolBel

XLDnaute Nouveau
Oui oui on se comprend bien. J'appuie sur shift et je reste enfoncé sur shift, je clique sur le fichier dans mon explorateur windows en gardant shift enfoncé, ça s'ouvre mais ça exécute quand même la macro.
Je comprends d'ailleurs que le shift bypass doit normalement être super fiable mais sur cette machine du boulot ça ne marche pas et j'ai besoin d'une autre méthode.
 

dysorthographie

XLDnaute Accro
dans le fichier join il y a un ficher Test.xlsm et un fichier Test.vbs!

le fichier VBS VB Script contient une macro vb! si tu fais un click droit modifie ça afiche le code dans note pad c'est comme un fichier bat!

Code:
dim Xls,Doc
set Xls =createobject("Excel.application")
    Xls.visible=true
set doc=Xls.Workbooks.Open("C:\Test\test.xlsm")
    doc.application.run "test" 'ici j'exécute la macro Test qui n'est pas accessible par la méthode Open!
    doc.close false
    Xls.quit
tu peux lancer des fichier vbs dans le planificateur de tache!

bien sur il te faudra enlever ta macro de l’événement open et le placer dans une macro d'un module standard mais ces le moindre male!
 

Pièces jointes

  • Test.zip
    10.3 KB · Affichages: 5
Dernière édition:

job75

XLDnaute Barbatruc
Pour différer l'exécution avec une boucle While/Wend placez tout ceci dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.Attente"
End Sub

Sub Attente()
Dim t
t = Timer + 300 '5 minutes
While Timer < t And t < 84600
    DoEvents
Wend
OpenRunMacroandCopy
End Sub
Salut dyso...
 

Discussions similaires

Statistiques des forums

Discussions
312 180
Messages
2 085 995
Membres
103 082
dernier inscrit
adri77