Question

Quelle fonction nous permet de savoir si une date dans VBA est ou non en heure d'été?

Était-ce utile?

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.

le site de 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 .

Plus d'informations sur l'heure d'été en Europe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top