OVH Cloud OVH Cloud

Erreur lors d'un export vers Excel

7 réponses
Avatar
Isa.
Bonjour =E0 tous,

J'ai fait un petit programme pour exporter le contenu=20
d'une table vers un fichier Excel.
Mon pb c'est que tout se d=E9roule bien jusqu'au moment o=F9=20
je veux ouvrir mon fichier Excel : Excel est alors plant=E9.
J'ai constat=E9 que lorsque mon prog a fini de tourner un=20
processus Excel reste encore actif dans la liste des=20
process et si je veux que =E7a remarche je dois le tuer.
Quelqu'un a-t-il une id=E9e de ce que je dois faire pour=20
rem=E9dier =E0 ce pb ?
De plus, je souhaiterais v=E9rifier avant de cr=E9er mon=20
fichier Excel qu'il n'existe pas d=E9j=E0. Comment puis-je=20
faire ?
Enfin y a-t-il un avantage =E0 avoir "xls.Visible =3D True"=20
mis =E0 part le fait qu'Excel soit ouvert ?
D'avance merci pour vos r=E9ponses.

Isa.

Ci-joint mon code :
Dim xls As Excel.Application
Dim connexion As New ADODB.Connection
Dim R As New ADODB.Recordset
Dim SQL As String
=20
' D=E9claration d'une connexion pour la base en cours
Set connexion =3D CurrentProject.Connection
=20
' Ouverture d'un lien avec excel
Set xls =3D Excel.Application
=20
' Ouverture d'Excel =E0 non visible
xls.Visible =3D False
=20
' S=E9lection du contenu de la table import
SQL =3D "SELECT * FROM import;"

Set R =3D connexion.Execute(SQL)
=20
' Ouverture du fichier mod=E8le (=E0 remplir)
xls.Workbooks.Open "D:\Test\modele.xls"
xls.ScreenUpdating =3D False
=20
' Remplissage du fichier
xls.Range("A6").CopyFromRecordset R

R.Close
=20
Set connexion =3D Nothing
=20
xls.ActiveWorkbook.SaveAs "D:\Test\resultat.xls"
=20
xls.ScreenUpdating =3D True
xls.Quit
=20
Set xls =3D Nothing

7 réponses

Avatar
Xavier HUE
Bonjour isa,

processus Excel reste encore actif dans la liste des
Sans doute lié à une variable objet non libérée (par un

Set xxx = Nothing).

R.Close
Set R = Nothing <====


Set connexion = Nothing


Il est fortement recommandé de fermer et libéré toutes les
variables objets utilisées.

De plus, je souhaiterais vérifier avant de créer mon
fichier Excel qu'il n'existe pas déjà. Comment puis-je
faire ?
Regarde la fonction "Dir" dans l'aide en ligne.


Enfin y a-t-il un avantage à avoir "xls.Visible = True"
mis à part le fait qu'Excel soit ouvert ?
Je dirais plutôt désavantage.

En effet, si la feuille active présente beaucoup
d'informations, Excel doit les raffraichir à chaque
modification. Ce qui peut ralentir les performances de ton
code. De plus dans ton code, tu rends Excel Visible, et
lui interdit de raffraichir l'écran par ScreenUpdating =
False. A ta place, j'essaierais de démarrer et piloter
Excel en Invisible.

Cordialement.

Avatar
Isa.
Pour mon erreur de process Excel qui tourne, j'ai libéré
tous les objets mais ça ne résoud pas le pb.
Aurais-tu une autre idée ?
Merci.

Isa.



-----Message d'origine-----
Bonjour isa,

processus Excel reste encore actif dans la liste des
Sans doute lié à une variable objet non libérée (par un

Set xxx = Nothing).

R.Close
Set R = Nothing <====


Set connexion = Nothing


Il est fortement recommandé de fermer et libéré toutes
les

variables objets utilisées.

De plus, je souhaiterais vérifier avant de créer mon
fichier Excel qu'il n'existe pas déjà. Comment puis-je
faire ?
Regarde la fonction "Dir" dans l'aide en ligne.


Enfin y a-t-il un avantage à avoir "xls.Visible = True"
mis à part le fait qu'Excel soit ouvert ?
Je dirais plutôt désavantage.

En effet, si la feuille active présente beaucoup
d'informations, Excel doit les raffraichir à chaque
modification. Ce qui peut ralentir les performances de
ton

code. De plus dans ton code, tu rends Excel Visible, et
lui interdit de raffraichir l'écran par ScreenUpdating =
False. A ta place, j'essaierais de démarrer et piloter
Excel en Invisible.

