Export table access>65536 lignes vers Excel

Résolu
Bonjour,

J'ai une table access de plus de 65536 enregistrements que je voudrais exporter vers Excel. Comment faire pour exporter dans autant de fichiers Excel qu'il y a de fois 65536 lignes ? J'aimerais faire une macro.

Merci
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. Voilà...
    https://support.microsoft.com/en-us/help/120596

    Donc : Office 2007 ou

    Le code de la macro :

    Sub LargeFileImport()

    'Dimension Variables
    Dim ResultStr As String
    Dim FileName As String
    Dim FileNum As Integer
    Dim Counter As Double
    'Ask User for File's Name
    FileName = InputBox("Please enter the Text File's name, e.g. test.txt")
    'Check for no entry
    If FileName = "" Then End
    'Get Next Available File Handle Number
    FileNum = FreeFile()
    'Open Text File For Input
    Open FileName For Input As #FileNum
    'Turn Screen Updating Off
    Application.ScreenUpdating = False
    'Create A New WorkBook With One Worksheet In It
    Workbooks.Add template:=xlWorksheet
    'Set The Counter to 1
    Counter = 1
    'Loop Until the End Of File Is Reached
    Do While Seek(FileNum) <= LOF(FileNum)
    'Display Importing Row Number On Status Bar
    Application.StatusBar = "Importing Row " & _
    Counter & " of text file " & FileName
    'Store One Line Of Text From File To Variable
    Line Input #FileNum, ResultStr
    'Store Variable Data Into Active Cell
    If Left(ResultStr, 1) = "=" Then
    ActiveCell.Value = "'" & ResultStr
    Else
    ActiveCell.Value = ResultStr
    End If

    'For Excel versions before Excel 97, change 65536 to 16384
    If ActiveCell.Row = 65536 Then
    'If On The Last Row Then Add A New Sheet
    ActiveWorkbook.Sheets.Add
    Else
    'If Not The Last Row Then Go One Cell Down
    ActiveCell.Offset(1, 0).Select
    End If
    'Increment the Counter By 1
    Counter = Counter + 1
    'Start Again At Top Of 'Do While' Statement
    Loop
    'Close The Open Text File
    Close
    'Remove Message From Status Bar
    Application.StatusBar = False

    End Sub
    3
    1. J'ai fini par comprendre le code de microsoft!
      Merci beaucoup pour ton code: c'est du tonnerre et c'est propre. Je suis plus que satisfait car ça marche à merveille. Merci encore et merci aussi à eriiic.
      0
      1. Re,

        Essaie avec ça.
        Donc tu ouvres un classeur vide et tu lances la macro.
        J'ai fait sur 65000 lignes au lieu de 2^16 lignes

        Option Explicit
        Sub insertion()
            Dim i As Long, j As Long, r As Long
            Dim idxT As Integer
            Dim ligne As String
            Dim t
            i = 0
            j = 1
            r = 1
            
            Open "D:\fic.txt" For Input As #1
            Application.ScreenUpdating = False
            ActiveWorkbook.Sheets.Add.Move after:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Name = "feuille" & j
            Do While Not EOF(1)
                i = i + 1
                Line Input #1, ligne
                If i Mod 65000 = 0 Then
                    ActiveWorkbook.Save
                    r = 1
                    j = j + 1
                    ActiveWorkbook.Sheets.Add.Move after:=Sheets(Sheets.Count)
                    Sheets(Sheets.Count).Name = "feuille" & j
                End If
                t = Split(ligne, " ")
                Debug.Print j
                For idxT = 0 To UBound(t)
                    Sheets("feuille" & j).Cells(r, idxT + 1) = t(idxT)
                Next idxT
                r = r + 1
                
            Loop
            Application.ScreenUpdating = True
            Close #1
            MsgBox "Traitement terminé", vbInformation
                
        End Sub
        0
        1. Salut,

          Seulement, les données de chaque ligne sont toutes dans une colonne.

          C'est normal. La solution proposé sur le site de microsoft ne traite pas le séparateur.
          La variable ResultStr contiendra la ligne entière.
          Il faudra utiliser par exemple la fonction split en fonction de séparateur.
          0
          1. J'ai pu résoudre le problème de "Erreur de compilation. Projet ou bibliothèque introuvable." grâce à l'aide en ligne de microsoft. Maintenant, le code me donne un fichier Excel dans lequel se trouve toutes les données. Seulement, les données de chaque ligne sont toutes dans une colonne.
            Je joins le fichier xls (réduit, mais tu pourras voir ce que ça donne) et le fichier texte (réduit aussi).

            Le fichier http://www.cijoint.fr/cjlink.php?file=cj200912/cijgOxsJRA.xls
            Le fichier texte (allégé) est à l'adresse: http://www.cijoint.fr/cjlink.php?file=cj200912/cijYGBweQf.txt

            Merci.
            0
            1. Contributeur
              Impossible à telecharger.
              Allege ton fichier et utilise cijoint.fr
              0
              1. J'ai déposé mon fichier entier à l'adresse: http://dl.free.fr/getfile.pl?file=/Ngx9RJTO

                Tu écris: "avec la ligne de données ou l'erreur se produit". En fait, lorsque je lance l'exécution, j'ai le message "Erreur de compilation. Projet ou bibliothèque introuvable." Le curseur s'arrête sur la fonction "Left".

                Merci.
                0
                1. Contributeur
                  If Left(ResultStr, 1) = "="
                  regarde si la ligne commence par le caractère =, si oui ajoute le caractère ' devant pour qu'excel ne l'interprete pas comme une formule.
                  Il faudrait déposer un extrait de ton fichier (avec la ligne de données ou l'erreur se produit) sur cijoint.fr et coller le lien ici
                  0
                  1. Contributeur
                    Bonjour,

                    peut-être as-tu des lignes vides...
                    Essaie en remplaçant par :
                    if len(ResultStr)=0 then</gras>
                    elseIf Left(ResultStr, 1) = "=" Then
                    ActiveCell.Value = "'" & ResultStr
                    Else
                    ActiveCell.Value = ResultStr
                    End If

                    eric
                    0
                    1. Merci pour la réponse. J'ai essayé mais l'erreur se produit toujours au niveau de la fonction Left (du code que tu as bien voulu me proposer).
                      Par ailleurs, je n'ai aucune ligne vide normalement. Je me demande si ce n'est pas le type de séparation (dans le txt qui dérange). Des tabulations (espace) délimitent les champs. C'est-à-dire en important dans Excel (les fichiers plus petits) avec l'assistant, je choisis "Délimité" puis je coche Tabulation , Espace.
                      J'avoue que je ne comprends pas bien cette ligne du code: If Left(ResultStr, 1) = "=" Then.
                      Merci.
                      0
                  2. Merci Groggy. En fait j'avais essayé ce code mais une erreur se produit à la ligne
                    If Left( ResultStr, 1) = "=" Then
                    Et je ne sais pas ce que signifie cette ligne.
                    Merci encore.
                    0
                    1. Mec..... pourquoi t'irais pas t'allonger un peu et prendre le soleil plutot? C'est quoi ces histoires serieux? peace..... repose toi.
                      2