Bonjour,

Je développe en VB .net, a l'aide de la technologie windows form.
Je développe actuellement un script permettant de lire l’intégralité d'un fichier excel et d'en extraire les éléments essentiels. Ces fichiers excel sont très gros (30k lignes), et le traitement prend un peu moins d'une minute. J'ai pu simplement intégrer une progressBar avec l'avancé en fonction du nombre de ligne total et du nombre de ligne traité, code présent dans la même boucle while (qui lit l'intégralité du fichier Excel). Voici la boucle while corespondante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
                Inc = 0
                SecondEleapsed = 0
                Timer1.start
 
                While appXls.ActiveSheet.Range("A" & 1 + inc).Value.ToString <> ""
                    If IsNumeric(appXls.ActiveSheet.Range("A" & 1 + inc).Value) = False And appXls.ActiveSheet.Range("A" & 1 + inc).Value.ToString <> "Export effectué le :" Then
                        lstElement.Items.Add(appXls.ActiveSheet.Range("A" & 1 + inc).Value)
                    End If
                    inc = inc + 1
                    TotPercent = TotPercent + incpercent
                    lblProgress.Text = "Lecture du fichier : " & Math.Round(TotPercent, 2) & " %"
                    ProgressBar1.Value = Math.Truncate(TotPercent)
                End While
J'ai aussi voulu integrer un champs ETA (Estimmated Time Arrival), pour ceci, j'ai intergrer un timer et une fonction retournant environ le temps restant a l'aide du temps passé et des lignes traité :

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
 
    Dim inc As Integer = 0 'Le nombre de ligne traité depuis le lancement de la procédure
    Dim SecondEleapsed As Integer 'Le nombre de de seconde passé depuis le lancement de la procédure
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        SecondEleapsed = SecondEleapsed + 1
        txtETA.Text = ETA()
    End Sub
 
    Private Function ETA() As String
        Dim ETARes As Double
 
        ETARes = (SecondEleapsed * nbrLineTot) / inc
 
        Return ETARes
    End Function
Je lance donc mon timer avant ma boucle While, mais une fois la boucle while engagé, le while prend le dessus par rapport à l’événement tick du timer, ce qui fais que mon timer ne déclenche jamais.
J'ai pensé a un background worker, mais je ne sais pas comment il fonctionne et je n'ai pas réussi a trouver ce qui me convenais sur internet pour l'instant.

Je m'en remet donc a vous, d'avance merci a toutes les personnes qui se pencheront sur mon problème !