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 24/08/2011, 17h26   #1
Membre confirmé
 
Avatar de lelensois16
 
Homme Romain M.
Étudiant
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Romain M.
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 204
Points : 204
Par défaut Stopper une procédure Automation

Bonjour,

J'ai crée une procédure d'extraction Access - Excel via Automation.
Comme la procédure d'extraction est parfois longue ( 3 min ) :


- Si l'utilisateur clique sur le bouton Extraire , un formulaire apparait
- Sur ce formulaire , j'ai implémenté une barre de progression ( controle ProgressBar ) , il marche sans problème. Ce même formulaire contient un bouton annuler.
- à la fin de la barre de progression le formulaire disparait

Le problème c'est que je ne peux même pas cliquer sur le bouton en question , ni stopper la procédure de la manière habituelle ( Echap ou Ctrl + pause ) , meme pas faire une autre action sous Access.

Voici un bout de code ( j'ai enlevé les parties qui ne nous intéressent pas )

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
 
DoCmd.OpenForm "Attente_Extraction", acNormal
 
 
Forms("Attente_Extraction").Controls("ProgressBar").Min = 0
Forms("Attente_Extraction").Controls("ProgressBar").Max = 100
Forms("Attente_Extraction").Controls("ProgressBar").Value = 0
 
 
SQL = "Select Count(*) From ( " & m_strSQLORIGIN & " ) "
Debug.Print SQL
Set rst = Access.OpenRecordset(SQL)
NbreMax = 100 / rst.Fields(0)
Set rst = Nothing
 
Forms("Attente_Extraction").Controls("ETIQ").Value = " Temps total estimé : " & Round(((NbreMax * 100) / 50), 2) & " secondes "
 
 
m_strSQLORIGIN = " Select * From ( " & m_strSQLORIGIN & " ) Order by Date_pose "
 
    Set wksCommandes = wbkCommandes.Sheets("Feuil1")
    Set rst = Access.OpenRecordset(m_strSQLORIGIN)
 
    'On alimente les classeurs concernées
    With wksCommandes
        InitCol = 1
        For Each fld In rst.Fields
            .Cells(1, InitCol).Value = fld.Name
            InitCol = InitCol + 1
        Next fld
        InitLig = 2
        Do While Not rst.EOF
            InitCol = 1
            For Each fld In rst.Fields
                .Cells(InitLig, InitCol).Value = rst(InitCol - 1)
                InitCol = InitCol + 1
                Next fld
            InitLig = InitLig + 1
            rst.MoveNext
        'Forms("Attente_Extraction").Controls("ProgressBar").Value = Forms("Attente_Extraction").Controls("ProgressBar").Value + NbreMax
        Loop
    .Cells.EntireColumn.AutoFit
    .Columns("E:E").NumberFormat = "m/d/yyyy"
    .Columns("K:K").NumberFormat = "m/d/yyyy"
    .Columns("Q:Q").NumberFormat = "m/d/yyyy"
    .Columns("R:R").NumberFormat = "m/d/yyyy"
    .Columns("S:S").NumberFormat = "m/d/yyyy"
    .Range("A1").AutoFilter
    .Range("A2").Activate
    ActiveWindow.FreezePanes = True
    End With
 
Excel.Visible = False
 
Chrono = Timer - Chrono
Debug.Print "Temps d'éxecution du code en : " & CStr(Chrono * 1000) & "ms"
 
DoCmd.Close acForm, "Attente_Extraction", acSaveYes
Merci d'avance pour les pistes ,

Cdt
lelensois16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 18h23   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Pour que Access réagisse aux commandes externe tu peux essayer d'ajouter des instruction DoEvents un peu partout dans ton code et particulièrement à l'intérieur des boucles.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/08/2011, 18h35   #3
Membre confirmé
 
Avatar de lelensois16
 
Homme Romain M.
Étudiant
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Romain M.
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 204
Points : 204
Bonjour
EXCELLENT ,
le pire c'est que cette instruction était cité dans la FAQ d'Access.

cdt
lelensois16 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 08h28.


 
 
 
 
Partenaires

Hébergement Web