Carte du site
 Remerciements
 Netiquette
 Bugs
 Tables
 Requêtes
 Formulaires
 États (rapports)
 Modules
 APIs
 Chaînes
 Date/Time
 Général
 Ressources
 Téléchargeables

 Termes d'usage

Modules: Exporter une feuille Excel en format de fichier CSV

Author(s)
Dev Ashish

--- Soumis par Dev Ashish ---

Exporter une feuille Excel en format de fichier CSV.

     Parfois, il est nécessaire d'utiliser Excel pour formater des données brutes provenant de bases de données de macro-ordinateur (mainframe).  Une fois le traitement de formatage appliqué, la table peut être importée en Access comme table native. Dans la plupart des cas, ces fichiers contiendront un grand nombre d'enregistrements et créer une table locale n'est pas toujours propice, tout spécialement si vous n'avez que des possibilités de lire les données.

    Excel peut être utilisé pour sauvegarder une feuille en un fichier CSV qui peut alors être attaché (lié) à Access de par le pilote (driver)  Text ISAM.  Cependant, Excel n'inclus pas toujours les guillemets autour des valeurs lorsque sauvegardé en en fichier CSV file (un nombre sera écrit sans les guillemets).  Il est alors requis de traverser les colonnes et les lignes de la feuille pour exporter les données en utilisant les fonctions VBA.

    Voici une fonction générique qui accepte une référence à une feuille Excel (que vous aurez pris soin d'ouvrir par Automation) ainsi que le chemin du fichier de destination CSV.  Vous pouvez appeler cette fonction, depuis votre code, comme suit:

  With objXL
    .Visible = True
    .Workbooks.OpenText FileName:=strFile, Origin:= _
        xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
        Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _
        Array(2, 2), Array(3, 2), Array(4, 2))
    
    Set objWkb = .Workbooks(1)
     
   Call fExportCommaDelimitedFile(objWkb.Worksheets(1), fFileDir(strFile) & _
            fFileName(Dir(strFile)) & ".csv")

 

'*********************** Code Start ***************************
Function fExportCommaDelimitedFile(objSht As excel.Worksheet, _
                              strDestinationFile As String) _
                                As Boolean
'*******************************************
'Nom:      fExportCommaDelimitedFile (Function)
'But: 	Écrire une feuille en format CSV
'Auteur:   	Dev Ashish
'Date:        March 10, 1999, 12:21:10 PM
'Called by: Any
'Calls:        sAppActivate
'Inputs:      objSht - Feuille Excel déjà ouverte, par automation
'                 strDestinationFile - Chemin de la destionation pour le fichier CSV
'Output:    True si tout est correct,  false autrement
'*******************************************
Dim intFileNum As Integer
Dim lngColCount As Long
Dim lngTotalColumns As Long
Dim lngTotalRows As Long
Dim lngRowCount As Long
Const conQ = """"
Const conERR_GENERIC = vbObjectError + 2100

  intFileNum = FreeFile()
  On Error GoTo ErrHandler
  
  'Active l'instance d'Access
  Call sAppActivate
  
  'Si le fichier cible existe, demander confirmation avant d'écraser
  If Len(Dir(strDestinationFile)) > 0 Then
    If MsgBox("The target file specified " & vbCrLf & vbCrLf _
        & strDestinationFile & vbCrLf & vbCrLf & " already exists." _
        & vbCrLf & vbCrLf & "Are you sure you want to overwrite it?", _
        vbQuestion + vbYesNo, "Please confirm") = vbYes Then
          Kill strDestinationFile
    Else
      Err.Raise conERR_GENERIC
    End If
  End If
   
  'Créer le fichier CSV
  Open strDestinationFile For Output As #intFileNum
         
  With objSht
    'Déterminer le nombre de colonnes
    lngTotalColumns = .UsedRange.Columns.Count
    'Déterminer le nombre de lignes
    lngTotalRows = .UsedRange.Rows.Count
    'Initialiser le thermomètre de progression
    Call SysCmd(acSysCmdInitMeter, "Writing CSV file...", lngTotalRows)
    
    'Traverser toutes les lignes
    For lngRowCount = 1 To lngTotalRows
      ' et chaque colonne
      For lngColCount = 1 To lngTotalColumns
        ' Écrire le texte de la cellule, avec guillements
        Print #intFileNum, conQ & RTrim$(.Cells(lngRowCount, lngColCount).Value) & conQ;
        ' Vérifier si c'est la dernière colonne
        If lngColCount = lngTotalColumns Then
          'la fin
          Print #intFileNum,
        Else
          ' autrement, ajouter une virgule
          Print #intFileNum, ",";
        End If
      Next lngColCount
      Call SysCmd(acSysCmdUpdateMeter, lngRowCount)
      'Ne pas mobiliser le CPU 
      DoEvents
    Next lngRowCount
  End With
  fExportCommaDelimitedFile = True
ExitHere:
  On Error Resume Next
  Call SysCmd(acSysCmdRemoveMeter)
  Close #intFileNum
  Exit Function
ErrHandler:
  fExportCommaDelimitedFile = False
  Resume ExitHere
End Function

Private Sub sAppActivate()
'Active l'intance d'Access
'
Dim strCaption As String
  On Error Resume Next
  strCaption = Application.CurrentDb.Properties("AppTitle")
  If Err Then strCaption = "Microsoft Access"
  AppActivate strCaption
End Sub
'*********************** Code End ***************************

© 1998-2001, Dev Ashish, All rights reserved. Optimized for Microsoft Internet Explorer