Créer des tâches planifiers avec VBA et le planificateur Windows

apt

XLDnaute Impliqué
Bonsoir à tous,

J'ai laissé pour un moment le premier post dont lequel je cherche encore une solution pour planifier des tâches en utilisant Excel et les fichiers Batch :

https://www.excel-downloads.com/threads/planifier-des-taches-avec-fichier-batch-et-excel.182918/

Et j'ai ouvert ce nouveau post, parce que j'ai trouvé un code VBA qui peut créer des tâches planifiées avec le planificateur Windows mais le code après adaptation contient encore des lacunes :

1 - Les tâches sont créées pour s'exécuter périodiquement, or j'aimerais que chaque tâche soit exécutée selon le délai défini.

Par exemple : à 22:12:10 le 22/04/2012

Et qu'elle sera détruite après.

2 - Une fois le délai venu, j'ai un message d'erreur dans "Etat" me disant "N'a pas pu démarrer"

Je crois qu'il faut configurer la session dans laquelle sera exécutée la tâche.

Code:
Option Explicit 

Private Declare Function NetScheduleJobAdd& Lib "netapi32.dll" _ 
                                            (ByVal Servername$, Buffer As Any, JobID&) 
Private Declare Function GetComputerName& Lib "kernel32" Alias _ 
                                          "GetComputerNameA" (ByVal lpBuffer$, nSize&) 

Private Type AT_INFO 
    JobTime As Long 
    DaysOfMonth As Long 
    DaysOfWeek As Byte 
    Flags As Byte 
    dummy As Integer 
    command As String 
End Type 

Private Sub CreateTask(H$, D$, F$, Optional I As Boolean = False, Optional P As Boolean = True) 
    Dim Start$, Jrs$(), dWeek() As Variant 
    Dim j%, w%, AT As AT_INFO, JobID&, Computer$ 
    Computer = StrConv(ComputerName, vbUnicode) 
    MsgBox "Computer " & Computer 
    dWeek = Array("M", "T", "W", "TH", "F", "S", "SU") 
    With AT 
        Start = Format(H, "hh:mm") 
        .JobTime = (Hour(Start) * 3600 + Minute(Start) * 60) * 1000 
        Jrs = Split(D, ",") 
        ' Dates de chaque mois 
        If Val(D) Then 
            For j = 0 To UBound(Jrs) 
                .DaysOfMonth = .DaysOfMonth + 2 ^ (Jrs(j) - 1) 
            Next 
            ' Jours de chaque semaine 
        Else 
            For j = 0 To UBound(Jrs) 
                For w = 0 To UBound(dWeek) 
                    If UCase(Jrs(j)) = dWeek(w) Then 
                        .DaysOfWeek = .DaysOfWeek + 2 ^ w 
                    End If 
                Next 
            Next 
        End If 
        ' Interactivité 
        If Not I Then .Flags = .Flags Or &H10 
        ' Periodicité 
        If P Then .Flags = .Flags Or &H1 
        .command = StrConv(F, vbUnicode) 
    End With 
    If NetScheduleJobAdd(Computer, AT, JobID) Then 
        MsgBox "Impossible de créer la Tâche !", 64 
    Else 
        MsgBox "Tâche (" & JobID & ") ajoutée !", 64 
    End If 
End Sub 

Private Function ComputerName() As String 
    Dim PCName As String 
    PCName = String(50, Chr(0)) 
    GetComputerName PCName, 50 
    ComputerName = "\\" & Trim(PCName) 
End Function 

Sub AddScheduledTask() 
    Dim iTime$, iFreq$, iProg$ 
    Dim Cel As Range 
    '---- 
    For Each Cel In Range("A2:A" & [A65000].End(xlUp).Row) 
        iTime = Right(Cel, 8) 
        iFreq = Day(Left(Cel, 8)) 
        iProg = "TestDates.xls!TraitementTache" 
        CreateTask iTime, iFreq, iProg 
    Next Cel 
    '---- 
End Sub

Macro TraitementTache :

Code:
Option Explicit

'------------------------------------------
Sub TraitementTache()
    Dim Frm As Date
    Dim Rg As Range
    With Feuil1
        .Activate
        Frm = Format(Now, "dd/mm/yy hh:mm:ss")
        'Frm = Date
        ThisWorkbook.Application.Visible = True
        Set Rg = .Range("A:A").Find(What:=Frm, LookIn:=xlFormulas, LookAt:=xlPart)

        If Not Rg Is Nothing Then
            'MsgBox "La date " & Frm & " est trouvée à l'adresse " & Rg.Address
            MsgBox "Vous avez un rendez-vous " & Rg.Offset(0, 1).Value
        Else
            MsgBox "La date : " & Frm & " n'a pas été trouvée"
        End If
    End With
   ThisWorkbook.Close
