John travaille dans l’industrie de la télévision, où le chronométrage est fait à une résolution plus fine qu’une seconde. La vidéo télévisée doit prendre en compte les heures, les minutes, les secondes et les images. (Il y a trente images par seconde.) John se demandait s’il y avait un moyen de gérer les images dans Excel.

Il n’existe aucun moyen de gérer les images dans le cadre des valeurs de temps natives dans Excel. Il y a cependant plusieurs choses que vous pouvez faire pour travailler avec des cadres. La suggestion la plus évidente est peut-être de conserver les heures, les minutes et les secondes comme valeur de temps normale, puis de placer les images dans une cellule séparée. L’inconvénient immédiat de cette approche est que les calculs des «temps TV» ne sont pas aussi faciles qu’ils le seraient s’ils étaient représentés en une seule valeur.

Pour contourner ce problème, essayez de faire vos propres calculs dans une macro.

Excel passe par un processus interne de conversion des temps en valeurs décimales qui peuvent être utilisées très facilement. Vous pouvez simuler ce même processus de conversion, en convertissant une valeur de temps (y compris les images) en une valeur décimale. L’heure TV, au format 00: 29: 10: 10, peut être stockée dans une cellule (où Excel la traitera comme une chaîne) puis convertie en une valeur par la macro.

Il y a un problème ici, bien sûr: vous ne pouvez pas convertir l’heure en une vraie valeur décimale entre 0 et 1 comme Excel le fait pour les heures. La raison a à voir avec les limites des chiffres significatifs d’Excel. Pour arriver à une valeur, vous divisez les heures par 24, les minutes par 1440 (24 60), les secondes par 86400 (24 60 60) et les images par 2592000 (24 60 60 30). Lorsque vous commencez à entrer dans des valeurs aussi petites, cela dépasse les limites d’Excel de tout maintenir à quinze chiffres significatifs.

Ainsi, vous vous retrouvez avec des erreurs d’arrondi inévitables sur la valeur des images.

Une solution à ce problème consiste à ne pas essayer de travailler avec des valeurs décimales comprises entre 0 et 1, mais plutôt avec des entiers. Si vous convertissez la chaîne de temps en une valeur entière qui représente le nombre total d’images dans le temps, vous pouvez facilement faire des calculs sur la valeur résultante.

La macro suivante effectuera la conversion d’une chaîne au format déjà mentionné:

Function Time2Num(Raw) As Long     Dim FirstColon As Integer     Dim SecondColon As Integer     Dim ThirdColon As Integer     Dim NumHours As Integer     Dim NumMinutes As Integer     Dim NumSeconds As Integer     Dim NumFrames As Integer     Dim T2D As Long

Application.Volatile          FirstColon = InStr(Raw, ":")

SecondColon = InStr(FirstColon + 1, Raw, ":")

ThirdColon = InStr(SecondColon + 1, Raw, ":")



NumHours = Val(Mid(Raw, 1, FirstColon - 1))

NumMinutes = Val(Mid(Raw, FirstColon + 1, SecondColon - 1))

NumSeconds = Val(Mid(Raw, SecondColon + 1, ThirdColon - 1))

NumFrames = Val(Mid(Raw, ThirdColon + 1, Len(Raw)))



T2D = CLng(NumHours)

T2D = T2D  60 + NumMinutes     T2D = T2D  60 + NumSeconds     T2D = T2D * 30 + NumFrames

Time2Num = T2D End Function

Pour voir comment cela fonctionne, si vous avez une chaîne telle que 37: 15: 42: 06 dans la cellule A4 et que vous utilisez la formule = Time2Num (A4), le résultat est la valeur 4024266, qui est le nombre d’images dans 37 heures, 15 minutes, 42 secondes et 6 images. Pour reconvertir ces valeurs en un temps compréhensible, vous pouvez utiliser la fonction suivante:

Function Num2Time(Raw) As String     Dim NumHours As Integer     Dim NumMinutes As Integer     Dim NumSeconds As Integer     Dim NumFrames As Integer     Dim RemainingTime As Long

Application.Volatile

NumHours = Raw \ (CLng(30  60)  60)

RemainingTime = Raw Mod (CLng(30  60)  60)



NumMinutes = RemainingTime \ (60 * 30)

RemainingTime = RemainingTime Mod (60 * 30)



NumSeconds = RemainingTime \ 30     RemainingTime = RemainingTime Mod 30

NumFrames = RemainingTime

Num2Time = Format(NumHours, "00") & ":" & _       Format(NumMinutes, "00") & ":" & _       Format(NumSeconds, "00") & ":" & _       Format(NumFrames, "00")

End Function

En combinant les deux fonctions, vous pouvez faire des calculs avec les temps. Par exemple, supposons que vous ayez l’heure 00: 29: 10: 10 dans la cellule A4 et l’heure 00: 16: 12: 23 dans la cellule A5. Si vous mettez la formule suivante dans une cellule, vous pouvez trouver la différence entre les deux temps:

=Num2Time(Time2Num(A4)-Time2Num(A5))

Le résultat est 00: 12: 57: 17.

Les exemples présentés ici sont rudimentaires; ils ne prennent pas en compte la gestion des erreurs ou la vérification des limites sur les temps utilisés. Vous pouvez soit développer les exemples pour répondre à vos besoins, soit vous tourner vers une source tierce. Par exemple, vous pouvez trouver une explication (avec un exemple de classeur) pour les heures NTSC et PAL à l’URL suivante:

http://www.kenstone.net/fcp_homepage/timecode_spreadsheet.html

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (3100) 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-Calculating_TV_Time [Calculer l’heure de la télévision].