Execution d'une macro planifiée
Bonjour à tous,
Bon, je suis perdu.. Je souhaite exécuter une macro tous les jours du lundi au vendredi à 7h.
J'ai vu la solution de Workbookopen avec une tâche planifiée dans windows pour ouvrir le fichier.
Par contre à 8h mes collègues vont ouvrir le fichier et par défaut, la macro va se relancer automatiquement à l'ouverture de celui-ci, non ?
Ce dont j'ai besoin c'est mettre à jour les données à 7h pour qu'à 8h les collègues puissent utiliser le fichier sans avoir à attendre 10 mins que cela se mette à jour.
Merci par avance de votre aide !
Voici le code de ma macro qui met à jour les éléments :
Sub actualisation()
'
' actualisation Macro
Sheets("stock").Select
Range("Tableau_Lancer_la_requête_à_partir_de_AS400[[#Headers],[STKREEL_INV]]"). _
Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("Code etat OF").Select
Range("Tableau_Code_etat_OF[[#Headers],[CDE_ETAT]]").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("moupre_1").Select
Range("Tableau_Moupre[[#Headers],[Clé unique]]").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("Feuil1").Select
Range("C19").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End SubSalut,
Tu peux créer une variable récupérant l'heure d'ouverture de ton classeur (en utilisant la fonction Time), et ensuite mettre une condition sur cette variable.
Exemple:
- Si le classeur est ouvert entre 6h30 et 7h30, alors tu exécutes ta macro
- Sinon, tu ne fais rien
Bibu
Salut Bibu,
Ah oui ce serait top ! Par contre je suis vraiment mauvais en code VBA...
Si tu as une idée du code qu'il faudrait pour déclarer cette variable je suis preneur.
En tout cas merci pour ton aide
Sur ce même site tu as une explication de la fonction, avec le même cas de figure que toi en dernier paragraphe (à peu de chose près).
Je te laisse regarder par toi-même, tu apprendras bien plus que si c'était moi qui t'écrivais le code :)
https://www.excel-pratique.com/fr/fonctions-vba/time
Si jamais tu as vraiment du mal ceci-dit, je t'aiderais quand même
Merci beaucoup !
Du coup j'ai déclaré une macro dans le classeur, qui appel une macro de module
Private Sub Workbook_Open()
If Hour(Time) <= 7 Then Call Module2.actualisation2
End Subet ma macro de module c'est : (elle me permet de sauvegarder et quitter excel, comme ça l'utilisateur n'aura pas la MAJ à chaque ouverture)
Sub actualisation2()
'
' actualisation Macro à l'ouverture du fichier
Sheets("stock").Select
Range("Tableau_Lancer_la_requête_à_partir_de_AS400[[#Headers],[STKREEL_INV]]"). _
Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("Code etat OF").Select
Range("Tableau_Code_etat_OF[[#Headers],[CDE_ETAT]]").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("moupre_1").Select
Range("Tableau_Moupre[[#Headers],[Clé unique]]").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("Feuil1").Select
Range("C19").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
ActiveWorkbook.save
Application.Quit
End SubJ'ai testé et cela marche, je n'ai plus qu'à coupler cela avec un planificateur de tâche windows et normalement ça roule.
Encore merci pour l'info sur time, ça m'a bien aidé !