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 21/12/2011, 23h02   #1
Membre habitué
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : octobre 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : octobre 2008
Messages : 212
Points : 126
Points : 126
Par défaut Supprimer une instance d'Access

Bonjour à tous,

J'ai une application qui balaie une autre Base Access. Pour ce faire j'utilise le code suivant :
Code :
1
2
3
4
5
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase Me.BaseP
appAccess.Visible = False
Set db = appAccess.CurrentDb
...
En phase de débogage, j'arrête fréquemment le code avant la fin et l'instance supplémentaire d'Access reste donc ouverte. Je termine donc le processus dans le gestionnaire des tâches de windows, ce qui est un peu lourd.

Peut-on faire mieux ?
Merci de vos aides.
Cordialement,
Triton972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 08h40   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 090
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 090
Points : 11 620
Points : 11 620
Bonjour,

A part terminer proprement, ce qui est quand même conseillé pour ne pas endommagé ton application, tu peux faire un batch avec la commande système Taskkill.exe

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 01h44   #3
Membre habitué
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : octobre 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : octobre 2008
Messages : 212
Points : 126
Points : 126
Bonjour Loufab,

Je suis d'accord avec toi mais je ne sais pas faire quand je débogge et que je dois interrompre le programme ! As-tu une astuce pour terminer "proprement" et fermer une instance quand on interrompt une application en mode Debug ?

Autrement il n'existe pas de collections ou d'API permettant de balayer l'ensemble des processus actifs ?

Cordialement,
Triton972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 10h16   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 090
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 090
Points : 11 620
Points : 11 620
Bonjour,
Le AppAccess doit être déclarée comme variable globale.
Dans la fenêtre d'exécution tu envois les commandes qui te permettent de fermer proprement, celles qui doivent déjà exister à la fin de ton code.

Pas de collection mais le appAccess est suffisant.
Oui il existe surement une API puisque les process sont gérés par le système.

Le KillTask permet de fermer le process quand il n'y a plus d'accès via l'interface. Cela évite d'aller dans la fenêtre du Gestionnaire des taches.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 17h05   #5
Membre habitué
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : octobre 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : octobre 2008
Messages : 212
Points : 126
Points : 126
Bonjour,

En cherchant un peu mieux sur le forum j'ai trouvé un code que j'ai adapté.
Il permet de supprimer une instance d'Access ouverte à l'intérieur d'une application et qui est restée ouverte après une nouvelle relance de l'application.
J'ai créé une fonction que j'ai placé dans un module :
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
Function KillCalledProc() As Boolean
Dim svc As Object
Dim sQuery As String
Dim ProcessName As String
Dim oProc
 
On Error GoTo Erreur
 
ProcessName = "MSACCESS.exe"
Set svc = GetObject("winmgmts:root\cimv2")
sQuery = "SELECT * FROM win32_process WHERE name= '" & ProcessName & "'"
 
    For Each oProc In svc.execquery(sQuery)
            If oProc.CommandLine Like "*Embedding*" Then
                oProc.Terminate
            End If
    Next
Set svc = Nothing
Exit Function
 
Erreur:
    MsgBox "Error " & err.Number & " (" & err.Description & ")"
    err.Clear
End Function
ProcessName identifie les instances du processus à scruter. Pour chaque occurrence on vérifie la ligne de commande qui a lancé l'application. Si le mot clé "Embedding" est présent c'est que l'application a été lancée à partir d'une autre application. C'est donc cette instance que je supprime.
Cordialement,
Triton972 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 20h38.


 
 
 
 
Partenaires

Hébergement Web