Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/12/2011, 10h21   #1
Invité de passage
 
Inscription : août 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 9
Points : 3
Points : 3
Par défaut Attendre la fin d'un traitement avant d'en commencer un autre

Bonjour,

Principe de mon traitement : lecture en boucle d'enregistrements d'une table, chaque enregistrement correspondant à une instruction (copie de fichier, exécution macro Access, zip de répertoire etc.).

Il faudrait en fait que chaque instruction attende la fin d'exécution de la précédente pour s'exécuter (certaines durées d'exécution d'instruction peuvent aller jusqu'à plusieurs heures).

Comment faire ? Est-ce que je dois passer par un DoEvents ? Si oui, comment le gérer (je ne l'ai jamais utilisé) ? Est-ce que cet exemple pourrait convenir à mon besoin, sachant que je ne connais pas les temps d'exécution maximum des différentes instructions ?

Code :
1
2
3
4
5
6
 
Instruction 1
DoEvents
For i = 1 To 10000000
Next
Instruction 2
Je vous remercie par avance pour l'aide que vous pourrez m'apporter.

Bonne journée.
nietzsche64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 17h07   #2
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 258
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 258
Points : 1 877
Points : 1 877
Bonsoir,

Normalement il suffit de faire
Code :
1
2
3
Instruction 1
DoEvents
Instruction 2
S'il y a moyen de connaitre l'avancement de instruction1 c'est mieux pour l'utilisateur ! Si oui j'utilise syscmd qui affiche une barre d'avancement en bas...
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 17h18   #3
Invité de passage
 
Inscription : août 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 9
Points : 3
Points : 3
Citation:
Envoyé par nico84 Voir le message
Bonsoir,

Normalement il suffit de faire
Code :
1
2
3
Instruction 1
DoEvents
Instruction 2
S'il y a moyen de connaitre l'avancement de instruction1 c'est mieux pour l'utilisateur ! Si oui j'utilise syscmd qui affiche une barre d'avancement en bas...
Merci beaucoup pour ta réponse. Dans mon cas, les instructions sont exécutées dans une boucle :

Code :
1
2
3
4
5
6
 
Set matable.OpenRecordset(..)
Do While Not matable.EOF
        Exécution de mon instruction
        matable.MoveNext
Loop
Dois-je placer le DoEvents avant le MoveNext par exemple ?
Est-ce que ça peut fonctionner avec un Do While ?

Pour le syscmd, je regarderai d'abord son fonctionnement avant d'essayer de l'utiliser mais une jauge sera(it) effectivement très utile !

Merci encore pour ton aide.

Bonne soirée.
nietzsche64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 18h36   #4
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 258
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 258
Points : 1 877
Points : 1 877
Code :
1
2
3
4
5
6
7
8
9
10
11
Set matable.OpenRecordset(..)
i=0
r=syscmd(1,"traitement en cours...",matable.recordcount)
Do While Not matable.EOF
        Exécution de mon instruction
        doevents
        i=i+1
        r=syscmd(2,i)
        matable.MoveNext
Loop
r=syscmd(3)
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 09h11   #5
Invité de passage
 
Inscription : août 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 9
Points : 3
Points : 3
Ca fonctionne parfaitement bien, merci infiniment pour ton bout de code qui solutionne mes 2 besoins.

Bonne journée.
nietzsche64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h28.


 
 
 
 
Partenaires

Hébergement Web