XL 2019 Exécuter une procédure à une heure définie (plannification)

Data Enthousiast

XLDnaute Nouveau
Bonjour,
Je suis débutant en VBA , et je suis confronté à un problème qui consiste de cliquer une seule fois sur un bouton créé dans une feuille d'excel pour exécuter une procédure chaque matin à 9h , cette procédure permet d'exporter les données (valeurs) du jour précédent lorsque la base de données de l'entreprise est mise à jour.

J'ai mis en place un code qui permet si nous sommes lundi d'exporter les données du vendredi de la semaine précédente ( en ignorant le samedi et le dimanche), si nous sommes mardi ou mercredi ou jeudi ou vendredi d'exporter les données du jour précédent de la semaine en cours , et si nous sommes le weekend de ne rien faire .

Mon problème est que le code que j'ai mis en place, marche que pour un seul jour et ne marche pas pour les jours suivants après avoir cliquer sur le bouton dans le fichier excel associé au code.

Je souhaiterais que lorsque je clique sur le bouton une seule fois que la procédure s'exécute chaque matin(9h) tout les jours de la semaine ( du lundi au vendredi ) sans avoir besoin de nouveau cliquer sur le bouton.

Svp Est-ce qu'il y aurait une personne ayant été confrontée à de tel problème pour m'aider ?

Ci-dessous mon code :
VB:
'Exportation du fichier Nova chaque matin à 8h

Public Sub Robot()

Dim mydate As Date
Dim wsOIL_Spot As Worksheet
Dim wsFX_Spot As Worksheet
Dim lastOILSpotDate As Date
Dim lastFXSpotDate As Date
Dim lastNovaExportDate As Date
Dim exported As Boolean

    exported = False
    
    Set wsOIL_Spot = ThisWorkbook.Sheets("OIL_Spot")
    Set wsFX_Spot = ThisWorkbook.Sheets("FX_Spot")
  
    mydate = Date
    
    If Weekday(mydate, vbMonday) = 1 Then  ' si nous sommes lundi
        mydate = Date - 3 '  gestion weeckend , si lundi, exporter les données du vendredi précédent
      
      Else
      
        mydate = Date - 1
        
    End If
    
    lastOILSpotDate = CDate(mydate)
    lastFXSpotDate = CDate(mydate)
    
    lastNovaExportDate = IIf(Weekday(mydate, vbMonday) = 1, CDate(mydate) - 3, CDate(mydate) - 1)




'Gérer les week ends. 6 is saturday and 7 is sunday

    If Weekday(mydate) = 1 Or Weekday(mydate) = 2 Or Weekday(mydate) = 3 Or Weekday(mydate) = 4 Or Weekday(mydate) = 5 Then
    
        Application.OnTime TimeValue("09:00:00"), "Procédure_Export"      'lundi
        
        Application.Wait TimeValue("00:00:05")
        
        
        Application.OnTime TimeValue("09:00:00"), "Procédure_Export"         'mardi
        
         Application.Wait TimeValue("00:00:05")
        
        
        Application.OnTime TimeValue("09:00:00"), "Procédure_Export"    'Mercredi
         Application.Wait TimeValue("00:00:05")
        
        
        Application.OnTime TimeValue("09:00:00"), "Procédure_Export"   'Jeudi
        
         Application.Wait TimeValue("00:00:05")
        
        
        Application.OnTime TimeValue("09:00:00"), "Procédure_Export"   Vendredi
        

    End If
    

End Sub
 

dysorthographie

XLDnaute Impliqué
Bonjour,
Personnellement je définirai un fichier Vbscript contenant la macro et je confirmerai au planificateur de tâche de Windows l'exécution tous les jours à 9 heures !

Notes que le planificateur de tâches de Windows te permet de sélectionner les jours de la semaine.

Exemple de code vbscript.
Code:
With creatobject ("Excel.Applicaton")
      .visible=True
     With .workbooks.open("c:\myrep\fichier.xlsm")
        .application.run "Procédure_Export"
       .close
      End with
    .quit
End with
Dans ton code tu n'as plus à tester le jour de la semaine vue qu'il est possible de définir les jours et l'heure dans le planificateur de tâche !
 
Dernière édition:

Data Enthousiast

XLDnaute Nouveau
Bonjour,
Personnellement je définirai un fichier Vbscript contenant la macro et je confirmerai au planificateur de tâche de Windows l'exécution tous les jours à 9 heures !

Notes que le planificateur de tâches de Windows te permet de sélectionner les jours de la semaine.
Je vous remercie pour votre retour,

