Comment déterminez-vous l'heure d'été dans VBA?
-
02-07-2019 - |
Question
Quelle fonction nous permet de savoir si une date dans VBA est ou non en heure d'été?
La solution
Pour les dates non actuelles (heure d'été 2007+):
Tout d'abord, vous avez besoin d'une fonction pour trouver le nombre de jours de la semaine spécifiques dans un mois:
Public Function NDow(Y As Integer, M As Integer, _
N As Integer, DOW As Integer) As Date
' Returns Date of Nth Day of the Week in Month
NDow = DateSerial(Y, M, (8 - Weekday(DateSerial(Y, M, 1), _
(DOW + 1) Mod 8)) + ((N - 1) * 7))
End Function
Ensuite, vous pouvez vérifier le jour de l'heure d'été par rapport aux appels de fonction suivants:
Automne: NDow (année (date du 11 janvier), 11, 1, 1)
Printemps: NDow (année (nouvelle date), 3, 2, 1)
Pour la date actuelle:
Appelez la fonction API Windows GetTimeZoneInformation, et il retournera un enum (entier) avec le statut.
J'ai reçu le code correspondant sur l'excellent site Excel de Chip Pearson.
Autres conseils
Pour ceux qui se demandent comment comptabiliser l'heure d'été en Europe (heure de l'Europe centrale), j'ai modifié le script à partir de Puce Pearson . Le dernier dimanche de mars (2 h à 3 h) et le mois d’octobre (3 h à 2 h) sont les jours où la commutation des heures a lieu.
Le code suivant est l'événement de clic d'un bouton dans Excel:
Dim dates As String
dates = "A1:A20"
For Each c In Worksheets("Sheet1").Range(dates).Cells
If (IsDateWithinDST(c.Value)) Then
c.Value = DateAdd("h", 1, c.Value)
End If
Next
Le module contenant les méthodes nécessaires se trouve ici .