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 29/11/2011, 14h26   #1
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134
Par défaut Comment tuer xlApp.Sheets ?

Bonjour à tous,

J'ai une macro dans access qui agit sur excel et qui fonctionne bien. Mais pas si je la lance 2 fois de suite: j'ai vu que le processus EXCEL.EXE était toujours actif dans le gestionnaire des taches. Et je n'arrive pas à le killer.

Je vous mets une partie seulement de la macro:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
Private Sub MySub()
 
Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlBook As Excel.Workbook
 
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("D:\Mx\test.csv")
xlApp.Sheets("test").Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
 
xlBook.Close (True)
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
 
End Sub
Si je la lance une fois, j'obtiens ce que je veux mais le processus reste actif => à la 2ème execution, ça plante à la ligne
Code :
xlApp.Sheets("test").Columns("A:A")...
Le message d'erreur est
Citation:
Erreur d'execution '1004'. La méthode 'Range' de l'objet '_Global' a échoué
Sauriez vous m'aider ?

Merci !
debdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 18h24   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 756
Points : 1 756
Bonsoir,
modifier avec
Code :
1
2
3
4
5
6
7
8
9
 
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.application")
    If err <> 0 Then
        Set xlApp = CreateObject("Excel.application")
    End If
    err.Clear
    On Error GoTo 0
    xlApp.visible = True
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 20h12   #3
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

J'ai mis du temps, mais j'ai trouvé que ça fonctionnait en remplaçant ...
Code :
Destination:=Range("A1")
... par
Code :
Destination:=xlApp.Sheets("test").Range("A1")
Là, Excel se termine et on ne voit plus le processus.


Lorsqu'on pilote Excel par automation, il ne faut pas faire appel directement à une méthode ou une propriété du modèle objet Excel (cf ici).
Sinon cela crée une référence supplémentaire à l'objet Excel, que l'on ne pas supprimer car elle n'a pas été créée par ton code.
Tant qu'il existe au moins une référence sur un objet, celui-ci ne peut pas être détruit.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 09h46   #4
Membre habitué
 
Inscription : janvier 2005
Messages : 527
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 527
Points : 134
Points : 134


Merci pour vos réponses.
J'ai testé les 2 codes.

@helas: Grâce à ton code, je n'ai plus de message d'erreur. En revanche, le process EXCEL.EXE est toujours présent dans le gestionnaire des tâches.

@LedZeppII: Nickel, ça marche J'avais lu d'autres posts mais pas celui de ton lien.

Au final, j'ai combiné vos 2 codes.

Un grand merci à tous les 2 !

Bonne journée
debdev 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 00h28.


 
 
 
 
Partenaires

Hébergement Web