Cordialement.
.




Avatar
Damien Mermoz
Salut,
Franchement pourquoi ne te satisfaits tu pas d'un
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "import",
"D:Testmodele.xls" ???

Maintenant pour ton automation on peut peut être voir en utilisant la
fonction getobject
ex:

Dim xls As Excel.Application

on error resume next
set xls = getObject(, "Excel.application")
's'il n'y a pas déjà un processus excel alors on en créer un
if err.number = 429 then
set xls = new Excel.application
end if
on error goto 0
...etc

Ceci corrigera ton problème si tu lancais ton code en ayant déjà un classeur
excel ouvert. Sinon à mon avis ca changera pas grand chose.

En espérant t'aider un peu.

A +
Damien .
"Isa." a écrit dans le message news:
00b301c3b43c$3c2c00a0$
Pour mon erreur de process Excel qui tourne, j'ai libéré
tous les objets mais ça ne résoud pas le pb.
Aurais-tu une autre idée ?
Merci.

Isa.



-----Message d'origine-----
Bonjour isa,

processus Excel reste encore actif dans la liste des
Sans doute lié à une variable objet non libérée (par un

Set xxx = Nothing).

R.Close
Set R = Nothing <=== >>

Set connexion = Nothing


Il est fortement recommandé de fermer et libéré toutes
les

variables objets utilisées.

De plus, je souhaiterais vérifier avant de créer mon
fichier Excel qu'il n'existe pas déjà. Comment puis-je
faire ?
Regarde la fonction "Dir" dans l'aide en ligne.


Enfin y a-t-il un avantage à avoir "xls.Visible = True"
mis à part le fait qu'Excel soit ouvert ?
Je dirais plutôt désavantage.

En effet, si la feuille active présente beaucoup
d'informations, Excel doit les raffraichir à chaque
modification. Ce qui peut ralentir les performances de
ton

code. De plus dans ton code, tu rends Excel Visible, et
lui interdit de raffraichir l'écran par ScreenUpdating >False. A ta place, j'essaierais de démarrer et piloter
Excel en Invisible.

Cordialement.
.




