Plusieurs pb à la fois...Timer, Form...

Résolu
Signaler
Messages postés
11
Date d'inscription
vendredi 15 février 2008
Statut
Membre
Dernière intervention
29 avril 2008
-
Messages postés
11
Date d'inscription
vendredi 15 février 2008
Statut
Membre
Dernière intervention
29 avril 2008
-
Bonjour,

Je suis en train de travailler sur un gros fichier (> 4000 lignes x 30 col).
Je récupère les valeurs des champs que je mets à ma sauce; plusieurs boucles, traitements des données, etc.
Tout ce traitement est très lourd mais fonctionne assez bien.

Seulement, j'ai plusieurs soucis, indépendants de ce traitement.
Tout d'abord quand je lance le programme, ma Form devient toute blanche, disparait à moitié avec un sablier et redevient normale à la fin du traitement.
Pour éviter cela, avant le lancement du programme je charge une deuxième Form avec un Doevents pour lui laisser le temps de charger et le problème est à peu près résolu.

Question 1: Est-ce la seule solution pour éviter cet effet disgracieux d'une fenêtre qui disparait à moitié pendant le traitement, que de faire appraitre une deuxième Form ?

Question 2 : Pendant le traitement qui est assez long, je souhaite tout simplement afficher l'heure et faire défiler un compteur de lignes. J'ai placé un Contrôle timer sur un label mais celui-ci n'affiche l'heure qu'une fois le traitement fini et idem pour le compteur. J'ai utilisé un Textbox dans la boucle mais celui-ci ne s'affiche aussi qu'à la fin du traitement.

Voici en raccourci le code:

Private Sub Form_click()
Dim i As Long
Timer1.Interval = 1000
Timer1.Enabled = True
For i = 1 To 100000
'programme
'programme
Text1 = i
Next i
End Sub

Private Sub Timer1_Timer()
Label1.Caption = Format(Now, "dddd dd mmmm yyyy    hh:nn:ss")
End Sub

Public Function TimerOn(Interval As Integer)
    If Interval > 0 Then
        ' Démarre le timer.
        Timer1.Interval = Interval
    Else
        ' Stop le timer.
        Timer1.Interval = 0
    End If
End Function

Merci d'avance pour vos explications  et conseils

3 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Reponse 1 : Pas vraiment besoin de'une seconde form. Par contre il te faut mettre des doevents dans tes boucles

Reponse 2 : Même phénomène que le problème 1. Le problème vient du fait que tes boucles empêche la Form de se rafraichir en lui volant tout le temps processeur. Les DoEvents à mettre dans les boucles donneront un peu d'air à ta form qui devrait alors avaoir le temps de se rafraichir

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour,

1) ajoute donc un DoEvents ici :

Private Sub Form_click()
  Dim i As Long
  Timer1.Interval = 100
  Timer1.Enabled = True
  DoEvents
  For i = 1 To 100000
    'programme
    'programme
    Text1 = i
    DoEvents
  Next i
End Sub

2) ceci :

Public Function TimerOn(Interval As Integer)
    If Interval > 0 Then
        ' Démarre le timer.
        Timer1.Interval = Interval
    Else
        ' Stop le timer.
        Timer1.Interval = 0
    End If
End Function

est pour le moins étrange !!!
relis et comprends ce que celà veut dire !!!! (rien en soi)... à moins que se passe un appel (que l'on ne voit pas, avec une variation du paramètre interval ... que l'on ne voit pas non plus !!!
Messages postés
11
Date d'inscription
vendredi 15 février 2008
Statut
Membre
Dernière intervention
29 avril 2008

Bonsoir,

Merci pour ta réponse,

Je débute en VB. Dans mon jeune temps je programmais en GWbasic, il ya qq différences...

En effet, en plaçant judicieusement un DoEvents dans la boucle, ça fonctionne.

Quant à "Public Function TimerOn(Interval As Integer)" c'est un oubli dans le copier/coller.
Restant de mes essais infructueux.

Merci pour ton aide