IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Boucle While et Timer


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Par défaut Boucle While et Timer
    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 !

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Normalement System.Windows.Forms.Application.DoEvents() dans la boucle While devrait rendre la main au timer
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,
    À vrai dire je n'ai pas trop regardé ton code. C'est plutôt cette partie-là qui m'intrigue:

    Citation Envoyé par Ninpa Voir le message
    Bonjour,

    Je développe actuellement un script permettant de lire l’intégralité d'un fichier excel et d'en extraire les éléments essentiels.
    Parce que, je me suis demandé pourquoi lire tout le fichier, s'il en faut juste des extraits ?

    Sans avoir vu les fichiers Excel, je ne peux que spéculer. Mais, puisque tu peux accéder à Excel d'une manière similaire à une banque de données, (avec connexion et requêtes ), pourquoi ne pas utiliser cette voie qui serait sans doute plus rapide ?

    Tu peux jeter un œil par là:

    http://support.microsoft.com/kb/316934/fr
    http://support.microsoft.com/kb/247412/fr (En complément de l'article précédent, pour tenir compte des nouveaux formats de fichiers depuis Excel 2007)

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Le timer est complètement inutile ici. Il est préférable de calculer le temps écoulé directement dans la boucle. Vous pouvez utiliser la classe Stopwatch :
    http://msdn.microsoft.com/fr-fr/libr...v=vs.110).aspx

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Par défaut
    Merci l_autodidacte, j'ai placé cette méthode à la fin de ma boucle et effectivement, mon timer déclenche correctement et mon problème est résolu !

    Merci aussi à clementmarcotte, ta solution ne m’intéresse pas pour ce cas la, mais je serais surement amené a l'utiliser pour d'autres lecture, dans ce cas la, il faut vraiment que je teste toutes les lignes !

    Merci ebastien pour ta solution forte intéressante.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle Do While avec timer
    Par DDMALO dans le forum C
    Réponses: 1
    Dernier message: 13/06/2008, 00h27
  2. [AJAX] AJAX, timer et boucle while
    Par podidoo dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/03/2007, 20h36
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo