Erreurs pendant l'export des données access vers excel avec automation

epaule_tatoo Messages postés 3 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 18 juillet 2010 - 18 juil. 2010 à 01:49
epaule_tatoo Messages postés 3 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 18 juillet 2010 - 18 juil. 2010 à 11:56
Bonjour a tous,

je rencontre un soucis dans mon code VBA, je tente d'exporter une table access vers un doc excel, puis mettre ce dernier en forme avec automation.

je rencontre 2 soucis, mais malgré tout mon code fonctionne.

1 - j'ai un message erreur 462 (serveur distant n'existe pas...) cela ce produits de temps a autre et de manière aléatoire.

2 - quand le code fonctionne (pas d'erreur 462) j'ai un message d'erreur une fois mon export terminé qui me dis que excel a rencontré un problème et va être fermé, puis un popup de windows m'informe que mon programme c'est fermé.

Si qlq un a des pistes pour solutionner ce soucis ca serait sympa.

voici mon code :

Function TransfertExcelAutomation()
Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlBook As Excel.Workbook



Set xlApp = CreateObject("Excel.Application")



DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "EAB", "c:\eab.xls", True

'Initialisations

xlApp.Workbooks.Open "c:\EAB.xls"
'renomme la première feuille

Worksheets(1).Name = "DETAILS"

Worksheets(1).Range("A1:P1").Interior.ColorIndex = 16
Worksheets(1).Range("A1:P1").Font.Bold = True
Worksheets(1).Range("A1:P1").Font.Name = "Arial"
Worksheets(1).Range("A1:P1").Font.Size = "10"
Worksheets(1).Range("A1:P3000").EntireColumn.AutoFit
Worksheets(1).Range("A2:P3000").Font.Size = "10"
Worksheets(1).Range("P:P").Clear

ActiveWorkbook.Save
xlApp.Workbooks.Close
xlApp.Quit


End Function

4 réponses

Phiphi41 Messages postés 41 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 16 août 2013 1
18 juil. 2010 à 06:38
Bonjour

Tu devrais d'abord faire ton transfert vers Excel et ensuite lancer l'instance d'Excel.

Ou mieux utiliser la méthode CopyFromRecordset de l'objet Range d'Excel.
0
epaule_tatoo Messages postés 3 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 18 juillet 2010
18 juil. 2010 à 10:43
Merci je vais tenter ça,

Je vais donc mettre ma ligne docmd.transferspreadsheet tout en premier et lancer le reste du code.

j'ai déja essayer le copyfromrecordset, en creant un recordset...mais le soucis c'est que le temps d'execution est bcp plus long. (ma table a exporter peut contenir près de 2000 lignes). et je n'arrive pas à avoir un retour type msgbox qui informe de la fin des opérations.

je creuse dans cette direction et si qlq un a d'autre conseil je suis preneur, car ca me rend chevre, ce matin j'ai tester et ca a marcher du premier coup sans erreur ni plantage...
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
18 juil. 2010 à 11:12
Bonjour,

Il n'est pas judicieux d'utiliser l'ActiveWorkbook lorsqu'on accède à un fichier excel depuis access.

Lors de l'ouverture du fichier excel, affectez le à une variable

Set xlBook = xlApp.Workbooks.Open("c:\EAB.xls")


Ensuite affectez la feuille à une variable, ceci évite d'avoir en permanence à parcourir la collection d'onglets

Set xlSheet = xlBook.Worksheets(1)


Ceci va peut-être éliminer les plantages d'Excel

Exemple :
Function TransfertExcelAutomation() 
  Dim xlApp As Excel.Application 
  Dim xlSheet As Excel.Worksheet 
  Dim xlBook As Excel.Workbook 

  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "EAB", "c:\eab.xls", True 

  Set xlApp = CreateObject("Excel.Application") 

  'Initialisations 
  Set xlBook = xlApp.Workbooks.Open("c:\EAB.xls")
  Set xlSheet = xlBook.Worksheets(1)

 'renomme la première feuille 
  xlSheet.Name = "DETAILS" 

  xlSheet.Range("A1:P1").Interior.ColorIndex = 16 
  xlSheet.Range("A1:P1").Font.Bold = True 
  xlSheet.Range("A1:P1").Font.Name = "Arial" 
  xlSheet.Range("A1:P1").Font.Size = "10" 
  xlSheet.Range("A1:P3000").EntireColumn.AutoFit 
  xlSheet.Range("A2:P3000").Font.Size = "10" 
  xlSheet.Range("P:P").Clear 

  xlBook.Save 
  xlBook.Close
  xlApp.Quit 

End Function
0
epaule_tatoo Messages postés 3 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 18 juillet 2010
18 juil. 2010 à 11:56
Merci pour toutes ces infos,

j'ai "épuré" mon code, comme conseillé avec déclaration de variable, j'ai virer le docmd, pour le remplacer par un recordset, et surtout j'ai fixé le format d'enregistrement de mon fichier, car j'utilise excel 2007, et que je tentais d'enregistrer en *.xls
Avec xlBook.SaveAs "c:\eab.xls", FileFormat:=xlWorkbookNormal

je n'ai plus aucun problème.

c'est génial merci a tous
0
Rejoignez-nous