Exécution macro à une heure précise

Bonjour à tous,

Je connais la fonction Application.Ontime qui permet de lancer une macro à une heure précise.

Seulement je voudrais savoir s'il serait possible qu'une macro s'exécute malgré que le classeur soit fermé, à l'heure programmée et sans l'avoir lancée au préalable ?

Merci d'avance pour vos retours,

Anthony

Bonjour Anthonydu31,

En 3 lignes de code VBA, c'est possible avec l'application Excel toujours active (la placer en mode réduite sur la barre de tache par - ).

Avoir simplement un fichier de macros personnelles (PERSONAL.XLSB) . Ce classeur ne contient que des macros souvent exploitées. Voir image ci-dessous.

image

Sur ce fichier dans un module placer les 2 macros suivantes.

Sub HoraireFich()
'Horaire de lancement du fichier fermé
Application.OnTime "16:45:00", "LanceFich"
End Sub

Sub LanceFich()
'Procédure d'ouverture du fichier cible fermé
Workbooks.Open ("C:\Users\Pseudo\Desktop\ExcelFich\ImagesFormes\forumModif.xlsm")
End Sub

Sur le fichier ciblé insérer auparavant dans la partie Workbook à l'évènement Workbook_BeforeClose

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Pour appeler la macro Horaire du fichier de macros personnelles
Application.Run "PERSONAL.XLSB!HoraireFich"
End Sub

Puis refermer ce fichier. Il peut aussi contenir dans son évènement Worbook_Open toute macro utile au lancement d'autres macros propres à ce fichier.

Changer le terme pseudo par sa propre variable utilisateur et modifier l'horaire de lancement selon besoin. L'ordinateur peut être "bloqué" (touche windows + L) le lancement de la macro s'effectuera quand même à l'horaire prévu. Possibilité aussi de refermer le fichier cible après tous ses traitements macro réalisés.

Bonjour,

Ok, merci X Cellus,

La question que je me pose, dans quel module est ce que je place ma macro à exécuter automatiquement qui se nomme "SendToProduit" ?

Merci encore

Bonjour,

Comme écrit en fin de mon message. Il faut placer toute macro à lancer du fichier cible dans la partie code du workbook.open.

Private Sub Workbook_open()
'Pour appeler toute macro du fichier cible
CALL  SendToProduit
End Sub

Le code de cette macro SendToProduit peut être Inscris dans n' importe quel module.

Bonjour,

J'ai le message "Variable ou procédure attendue, et non un module"

Bon j'ai soldé le problème en mettant "Cancel As Boolean" dans le workbook_Open

Par contre il ne se passe rien, la macro ne se lance pas à l'heure renseignée

A Nouveau,

1) Le fichier personal. Xlsb a bien été créé puis ajout de ces deux macros. Voir plus haut.

2) le fichier cible comporte t'il bien dans son Workbook.close la macro de lancement vers Personal.xlsb. Et dans le workbook_open la macro d'appel vers le code SendToProduit qui doit se trouver dans un des modules de ton fichier.

Merci de me montrer (Par image) les codes fournis dans les fenêtres respectives du fichier Personnalisé et du fichier cible. Pour test tu dois entrer une heure au minimum supérieure de 2 à minutes à la fermeture du fichier cible.

Note: les événements Workbook ne sont pas des modules. Il faut faire un clic droit sur le workbook dans l'éditeur VBA pour faire apparaître la fenêtre de code.

Bonjour,

Le VPN pro bloque l'envoie d'image :/

J'ai ce code dans le fichier cible:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

'Pour appeler la macro Horaire du fichier de macros personnelles
Application.Run "PERSONAL.XLSB!HoraireFich"

End Sub

Private Sub Workbook_Open(Cancel As Boolean)
'Pour appeler toute macro du fichier cible
Call SendToProduit
End Sub

Ensuite dans le module du fichier cible j'ai ma macro à lancer

Ensuite, dans un module du fichier "PERSONAL.XLSB placé dans C:\Users\MON NOM\AppData\Roaming\Microsoft\Excel\XLSTART :

Sub HoraireFich()
'Horaire de lancement du fichier fermé
Application.OnTime "17:05:00", "LanceFich"
End Sub

Sub LanceFich()
'Procédure d'ouverture du fichier cible fermé
Workbooks.Open ("C:\Users\MON NOM\Downloads\VAX Follow-Up.xlsm")
End Sub