End Sub

'------------------------------------------
 

Pièces jointes

  • Planificateur.xls
    52.5 KB · Affichages: 235
  • Planificateur.xls
    52.5 KB · Affichages: 245
  • Planificateur.xls
    52.5 KB · Affichages: 256

tototiti2008

XLDnaute Barbatruc
Re : Créer des tâches planifiers avec VBA et le planificateur Windows

Bonjour apt,

à ma connaissance, une tâche planifiée est liée à un login Windows et un mot de passe, or ce nouveau code ne semble pas intégrer ces paramètres
Je ne connais pas l'API NetScheduleJobAdd mais ça me semble un peu bizarre

Le premier code sur Access qui utilisait un Shell intégrait bien ces paramètres....
 

MJ13

XLDnaute Barbatruc
Re : Créer des tâches planifiers avec VBA et le planificateur Windows

Bonjour Apt, Tototiti

Pour moi, le planificateur doit plus être utilisé pour lancer des procédures tous les jours,certains jours de chaque semaines, tous les mois etc... Mais bidouiller une macro pour le faire me semble possible mais pas très pratique :confused:.

Après, tu peux logiquement avoir un fichier Excel qui s'ouvre tous les jours en allumant le PC avec des dates et heures prédéfinies et faire ce que tu veux dessus avec Ontime.

Et si tu nous disais le but final de la chose, ce serait plus facile pour trouver une solution adaptée :confused:.

N'oublie pas ausi de donner ta version de Windows ?
 

apt

XLDnaute Impliqué
Re : Créer des tâches planifiers avec VBA et le planificateur Windows

Bonsoir tototiti2008, MJ

Le premier code sur Access qui utilisait un Shell intégrait bien ces paramètres....

Oui, tu as raison, mais je n'ai pas encore maitriser cette solution.

Et si tu nous disais le but final de la chose, ce serait plus facile pour trouver une solution adaptée :confused:.

C'est seulement ouvrir un fichier Excel pour exécuter des tâches à des dates et heures prédéfinies.

N'oublie pas ausi de donner ta version de Windows ?

Windows XP Pack SP3.
 

MJ13

XLDnaute Barbatruc
Re : Créer des tâches planifiers avec VBA et le planificateur Windows

Re

Une approche ?

Oui, très simple. Sur une feuille Excel, mettez en lignes les dates d'ouverture du fichier.

Programmer votre tableur avec Ontime.

Et le tour est joué :).

C'est seulement ouvrir un fichier Excel pour exécuter des tâches à des dates et heures prédéfinies.

Le problème est que sans un début de fichier montrant exactement ce que tu veux faire, c'est quand même pas évident d'aider :confused:. Le PC, est-il toujours allumé? c'est pour le faire combien de fois par jour? tous les jours, seulement les jours ouvrables ....
 

tototiti2008

XLDnaute Barbatruc
Re : Créer des tâches planifiers avec VBA et le planificateur Windows

Bonjour apt, Bonjour Michel,

pour finaliser le choix entre le planificateur et Ontime, il faut savoir que Ontime ne permet que de programmer des macros dans les 24 heures suivantes, voir si c'est suffisant pour toi.
 

MJ13

XLDnaute Barbatruc
Re : Créer des tâches planifiers avec VBA et le planificateur Windows

Re, Bonjour Tototiti

Exemple au travail. J'ouvre un fichier tous les jours à 5H00 sur un PC toujours allumé avec une tâche planifiée (donc je l'ai programmé et cela tourne depuis des années). Je teste l'heure, sur worbook_open. Si l'heure est de 05, je lance la macro, sinon, si j'ouvre le fichier dans la journée, les macros ne sont pas lancées. C'est donc très utile et très simple à progarmmer :).
 

tototiti2008

XLDnaute Barbatruc
Re : Créer des tâches planifiers avec VBA et le planificateur Windows

Re,

Oui, le test sur l'heure peut-être fait en début de macro dans les 2 cas, je ne précisait que la limite d'Ontime
D'un autre côté, la limite du planificateur c'est qu'il ouvre forcément le fichier, Ce qu'on ne souhaite pas faire s'il est déjà ouvert, je suppose...
 

Discussions similaires

Statistiques des forums

Discussions
311 740
Messages
2 082 049
Membres
101 882
dernier inscrit
XaK_