hilpers


  hilpers > microsoft.* > microsoft.excel

 #1  
06/12/2017, 09h07
Fredo P.
Bonjour,
Comment créer une tâche automatique journalière avec W8.1 consistant à
ouvrir un classeur Excel et que la macro Private sub Workbook_Open démarre?

 #2  
06/12/2017, 15h35
Michd
Bonjour,

À l'aide de l'application "NotePad", tu copies ce qui suit. Tu enregistres
le fichier avec une extension .VBS et NON .TXT
Tu ouvres le planificateur de tâche et tu définis les paramètres qui vont
servir à déclencher la tâche qui est d'exécuter le fichier .vbs que tu viens
de créer

Un exemple de code émanant du site :
[..]

Attention, dans ce script, tu as déjà la commande qui ferme le classeur. Si
cette ligne de commande existe déjà dans la macro dans Excel, tu dois
l'enlever de ce script. Tu ne peux pas fermer un classeur 2 fois... une
erreur sera générée.

Dans ce cas, la macro "GetFiles" doit obligatoirement se trouver dans un
module standard.
Si la macro est dans un module feuille, la syntaxe : "Feuil.MaMacro"
Feuil1 n'est pas le nom de l'onglet, mais la valeur de la propriété "Name"
de l'objet "feuille" dans les propriétés de l'objet.

Dans le cas de la macro Workbook_Open, tu peux oublier cette ligne de code :
xlApp.Run "GetFiles"