À l'ouverture de n'importe quel fichier excel, j'ai ce message :

"Erreur de compilation:

La déclaration de la procédure ne correspond pas à la description de l'évènement ou de la procédure de même nom"

Bonjour Anthonydu31

X Cellus que je salue, vous a demandé de partager par IMAGE qu'est-ce que vous ne comprenez pas la dedans

Le message d'erreur indiqué, présume fortement que le code n'est pas placé au bon endroit

Je vous invite à relire mon message (la première phrase) qui n'amenait d'ailleurs aucune animosité.

Re,

N'en voyez aucune de ma part, je suis juste factuel

Si vous ne pouvez pas en déposer sur ce forum, vous devez pouvoir ailleurs reste à donner le lien

J'ai essayé plusieurs sites d'hébergement, tous bloqués...

Bonjour Anthonydu31, JExceL2fr,

Si tu ne peux pas insérer des images, on va voir autrement.

Ouvre seulement ton application Excel et vérifie en regardant l'éditeur que le projet Personnal.xlsb est bien présent. Si oui, règle l'horaire de lancement à 1 ou 2 minutes au dessus de l'heure actuelle.

Puis lance la macro HoraireFich. Tu devrais voir ton fichier cible ensuite s'ouvrir à l'heure programmé.

Si cela bloque sur la macro LanceFich. C'est que le chemin d'accès à ce fichier est incorrect.

Revenir sur le fil et m'inqiquer si c'est le cas où si le fichier de macro Personnal n'est pas présent automatiquement à l'ouverture d'Excel.

Il s'est bien ouvert :)

Mais toujours avec le message ci dessous à chaque ouverture et fermeture d'excel :

"Erreur de compilation:

La déclaration de la procédure ne correspond pas à la description de l'évènement ou de la procédure de même nom"

En surlignant dans le code "Private Sub Workbook_Open(Cancel As Boolean)"

Suite,

Tu vas ôter le Call dans cette macro et laisser seulement le SendToProduit.

Est ce que tu as écrit le Workbook_open ou tu la pris dans le menu déroulant en haut à droite de la fenêtre du code du workbook. En haut à gauche tu dois avoir l'objet (donc le workbook) et à droite en haut la liste de tous les événements associés à celui-ci.

J'ai copié/collé ton code dans le workbook open

Il ne fallait pas ?

Suite,

Si c'est ce code là que tu as collé dans la partie code du Workbook, alors c'est OK.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

'Pour appeler la macro Horaire du fichier de macros personnelles
Application.Run "PERSONAL.XLSB!HoraireFich"

End Sub

Private Sub Workbook_Open()
'Pour appeler toute macro du fichier cible
Stop
Call SendToProduit
Stop
End Sub

Tu vas ouvrir maintenant seulement ton fichier cible. Donc celui qui contient les 2 codes événementiels ci-dessus. Ces 2 codes ne doivent pas être dans un module mais bien dans la partie code du workbook. Faire clic droit sur la ligne du workbook pour faire apparaître la fenêtre de code. Et vérifier que ces codes sont bien là.

J'ai placé un Stop 2 fois sur le workbook_open. Fais de même pour le test. Après enregistrement du fichier puis sa réouverture. À l'ouverture le code va s'arrêter sur le Stop (surlignement en jaune). Continue la procédure en appuyant sur la touche F5. Si le code ne va pas jusqu'au 2ième stop alors c'est que la macro SendToProduit pose souci.

Ensuite tu pourras enlever les stop ou les mettre en commentaire.

Oui le code est bien dans workbook.

Le code ne démarre pas du tout.

À l'ouverture du fichier j'ai le message ci-dessous puis il ne se passe rien.

"Erreur de compilation:

La déclaration de la procédure ne correspond pas à la description de l'évènement ou de la procédure de même nom"

En surlignant dans le code "Private Sub Workbook_Open(Cancel As Boolean)"

Bonjour,

Dans ThisWorkbook vous n'auriez pas 2 procédures du même nom par hasard

image

Un peu d'aide, enfin j'espère
La déclaration de la procédure ne correspond pas à la description de l’événement ou de la procédure portant le même nom | Microsoft Learn

Rechercher des sujets similaires à "execution macro heure precise"