Bonjour à toutes et tous,

Je suis en train d'automatiser le traitetemnt d'un fichier contenant des dates.
J'ai écritr la fonction suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
45
46
47
 
Function Lire(ByVal NomFichier As String)
Application.ScreenUpdating = False
Workbooks.Open Filename:=NomFichier, Format:=2, Local:=False
Columns("A:A").Select
Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss.000"
 
Columns("J:J").Select
Selection.NumberFormat = "hh:mm:ss.000"
 
Dim benchTypes, steps As Range
Set benchTypes = Range("B1:B" & Range("B1").End(xlDown).Row)
Set steps = Range("C1:C" & Range("C1").End(xlDown).Row)
Set dates = Range("A1:A" & Range("A1").End(xlDown).Row)
 
Dim durations() As Date
Dim stopDate As Date
Dim startDate As Date
ReDim durations(0)
 
For i = 1 To dates.Cells.Count
    If steps.Cells(i).Text = "START" Then
    startDate = dates.Cells(i).Value
    Debug.Print "Start localisé en " & i & " : " & Format(dates.Cells(i).Value, "hh:mm:ss.000")
        For j = i To dates.Cells.Count
            If steps.Cells(j).Text = "STOP" Then
            stopDate = dates.Cells(j).Value
            Debug.Print "Stop localisé " & j & " : " & dates.Cells(j).Value
            Debug.Print stopDate - startDate
            Cells(j, 10) = stopDate - startDate
            ReDim Preserve durations(UBound(durations) + 1)
            durations(UBound(durations)) = stopDate - startDate
            Exit For
            End If
        Next
    End If
Next
 
Debug.Print UBound(durations) & " Durées collectées"
 
For i = 1 To UBound(durations)
Debug.Print Format(durations(i), "hh:mm:ss.000")
Next
 
 
Application.ScreenUpdating = True
End Function
J'ai simplifié le code pour l'exemple, le but est de faire des différences de dates à la milliseconde près (faute de mieux pour excel si j'ai bien comprit).

Avec la code ci dessus, l'import de passe bien, les formatage de la colonne A est ok, les données que j'écrit dans la colonne J

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Cells(j, 10) = stopDate - startDate
Sont au bon format (lire, avec les millisecondes).
Ce que je ne comprends pas, c'est pourquoi

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Debug.Print "Start localisé en " & i & " : " & Format(dates.Cells(i).Value, "hh:mm:ss.000")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
For i = 1 To UBound(durations)
Debug.Print Format(durations(i), "hh:mm:ss.000")
Next
Me sortent un trace à la seconde