Merci pour vos réponses,
Après vérifications, les traitements sont lancés après que la mise à jour de l'heure.
Cette mise à jour est faite le vendredi soir à 19h.
Je sais, c'est étrange, les fichiers à consulter sont issus d'un mainframe

Du coup je n'ai plus de problème puisque tous les traitements vont débuter (et donc finir) après l'ajustement de l'heure.
Par contre j'ai commis la fonction ci-dessous, des fois que ça puisse servir à d'autres:
L'idée : tester une date passée en paramètre.
S'il s'agit du dernier dimanche de mars -> il faut changer d'heure, avec un décalage de +1 heure
S'il s'agit du dernier dimanche d'octobre -> il faut changer d'heure, avec un décalage de -1 heure
Pour les autres, on ne change pas d'heure.
J'aimerai bien vos remarques sur les approches à avoir et sur comment je pourrai optimiser ça, par exemple test le mois en premier lieu (3 ou 10 uniquement).
Merci d'avance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| Sub test()
Dim dt, chgt()
dt = Now()
' dt = "29/10/2016"
' dt = "26/03/2017"
chgt = changement_heure(dt)
If chgt(0) Then
MsgBox "Date à contrôler : " & dt & vbLf & _
"Faut-il changer d'heure ? " & chgt(0) & vbLf & _
"Décalage : " & chgt(1) & " heure"
Else
MsgBox "Il n'y a aucun changement à opérer."
End If
End Sub
'Déterminer si l'on est sur une date de changement d'heure.
'@PARAM {Variant} date à tester, au format jj/mm/aaaa
'@RETURN {Variant} Renvoi un tableau contenant Vrai/Faux et l'ajustement
Function changement_heure(arg As Variant) As Variant
Dim i As Integer, arr(1) As Variant
Dim jour As Integer, mois As Integer, annee As Integer, nJour As Integer
For i = Left(DateSerial(Year(arg), Month(arg) + 1, 0), 2) To 1 Step -1
jour = Day(arg)
mois = Month(arg)
annee = Year(arg)
nJour = Weekday(i & "/" & mois & "/" & annee, vbMonday)
If nJour = 7 Then
Select Case mois
Case 3 'dernier dimanche de mars
arr(0) = True
arr(1) = 1
Case 10 'dernier dimanche d'octobre
arr(0) = True
arr(1) = -1
Case Else 'Autre cas
arr(0) = False
arr(1) = 0
End Select
Exit For
End If
Next
changement_heure = arr()
End Function |
Partager