Alain92110
Messages postés11Date d'inscriptionvendredi 15 février 2008StatutMembreDernière intervention29 avril 2008
-
31 mars 2008 à 18:33
Alain92110
Messages postés11Date d'inscriptionvendredi 15 février 2008StatutMembreDernière intervention29 avril 2008
-
31 mars 2008 à 21:40
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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 31 mars 2008 à 18:46
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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 31 mars 2008 à 18:48
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 !!!