Conversion automatique en GMT (Microsoft Excel)
GMT est un acronyme pour Greenwich Meridian Time, qui est une heure de référence pour le monde; c’est l’heure de Greenwich, en Angleterre, et est parfois appelée «heure zouloue». (Zulu est le nom phonétique de zéro et le zéro fait référence à la longitude de Greenwich, en Angleterre.)
Vous devrez peut-être convertir une heure locale en GMT dans votre feuille de calcul. Si vous savez toujours que l’heure sera saisie en heure locale, cela peut être fait assez facilement avec une formule. Par exemple, supposons que vous entrez l’heure locale dans la cellule B7 et que vous vous trouvez dans le fuseau horaire du Pacifique. Dans ce fuseau horaire, vous avez sept ou huit heures de retard sur GMT, selon que l’heure d’été est en vigueur. La formule suivante ajustera l’heure entrée dans B7 de sept ou huit heures, selon que la date associée à l’heure se situe dans la période de l’heure d’été.
=IF(AND(B7>=DATEVALUE("3/8/2009 02:00"),B19<= DATEVALUE("11/01/2009 02:00")),B7+7/24,B7+8/24)
N’oubliez pas que chaque fois que vous entrez une heure dans une cellule, Excel y attache automatiquement une date. Ainsi, si vous entrez une heure de 10h15 dans une cellule et que le jour où vous effectuez l’entrée est le 17 janvier, Excel convertit automatiquement l’entrée de la cellule en 17/01/2009 10:15:00. Ceci est fait même si vous n’affichez peut-être que l’heure dans la cellule – dans Excel, chaque date est associée à une heure et chaque heure est associée à une date.
En raison de ce comportement d’entrée, Excel utilise la formule qui vient d’être affichée pour effectuer l’ajustement approprié en fonction de la date par défaut lorsque vous entrez une heure (date du jour) ou une date que vous pouvez entrer explicitement.
Le seul inconvénient de cette approche basée sur une formule est que vous devez vous rappeler de modifier les dates limites de l’heure d’été d’une année à l’autre.
(Ceux de la formule sont pour 2009.) Vous pouvez changer la formule de sorte que vous stockiez réellement les dates limites dans des cellules, telles que E1 et E2, comme suit:
=IF(AND(B7>=$E$1,B19<=$E$2),B7+7/24,B7+8/24)
Bien que la formule soit plus courte, elle pose toujours un problème avec la détermination plutôt statique du début et de la fin de l’heure d’été – vous devez vous rappeler de mettre à jour ces informations manuellement. De plus, si vous passez à un autre fuseau horaire, vous devez vous rappeler de modifier les valeurs d’ajustement de la date et de l’heure.
Un moyen très pratique de contourner ces inconvénients consiste à créer une fonction définie par l’utilisateur qui accède à l’interface Windows et détermine les paramètres système de votre ordinateur. Votre système effectue automatiquement le suivi de l’heure d’été, ainsi que du fuseau horaire dans lequel vous vous trouvez. En accédant à ces informations via une fonction définie par l’utilisateur, vous n’aurez jamais à vous soucier de ces éléments dans votre feuille de calcul. Vous pouvez utiliser la macro suivante pour faire exactement cela:
Option Explicit Public Declare Function SystemTimeToFileTime Lib _ "kernel32" (lpSystemTime As SYSTEMTIME, _ lpFileTime As FILETIME) As Long Public Declare Function LocalFileTimeToFileTime Lib _ "kernel32" (lpLocalFileTime As FILETIME, _ lpFileTime As FILETIME) As Long Public Declare Function FileTimeToSystemTime Lib _ "kernel32" (lpFileTime As FILETIME, lpSystemTime _ As SYSTEMTIME) As Long Public Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Public Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type Public Function LocalTimeToUTC(dteTime As Date) As Date Dim dteLocalFileTime As FILETIME Dim dteFileTime As FILETIME Dim dteLocalSystemTime As SYSTEMTIME Dim dteSystemTime As SYSTEMTIME dteLocalSystemTime.wYear = CInt(Year(dteTime)) dteLocalSystemTime.wMonth = CInt(Month(dteTime)) dteLocalSystemTime.wDay = CInt(Day(dteTime)) dteLocalSystemTime.wHour = CInt(Hour(dteTime)) dteLocalSystemTime.wMinute = CInt(Minute(dteTime)) dteLocalSystemTime.wSecond = CInt(Second(dteTime)) Call SystemTimeToFileTime(dteLocalSystemTime, _ dteLocalFileTime) Call LocalFileTimeToFileTime(dteLocalFileTime, _ dteFileTime) Call FileTimeToSystemTime(dteFileTime, dteSystemTime) LocalTimeToUTC = CDate(dteSystemTime.wMonth & "/" & _ dteSystemTime.wDay & "/" & _ dteSystemTime.wYear & " " & _ dteSystemTime.wHour & ":" & _ dteSystemTime.wMinute & ":" & _ dteSystemTime.wSecond) End Function
Cela peut sembler imposant, comme c’est souvent le cas lorsque vous travaillez avec des appels système, mais cela fonctionne à merveille. Il existe trois routines système référencées (SystemTimeToFileTime, LocalFileTimeToFileTime et FileTimeToSystemTime). En configurant les appels et en les utilisant dans l’ordre, la date et l’heure sont automatiquement ajustées à GMT. Pour utiliser la fonction, dans votre feuille de calcul, vous devez entrer ceci pour convertir l’heure dans la cellule B7:
=localtimetoutc(B7)
Formatez la cellule comme date / heure, et la sortie est exactement ce que vous vouliez.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (2185) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:
lien: / excelribbon-Automatically_Converting_to_GMT [Conversion automatique en GMT]
.