'--------------------------------------------------------------------
Dim xlApp, xlBook

Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open("W:\Excel Macro\EIM File
Maneger\EIM_file_check.xlsm", 0, True)

xlApp.Run "GetFiles"

xlbook.Save
xlBook.Close False
set xlBook = Nothing

xlApp.Quit
Set xlApp = Nothing

WScript.Echo "Finished."
WScript.Quit
'--------------------------------------------------------------------

MichD
 #3  
06/12/2017, 15h40
Michd
J'allais oublier, dans cette ligne de code :
Set xlBook = xlApp.Workbooks.Open("W:\Excel Macro\EIM File
Maneger\EIM_file_check.xlsm", 0, True)

Ceci "0, True" représente la valeur de 2 paramètres que doit prendre les
paramètres de la macro appelée. Si la macro n'a pas de paramètres, il faut
oublier cela dans la ligne de code.

MichD
 #4  
06/12/2017, 17h26
JièL
Juste une question MichD

pourquoi ajouter du VBS ?
Une tâche planifié qui lance Excel et le fichier en paramètre ne suffit
pas ?
 #5  
06/12/2017, 18h01
Michd
pourquoi ajouter du VBS ?
Une tâche planifié qui lance Excel et le fichier en paramètre ne suffit
pas ?

**** Essaie et donne-nous le résultat de ton test.

MichD
 #6  
06/12/2017, 18h33
Michd
Oui c'est possible d'ouvrir un classeur.

Si tu as une macro particulière à exécuter dans un module, dis-moi comment
tu demandes cela au moment d'enregistrer la tâche planifiée, et si la
procédure exige la valeur d'un ou de plusieurs paramètres?

OK, tu as la possibilité d'utiliser les procédures événementielles du genre
"Workbook.Open" , encore faut-il que ces procédures soient "Enable"
(application.enableEvents = true).

Un fichier .vbs donne une plus grande flexibilité et c'est relativement
simple à mettre en place.

MichD

"Michd" a écrit dans le message de groupe de discussion :
p0947s$8f8$1...

pourquoi ajouter du VBS ?
Une tâche planifié qui lance Excel et le fichier en paramètre ne suffit
pas ?

**** Essaie et donne-nous le résultat de ton test.

MichD
 #7  
06/12/2017, 18h34
JièL
Le 06/12/2017 à 17:01, Michd a écrit :
> pourquoi ajouter du VBS ?
> Une tâche planifié qui lance Excel et le fichier en paramètre ne suffit
> pas ?
> **** Essaie et donne-nous le résultat de ton test.


Pas sympa...

Si je pose la question c'est que je n'ai pas testé et que je n'ai pas
envie de perdre mon temps avec un truc qui ne m'intéresse pas et dont je
n'ai pas besoin.

Merci quand même d'avoir pris le temps de me répondre.
 #8  
06/12/2017, 19h14
JièL
Le 06/12/2017 à 17:33, Michd a écrit :
> Oui c'est possible d'ouvrir un classeur.


Nos messages se sont croisées... Je préfère celui ci.

> Si tu as une macro particulière à exécuter dans un module, dis-moi
> comment tu demandes cela au moment d'enregistrer la tâche planifiée, et
> si la procédure exige la valeur d'un ou de plusieurs paramètres?


Moi j'en étais resté à la demande de "Fredo P.", je cite : "Comment
créer une tâche automatique journalière avec W8.1 consistant à ouvrir un
classeur Excel et que la macro Private sub Workbook_Open démarre?"

Il ne parle pas de macro particulière mais de la macro "Workbook_Open"
donc je ne comprenais pas l'ajout du VBS qui en plus quitte Excel alors
que ça n'est pas ce qui est dans la demande, mais j'ai peut-être mal lu...

> OK, tu as la possibilité d'utiliser les procédures événementielles du
> genre "Workbook.Open" , encore faut-il que ces procédures soient
> "Enable" (application.enableEvents = true).


Et qu'est-ce qui les désactiveraient ?

> Un fichier .vbs donne une plus grande flexibilité et c'est relativement
> simple à mettre en place.


Ça c'est ton point de vue, perso ça complique je trouve.

Et si les macros ne sont pas actives, ça plante aussi alors ?! comme le
workbook_open si pas enable ?!

PS : pas la peine de monter sur tes grands chevaux ou te sentir agressé
quand je pose une simple question, j'avais bien précisé "Juste une
question MichD"
 #9  
06/12/2017, 21h01
Michd
| Et qu'est-ce qui les désactiveraient ?

*****Si tu utilises régulièrement des macros dans un classeur, il est
possible qu'une des procédures désactive les procédures évènementielles sans
que l'usager pense à les activer à nouveau avant de fermer! Pour ceux qui ne
font jamais d'erreur, ce n'est pas pertinent.

> Un fichier .vbs donne une plus grande flexibilité et c'est relativement
> simple à mettre en place.


Ça, c'est ton point de vue, perso ça complique je trouve.
**** Le demandeur fait ce qu'il veut ça ne me regarde pas!

Et si les macros ne sont pas actives, ça plante aussi alors ?! comme le
workbook_open si pas enable ?!
**** Et si tu appelles une macro qui n'existe pas aussi.

|PS : pas la peine de monter sur tes grands chevaux ou te sentir agressé
**** J'avais donné ma réponse avant que tu interviennes et je maintiens
que c'est la meilleure approche, la plus générale et simple à
appliquer. Il n'y a pas de "grands chevaux" dans mon intervention,
si
tu poses une question, je suppose que tu attends une réponse?

MichD
 #10  
07/12/2017, 12h01
JièL
Le 06/12/2017 à 20:01, Michd a écrit :
> | Et qu'est-ce qui les désactiveraient ?
> *****Si tu utilises régulièrement des macros dans un classeur, il est
> possible qu'une des procédures désactive les procédures évènementielles
> sans que l'usager pense à les activer à nouveau avant de fermer! Pour
> ceux qui ne font jamais d'erreur, ce n'est pas pertinent.


OK
Sous entendu personne ne ferme jamais Excel ce qui réactiverait les
procédures évènementielles

>> Un fichier .vbs donne une plus grande flexibilité et c'est
>> relativement simple à mettre en place.

> Ça, c'est ton point de vue, perso ça complique je trouve.
> **** Le demandeur fait ce qu'il veut ça ne me regarde pas!


OK

> Et si les macros ne sont pas actives, ça plante aussi alors ?! comme le
> workbook_open si pas enable ?!
> **** Et si tu appelles une macro qui n'existe pas aussi.


Ha ha ha :-)

> |PS : pas la peine de monter sur tes grands chevaux ou te sentir agressé
> **** J'avais donné ma réponse avant que tu interviennes et je maintiens
>         que c'est la meilleure approche, la plus générale et simple à
>         appliquer. Il n'y a pas de "grands chevaux" dans mon
> intervention,


Ah la barrière de la langue...
[..]

> si tu poses une question, je suppose que tu attends une réponse?


Oui, et je n'ai pas aimé ta première réponse qui etait du genre
"débrouille toi".
 #11  
07/12/2017, 13h48
Michd
Sous entendu personne ne ferme jamais Excel ce qui réactiverait les
procédures évènementielles

**** JL qui ouvre Excel une fois par mois, mais pour ceux dont Excel est
ouvert la majeure partie de la journée, si l'usager à passer volontairement
ou non "Application.EnableEvents = False", le fichier Excel par le
planificateur de tâche va ouvrir mais la procédure "Workbook_Open" ne va
jamais s'exécuter dans une telle situation. La propriété "EnableEvents"
affecte tous les classeurs ouvert par une même instance d'Excel

Ah la barrière de la langue...
[..]

**** Je n'ai aucun problème avec la langue française et toi?

Oui, et je n'ai pas aimé ta première réponse qui etait du genre
"débrouille toi".

**** Tout ça par que Monsieur a un gros égo et qu'il préfère le travail soit
fait par quelqu'un autre parce que pense-t-il, son temps est trop précieux
pour tester les propos qu'il avance même s'il possède le savoir pour le
faire... à moins que ce soit de la paresse!
Pourtant, il a toujours le temps pour de l'ergotage! Un très petit petit
petit petit... Trump en devenir! ;-))))

