Bonsoir,
En cherchant, j'ai trouvé ce code vba qui crée des tâches planifiers, mais il contient encore des lacunes :
1 - Les tâches sont créés pour s'exécuter périodiquement, or j'aimerais que la tâche soit exécutée selon le delai défini.
Par exemple : à 22:12:10 le 22/04/2012
Et la tâche sera détruite après.
2 - Une fois le delai venu, j'ai un message d'erreur dans "Etat" me disant "N'a pas pu démarré"
Je crois qu'il faut configurer la session dans laquelle sera exécutée la tâche.
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