OVH Cloud OVH Cloud

Export Excel -spécification du nom de la feuille

3 réponses
Avatar
Crevecoeur Jérôme
Bonjour,

Je suis sous Access XP SP2 et j'essaye d'exporter une feuille Excel une
table access.

Mon code est donc le suivant:
DoCmd.TransferSpreadsheet acExport, , TableTmp, cheminTableau, True

Par contre, je n'arrive pas à préciser le nom de la feuille:
Parfois, il me prend le nom de la table et d'autre fois , il me prend une
feuille déjà existante.

J'ai essayé de spécifié le nom de la feuille dans le paramétre Range, mais
cela ne fonctionne pas non plus.
J'arrive à réaliser l'export par automation, mais c'est hyper long pour
30000 lignes.

Des idées, une solution, un moyen de contournement?


Cordialement



----------------------------------------------------------------------------
--------------------
Crévecoeur Jérôme jerome.crevecoeur@acsinfo.fr

ACS INFORMATIQUE
122,rue du Château d'orgemont
49000 ANGERS
Tel: 02 41 68 42 36 Fax: 02 41 68 42 48
----------------------------------------------------------------------------
---------------------

3 réponses

Avatar
Fred M.
Bonjour Jérome,
Par automation c'est tout à fait faisable et rapide à
condition de bien s'y prendre.
Pour 30000 ce qui te faire perdre bcp de tps c'est tout
simplement l'affichage séquentiel de ton transfert. Avant
de balancer tes données, applique donc un
Application.ScreenUpdating = false. ça va figer ton écran
et te faire gagner énormément de tps. N'oublie pas de
rétablir à true à la fin !!! ;-)
Quant au range, il désigne une plage de cellule. Pour
désigner une feuille de calcul utilise la collection
Sheets.

Bon courage.
Fred M
-----Message d'origine-----
Bonjour,

Je suis sous Access XP SP2 et j'essaye d'exporter une
feuille Excel une

table access.

Mon code est donc le suivant:
DoCmd.TransferSpreadsheet acExport, , TableTmp,
cheminTableau, True


Par contre, je n'arrive pas à préciser le nom de la
feuille:

Parfois, il me prend le nom de la table et d'autre fois ,
il me prend une

feuille déjà existante.

J'ai essayé de spécifié le nom de la feuille dans le
paramétre Range, mais

cela ne fonctionne pas non plus.
J'arrive à réaliser l'export par automation, mais c'est
hyper long pour

30000 lignes.

Des idées, une solution, un moyen de contournement?


Cordialement



----------------------------------------------------------
------------------

--------------------
Crévecoeur Jérôme

ACS INFORMATIQUE
122,rue du Château d'orgemont
49000 ANGERS
Tel: 02 41 68 42 36 Fax: 02 41 68 42 48
----------------------------------------------------------
------------------

---------------------


.



Avatar
Crevecoeur Jérôme
Merci pour ta réponse.
L'application excel était déjà en invisible donc je ne pense pas que cela
joue énormément.

J'ai fait un test pour 200 lignes:
16 secondes pour Application.ScreenUpdating = false
17 secondes sans
et 2 secondes avec DoCmd.TransferSpreadsheet.
J'imagine pour 30000 lignes.

Le seul souci est le nom de la feuille de Docmd.transferSpreadsheet qui fait
un peu n'importe quoi . :-)

Une autre idée?

------------Mon code de boucle par automation------------

With objxl.Workbooks(Nomfic(cheminTableau)).Worksheets(feuille)

'Nom Colonne
col = 1
For Each fld In source.Fields
.Cells(1, col).Value = fld.Name
col = col + 1
Next fld

'Données
lig = 2
While Not source.EOF
col = 1
For Each fld In source.Fields
.Cells(lig, col).Value = source(fld.Name)
col = col + 1
Next fld
lig = lig + 1
'Debug.Print lig
source.MoveNext
Wend
End With



--
----------------------------------------------------------------------------
--------------------
Crévecoeur Jérôme

ACS INFORMATIQUE
122,rue du Château d'orgemont
49000 ANGERS
Tel: 02 41 68 42 36 Fax: 02 41 68 42 48
----------------------------------------------------------------------------
---------------------
"Fred M." a écrit dans le message de
news:179d01c38804$72becee0$
Bonjour Jérome,
Par automation c'est tout à fait faisable et rapide à
condition de bien s'y prendre.
Pour 30000 ce qui te faire perdre bcp de tps c'est tout
simplement l'affichage séquentiel de ton transfert. Avant
de balancer tes données, applique donc un
Application.ScreenUpdating = false. ça va figer ton écran
et te faire gagner énormément de tps. N'oublie pas de
rétablir à true à la fin !!! ;-)
Quant au range, il désigne une plage de cellule. Pour
désigner une feuille de calcul utilise la collection
Sheets.

Bon courage.
Fred M
-----Message d'origine-----
Bonjour,

Je suis sous Access XP SP2 et j'essaye d'exporter une
feuille Excel une

table access.

Mon code est donc le suivant:
DoCmd.TransferSpreadsheet acExport, , TableTmp,
cheminTableau, True


Par contre, je n'arrive pas à préciser le nom de la
feuille:

Parfois, il me prend le nom de la table et d'autre fois ,
il me prend une

feuille déjà existante.

J'ai essayé de spécifié le nom de la feuille dans le
paramétre Range, mais

cela ne fonctionne pas non plus.
J'arrive à réaliser l'export par automation, mais c'est
hyper long pour

30000 lignes.

Des idées, une solution, un moyen de contournement?


Cordialement



----------------------------------------------------------
------------------

--------------------
Crévecoeur Jérôme

ACS INFORMATIQUE
122,rue du Château d'orgemont
49000 ANGERS
Tel: 02 41 68 42 36 Fax: 02 41 68 42 48
----------------------------------------------------------
------------------

---------------------


.



Avatar
Raymond
Bonjour.

Pour indiquer un nom de feuille, tu indiques le paramètre range
DoCmd.TransferSpreadsheet acExport, , TableTmp, cheminTableau, True,
"Feuil2"

Il est dit partout que pour l'export il faut laisser ce paramètre vierge,
j'ai toujours vu que ça marchait mais sans indiquer de cellules.
j'ai testé ça a l'air de fonctionner.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Crevecoeur Jérôme" a écrit dans le message de
news:%
Merci pour ta réponse.
L'application excel était déjà en invisible donc je ne pense pas que cela
joue énormément.

J'ai fait un test pour 200 lignes:
16 secondes pour Application.ScreenUpdating = false
17 secondes sans
et 2 secondes avec DoCmd.TransferSpreadsheet.
J'imagine pour 30000 lignes.

Le seul souci est le nom de la feuille de Docmd.transferSpreadsheet qui
fait

un peu n'importe quoi . :-)

Une autre idée?