Avatar
Xavier HUE
Désolé :-(

Je ne vois pas autre chose pour l'instant.
Si j'ai un moment demain, je teste ton code.

Cordialement.
Avatar
Raymond [mvp]
Bonsoir Isa.

lis la page: http://access.seneque.free.fr/transfert_recordset.htm
je ne pense pas avoir eu des problèmes avec ma procédure.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Isa." a écrit dans le message de
news:0fde01c3b431$2c2909b0$
Bonjour à tous,

J'ai fait un petit programme pour exporter le contenu
d'une table vers un fichier Excel.
Mon pb c'est que tout se déroule bien jusqu'au moment où
je veux ouvrir mon fichier Excel : Excel est alors planté.
J'ai constaté que lorsque mon prog a fini de tourner un
processus Excel reste encore actif dans la liste des
process et si je veux que ça remarche je dois le tuer.
Quelqu'un a-t-il une idée de ce que je dois faire pour
remédier à ce pb ?
De plus, je souhaiterais vérifier avant de créer mon
fichier Excel qu'il n'existe pas déjà. Comment puis-je
faire ?
Enfin y a-t-il un avantage à avoir "xls.Visible = True"
mis à part le fait qu'Excel soit ouvert ?
D'avance merci pour vos réponses.

Isa.

Ci-joint mon code :
Dim xls As Excel.Application
Dim connexion As New ADODB.Connection
Dim R As New ADODB.Recordset
Dim SQL As String

' Déclaration d'une connexion pour la base en cours
Set connexion = CurrentProject.Connection

' Ouverture d'un lien avec excel
Set xls = Excel.Application

' Ouverture d'Excel à non visible
xls.Visible = False

' Sélection du contenu de la table import
SQL = "SELECT * FROM import;"

Set R = connexion.Execute(SQL)

' Ouverture du fichier modèle (à remplir)
xls.Workbooks.Open "D:Testmodele.xls"
xls.ScreenUpdating = False

' Remplissage du fichier
xls.Range("A6").CopyFromRecordset R

R.Close

Set connexion = Nothing

xls.ActiveWorkbook.SaveAs "D:Testresultat.xls"

xls.ScreenUpdating = True
xls.Quit

Set xls = Nothing
Avatar
Isa.
Merci beaucoup à vous deux, je vais tester tout ça.

Damien, jusqu'à présent je me servais de
transferSpeadsheet.
Mais maintenant les utilisateurs veulent un doc avec un
titre et du baratin en haut sur 4 ou 5 lignes et en plus
les cadres autour des cellules, pour avoir un doc vraiment
clean.
Donc juste avec cette commande, je n'y arrive pas, c'est
pour ça que j'ai fait un modèle et du code précis.

Isa.

-----Message d'origine-----
Salut,
Franchement pourquoi ne te satisfaits tu pas d'un
DoCmd.TransferSpreadsheet acExport,
acSpreadsheetTypeExcel9, "import",

"D:Testmodele.xls" ???

Maintenant pour ton automation on peut peut être voir en
utilisant la

fonction getobject
ex:

Dim xls As Excel.Application

on error resume next
set xls = getObject(, "Excel.application")
's'il n'y a pas déjà un processus excel alors on en créer
un

if err.number = 429 then
set xls = new Excel.application
end if
on error goto 0
....etc

Ceci corrigera ton problème si tu lancais ton code en
ayant déjà un classeur

excel ouvert. Sinon à mon avis ca changera pas grand
chose.


En espérant t'aider un peu.

A +
Damien .
"Isa." a écrit dans
le message news:

00b301c3b43c$3c2c00a0$
Pour mon erreur de process Excel qui tourne, j'ai libéré
tous les objets mais ça ne résoud pas le pb.
Aurais-tu une autre idée ?
Merci.

Isa.



-----Message d'origine-----
Bonjour isa,

processus Excel reste encore actif dans la liste des
Sans doute lié à une variable objet non libérée (par un

Set xxx = Nothing).

R.Close
Set R = Nothing <====


Set connexion = Nothing


Il est fortement recommandé de fermer et libéré toutes
les

variables objets utilisées.

De plus, je souhaiterais vérifier avant de créer mon
fichier Excel qu'il n'existe pas déjà. Comment puis-je
faire ?
Regarde la fonction "Dir" dans l'aide en ligne.


Enfin y a-t-il un avantage à avoir "xls.Visible = True"
mis à part le fait qu'Excel soit ouvert ?
Je dirais plutôt désavantage.

En effet, si la feuille active présente beaucoup
d'informations, Excel doit les raffraichir à chaque
modification. Ce qui peut ralentir les performances de
ton

code. De plus dans ton code, tu rends Excel Visible, et
lui interdit de raffraichir l'écran par ScreenUpdating =
False. A ta place, j'essaierais de démarrer et piloter
Excel en Invisible.

Cordialement.
.




.





Avatar
Isa.
Merci, j'avais été voir sur ton site mais j'avais pas
trouvé...

Isa.

-----Message d'origine-----
Bonsoir Isa.

lis la page:
http://access.seneque.free.fr/transfert_recordset.htm

je ne pense pas avoir eu des problèmes avec ma procédure.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Isa." a écrit dans
le message de

news:0fde01c3b431$2c2909b0$
Bonjour à tous,

J'ai fait un petit programme pour exporter le contenu
d'une table vers un fichier Excel.
Mon pb c'est que tout se déroule bien jusqu'au moment où
je veux ouvrir mon fichier Excel : Excel est alors planté.
J'ai constaté que lorsque mon prog a fini de tourner un
processus Excel reste encore actif dans la liste des
process et si je veux que ça remarche je dois le tuer.
Quelqu'un a-t-il une idée de ce que je dois faire pour
remédier à ce pb ?
De plus, je souhaiterais vérifier avant de créer mon
fichier Excel qu'il n'existe pas déjà. Comment puis-je
faire ?
Enfin y a-t-il un avantage à avoir "xls.Visible = True"
mis à part le fait qu'Excel soit ouvert ?
D'avance merci pour vos réponses.

Isa.

Ci-joint mon code :
Dim xls As Excel.Application
Dim connexion As New ADODB.Connection
Dim R As New ADODB.Recordset
Dim SQL As String

' Déclaration d'une connexion pour la base en cours
Set connexion = CurrentProject.Connection

' Ouverture d'un lien avec excel
Set xls = Excel.Application

' Ouverture d'Excel à non visible
xls.Visible = False

' Sélection du contenu de la table import
SQL = "SELECT * FROM import;"

Set R = connexion.Execute(SQL)

' Ouverture du fichier modèle (à remplir)
xls.Workbooks.Open "D:Testmodele.xls"
xls.ScreenUpdating = False

' Remplissage du fichier
xls.Range("A6").CopyFromRecordset R

R.Close

Set connexion = Nothing

xls.ActiveWorkbook.SaveAs "D:Testresultat.xls"

xls.ScreenUpdating = True
xls.Quit

Set xls = Nothing


.