MichD
 #12  
08/12/2017, 01h43
JièL
Le 07/12/2017 à 12:48, Michd a écrit :
> Ah la barrière de la langue...
> [..]
> **** Je n'ai aucun problème avec la langue française et toi?


Moi non plus, mais tu as raison ça n'est pas avec la langue française
que tu as un problème...

> **** Tout ça par que Monsieur a un gros égo et qu'il préfère le travail
> soit fait par quelqu'un autre parce que pense-t-il, son temps est trop
> précieux pour tester les propos qu'il avance même s'il possède le savoir
> pour le faire... à moins que ce soit de la paresse!


J'avais pourtant bien écrit (et réécrit) "Juste une question MichD",
mais bon, y'a des gens qui lisent de gauche à droite et d'autre (sans S)
en diagonale...

> Pourtant, il a toujours le temps pour de l'ergotage! Un très petit petit
> petit petit... Trump en devenir! ;-))))


Tu sais ce qu'il te dit le "Trump en devenir" ?!

PS : même les smiley tu ne sais pas t'en servir... c'était ;->>>> qu'il
fallait mettre
 #13  
09/12/2017, 20h52
Fredo P.
Bonjour désolé du retard pour ma réponse, j'utilisais déjà un VBS tel que
celui ci-après qui fonctionne mais qui créé un message d'erreur à la
fermeture du classeur, ma question est essentiellement pour savoir si une
autre solution que celle que j'utilise avait cours. Je vais faire l'essai
avec celle de M. Denis, je vous tiendrai au courant de toute façon.
à bientôt
Dim Xl
Dim Wk
set Xl =WScript.CreateObject("Excel.Application")
Xl.Visible = True
Xl.enableevents=false
set Wk =Xl.workbooks.open("C:\Users\Frédéric\Documents\to utlesCourses.xlsb")
Xl.Run "Auto_Open"
set Wk=Nothing
set XL=Nothing

"JièL" a écrit dans le message de groupe de discussion :
5a29d217$0$20430$426a34cc...

Le 07/12/2017 à 12:48, Michd a écrit :
> Ah la barrière de la langue...
> [..]
> **** Je n'ai aucun problème avec la langue française et toi?


Moi non plus, mais tu as raison ça n'est pas avec la langue française
que tu as un problème...

> **** Tout ça par que Monsieur a un gros égo et qu'il préfère le travail
> soit fait par quelqu'un autre parce que pense-t-il, son temps est trop
> précieux pour tester les propos qu'il avance même s'il possède le savoir
> pour le faire... à moins que ce soit de la paresse!


