Export d'Access vers Excel

Export d'Access vers Excel - VB/VBA/VBS - Programmation

Marsh Posté le 19-09-2005 à 14:13:55    

Salut à tous,
 
Comme d'hab, j'ai des soucis avec les formats de dates !  :pt1cable:  
Ca me fait le coup à chaque fois que je développe une macro EXCEL ou ACCESS.
 
J'ai fait une requete sous Access que j'ai stocké dans un recordset.
Quand j'appuie sur un bouton "Exporter", le contenu de ce recordset est exporter vers EXCEL.
Ca marche pas mal.
J'ai utilisé le code suivant :
 
xlWs.Cells(2, 1).CopyFromRecordset rst
 
Là où je deviens chèvre, c'est qu'une fois arrivé dans ma feuille EXCEL, tous mes champs "date" sont en numérique.
Un peu chiant à lire.
Comment faire pour que mes formats de date soient conservés dans EXCEL ?
 
Merci de votre aide.
 
Laurent
 
 

Reply

Marsh Posté le 19-09-2005 à 14:13:55   

Reply

Marsh Posté le 19-09-2005 à 15:52:40    

Il suffit peut-être, dans la feuille Excel résultante, de sélectionner les cellules qui sont supposées contenir les dates, et de leur donner le format "date".
 
Si cela ne marche pas, il faudrait, du côté Access, exporter en convertissant d'abord les dates avec l'instruction format().

Reply

Marsh Posté le 19-09-2005 à 16:38:10    

Oui, bien sur !
Donner un format date une fois dans EXCEL, c'est simple et sans douleur.
Et si ça ne tenait qu'à moi, je ne me ferais pas chier à modifier mon code pour si peu.
 
Mais mes clients tirent la langue.
"Oui, c'est simple, mais vous ne pourriez tout de même pas..."
Je peux toujours leur coller deux baffes, mais ça ne résoudrait pas mon problème de format.
 
Convertir côté Access avec Format() ?
Mais côté Access, mes dates SONT en format Date !
C'est au cours de l'export que je perd ce format !
 
(Je déteste le lundi !)
 
Laurent

Reply

Marsh Posté le 19-09-2005 à 19:23:49    

Non, il ne faut pas coller des baffes aux clients qui ... paient.
A la place, si l'on suppose que les dates seront mises dans la colonne B, à partir de B2, voici comment les formatter :

 LineCount = rst.RecordCount
  For iLine = 1 To LineCount
     xlWs.Cells(iLine + 1, 2).NumberFormat = "dd/mm/yyyy"
  Next

En prime, il est possible d'ajuster la largeur et la hauteur des colonnes :

 xlApp.Selection.CurrentRegion.Columns.AutoFit
 xlApp.Selection.CurrentRegion.Rows.AutoFit

Et pourquoi ne pas aussi insérer le titre des colonnes ? Pendant que j'y suis, voici mon exemple en entier :

'Extract data to excel file
Private Sub B_export2excel_Click()
 
  Dim SQL_ligne As String, s As String
  'Dim bds As Database, rst As Recordset
 
  ' Retrieve data from table
  SQL_ligne = "SELECT id, date1, text1" & _
              " FROM T_test;"
  Set bds = CurrentDb
  Set rst = bds.OpenRecordset(SQL_ligne)
   
  ' Create an instance of Excel and add a workbook
  Set xlApp = CreateObject("Excel.Application" )
  Set xlWb = xlApp.Workbooks.Add
  Set xlWs = xlWb.Worksheets(1)
 
  ' Display Excel and give user control of Excel's lifetime
  xlApp.Visible = True
  xlApp.UserControl = True
 
  ' Copy field names to the first row of the worksheet
  fldCount = rst.Fields.Count
  For iCol = 1 To fldCount
     xlWs.Cells(1, iCol).Value = rst.Fields(iCol - 1).Name
  Next
 
  ' Copy entire recordset to excel starting from A2
  xlWs.Cells(2, 1).CopyFromRecordset rst
 
  ' Change the format
  LineCount = rst.RecordCount
  For iLine = 1 To LineCount
'     xlWs.Cells(iLine + 1, 2).NumberFormat = "yyyymmdd"
     xlWs.Cells(iLine + 1, 2).NumberFormat = "dd/mm/yyyy"
  Next
   
  ' Auto-fit the column widths and row heights
  xlApp.Selection.CurrentRegion.Columns.AutoFit
  xlApp.Selection.CurrentRegion.Rows.AutoFit
 
  ' Save an Excel file from MS Access using VBA
  xlApp.Application.ActiveWorkbook.SaveAs FileName:="c:\DEV\XL_test.xls"
       
  'Close the recordset
  rst.Close
   
  ' Quit Excel
  xlApp.Quit
 
End Sub

:)

Reply

Marsh Posté le 20-09-2005 à 11:33:37    

Ah ouaip...
Je pense qu'un truc comme ça doit pouvoir fonctionner...
 
A un détail près  :pt1cable:  
 
Je récupère -1 dans rst.RecordCount !
J'avais déjà eu ce problème !
 
T'as une idée pour récupérer mon recordcount ?
 
Laurent (vais finir par y arriver !)
 

Reply

Marsh Posté le 20-09-2005 à 11:51:53    

C'est bon...
J'ai réussi.
 
Merci !
 

Reply

Marsh Posté le 20-09-2005 à 23:17:21    

1- Il est toujours sympa de dire comment on a résolu un problème.
 
2- Il est encore plus sympa de mettre [Résolu] dans le titre.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 02-06-2006 à 09:18:02    

Colle nous ton code ici stp :) comme ca les personnes ayant le meme probleme pourront a leur tour résoudre ce meme probleme :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed