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

Résolu
Alain92110 Messages postés 11 Date d'inscription vendredi 15 février 2008 Statut Membre Dernière intervention 29 avril 2008 - 31 mars 2008 à 18:33
Alain92110 Messages postés 11 Date d'inscription vendredi 15 février 2008 Statut Membre Dernière intervention 29 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

Merci d'avance pour vos explications  et conseils

3 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
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 !!!
3
Alain92110 Messages postés 11 Date d'inscription vendredi 15 février 2008 Statut Membre Dernière intervention 29 avril 2008
31 mars 2008 à 21:40
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
0