J'avais pourtant bien écrit (et réécrit) "Juste une question MichD",
mais bon, y'a des gens qui lisent de gauche à droite et d'autre (sans S)
en diagonale...

> Pourtant, il a toujours le temps pour de l'ergotage! Un très petit petit
> petit petit... Trump en devenir! ;-))))


Tu sais ce qu'il te dit le "Trump en devenir" ?!

PS : même les smiley tu ne sais pas t'en servir... c'était ;->>>> qu'il
fallait mettre
 #14  
Hier, 09h41
Fredo P.
Bonjour Denis
Avec le script suivant, j'ai ce message d'erreur:
[..]
Ce qui m'étonne dans ta proposition c'est l'absence du nom du classeur. Le
précédent script avait cette ligne de commande :
set Wk =Xl.Workbooks.Open("C:\Users\Frédéric\Documents\to utlesCourses.xlsb")
Ta proposition actualisée:
Dim Xl , Wk
set Xl =CreateObject("Excel.Application")
Xl.DisplayAlerts = False
set Wk =Xl.Workbooks.Open("W:\Excel Macro\EIM File
Maneger\EIM_file_check.xlsm", 0, True)
Xl.Run "ToutFaire"
Wk.Save
Wk.Close=False
set Wk=Nothing
Wk.Quit
set XL=Nothing
WScript.Echo "Finished."
WScript.Quit

"Michd" a écrit dans le message de groupe de discussion :
p08rmm$1rsa$1...

Bonjour,

À l'aide de l'application "NotePad", tu copies ce qui suit. Tu enregistres
le fichier avec une extension .VBS et NON .TXT
Tu ouvres le planificateur de tâche et tu définis les paramètres qui vont
servir à déclencher la tâche qui est d'exécuter le fichier .vbs que tu viens
de créer

Un exemple de code émanant du site :
[..]

Attention, dans ce script, tu as déjà la commande qui ferme le classeur. Si
cette ligne de commande existe déjà dans la macro dans Excel, tu dois
l'enlever de ce script. Tu ne peux pas fermer un classeur 2 fois... une
erreur sera générée.

Dans ce cas, la macro "GetFiles" doit obligatoirement se trouver dans un
module standard.
Si la macro est dans un module feuille, la syntaxe : "Feuil.MaMacro"
Feuil1 n'est pas le nom de l'onglet, mais la valeur de la propriété "Name"
de l'objet "feuille" dans les propriétés de l'objet.

Dans le cas de la macro Workbook_Open, tu peux oublier cette ligne de code :
xlApp.Run "GetFiles"

'--------------------------------------------------------------------
Dim xlApp, xlBook

Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open("W:\Excel Macro\EIM File
Maneger\EIM_file_check.xlsm", 0, True)

xlApp.Run "GetFiles"

xlbook.Save
xlBook.Close False
set xlBook = Nothing

xlApp.Quit
Set xlApp = Nothing

WScript.Echo "Finished."
WScript.Quit
'--------------------------------------------------------------------

MichD
 #15  
Hier, 13h05
Michd
Quel est le nom de la macro?
Est-ce que ta macro a un ou des paramètres dans la déclaration de la
procédure comme :

Sub Test(X as string, Y as String)

Si ta procédure n'a pas de paramètres, cette ligne de code devrait être :

set Wk =Xl.Workbooks.Open("W:\Excel Macro\EIM File
Maneger\EIM_file_check.xlsm)

et non
set Wk =Xl.Workbooks.Open("W:\Excel Macro\EIM File
Maneger\EIM_file_check.xlsm", 0, True")

", 0, True" qui représente 2 paramètres que j'ai ajoutés pour donner un
exemple complet. J'ai même donné les explications dans le deuxième message
sur ce fil. Tu l'as lu?

MichD

Discussions similaires
Comment creer un identifiant automatique avec SQLExpress

comment puis je créer une liaison externe d'une tâche ?

créer une tâche avec IE

comment créer un exécutable VB à lancer en tâche de fond?


Fuseau horaire GMT +2. Il est actuellement 19h55. | Privacy Policy