Comment je dois procéder pour définir un fichier VBscript ?

Comment se passe confirmation de la planification de tache de windows ?

Svp pourriez vous me détaillez un peu plus le processus
 

dysorthographie

XLDnaute Impliqué
Un fichier Vbscript c'est un fichier texte avec l'extension VBS!

Je t'invites à télécharger VBS FACTORY il est gratuit !
Comment se passe confirmation de la planification de tache de windows ?
Il est possible d'implémenter un journal.
 

Data Enthousiast

XLDnaute Nouveau
Un fichier Vbscript c'est un fichier texte avec l'extension VBS!

Je t'invites à télécharger VBS FACTORY il est gratuit !

Il est possible d'implémenter un journal.
Je vous en remercie pour votre réponse , mais je pense que ça résout pas mon problème, car la procédure que je veux exécuter en définissant l'heure après click sur le bouton, peut etre lancé par un autre utilisateur sur un poste différent.

Donc le mieux c'est de coder pour résoudre le problème, dans ce cas quelque soit le poste lorsque le bouton est cliqué la procédure sera lancé automatiquement pour chaque matin (du lundi au vendredi).

Auriez vous une idée de code pour m'aider svp ?
 

Data Enthousiast

XLDnaute Nouveau
Je comprends pas mais c'est ton choix !

Si l'idée est de traiter les informations de la veille tu peux même faire le traitement avant l'arrivé de tout le monde !

Mais bon.
Pour comprendre vous pourriez lire le sujet de départ et le code joint.

Oui exactement c'est les informations de la veille qui sont récupérées par la procédure que je souhaite exécuté quotidiennement chaque matin en planifiant une heure d'exécution.
 

Data Enthousiast

XLDnaute Nouveau
J'ai bien relu les messages que j'ai posté,et je n'y ai vu occune agressivité de ma part !
J'ai juste tenté de t'apporter un solution qui me semble plus profitable !
Il n'y a aucune agressivité de votre part, pour ma réponse je voulais juste vous renvoyer sur le sujet de départ pour comprendre ce que je vise comme objectif.

Je vous remercie un fois de plus pour vos réponses et solutions proposées
 

patricktoulon

XLDnaute Barbatruc
bonjour
CC' Robert ;)
on peut programmer une taches WindoWs a partir de VBA

testé encore toute a l'heure
donc une fois que tu a sauvé le code de Robert dans un .VBS

tu met ca dans un fichier excel (un module)
adapte bien le nom de la tache que tu veux et le chemin du vbs
exemple ci dessous tout les vendredi a 09:00 ton fichier sera declenché
voir commentaire pour tout les jours de la semaine


VB:
'tout les vendredi à 09:00
Sub testCreatetache()
    Set wShell = CreateObject("Wscript.Shell")

    'adapter le chemin du fichier vbs ci-dessous
    chemin_fichier = """C:\Users\polux\DeskTop\monfichier.vbs"""    ' dans ce vbs tu ouvre l'app excel sur ton fichier

    nomtache = """job"""    ' nom de la tache

    jour = "FRI"    'pour tout les vendredis ' si pour plusieurs jours  'jour= "MON,TUE,WED,THU,FRI,SAT,SUN"

    A_quelle_Heure = "09:00"    'ici l'heure a la quelle se déclenche la tache

    'et donc on envoie la programation de tache  à windows
    'codée avec argument
    wShell.Run "SchTasks /Create /SC WEEKLY /D " & jour & " /TN " & nomtache & " /TR " & chemin_fichier & " /ST " & A_quelle_Heure

    'exemple codé en dur
    'wShell.Run "SchTasks /Create /SC WEEKLY /D WED /TN 'job' /TR 'C:\Users\polux\DeskTop\monfichier.vbs' /ST 09:00"
End Sub

Robert pour le delete si tu a la ligne de code je prends

aperçu dans l interface de gestion de tache planifiées de Windows
1622808295415.png
 

dysorthographie

XLDnaute Impliqué
Bonjour Patrick,
VB:
Sub test()
DeleteTask "job"

End Sub
Sub DeleteTask(strTaskName As String)
With CreateObject("Wscript.Shell")
Debug.Print "SchTasks /delete /Tn """ & strTaskName & """ /F"
 .Run "SchTasks /delete /Tn """ & strTaskName & """ /F"
End With
End Sub
 

Statistiques des forums

Discussions
291 805
Messages
1 918 117
Membres
179 932
dernier inscrit
Starsat1200
Haut Bas