[Macro] Importation un fichier CSV - Mémoire insuffisante

jiritsu

XLDnaute Nouveau
Bonjour,

Je fais actuellement une Macro pour importer un fichier CSV dans une feuille Excel. Mais mon code fonctionne uniquement avec des petits fichiers. J'ai une erreur : Mémoire insuffisante.

Code:
Private Sub Cmd_Click()
Dim ProductLine As String
Dim Tab1
Dim i, x As Integer
x = 0
Range("a4:n65536").Clear
Range("A4").Activate
ProductFile = Application.GetOpenFilename("csv files (*.csv), *.csv")
On Error Resume Next
Open (ProductFile) For Input As #1
       Do
        Line Input #1, ProductLine
        Tab1 = Split(ProductLine, ";")
        For i = 0 To UBound(Tab1)
            ActiveCell.Offset(x, i) = Tab1(i)
        Next i
        x = x + 1
    Loop While Not EOF(1)
    Close #1
End Sub

Il y a t-il un moyen d'optimiser ce code afin de faire disparaitre ce problème de mémoire ?

Merci de votre aide
 

Catrice

XLDnaute Barbatruc
Re : [Macro] Importation un fichier CSV - Mémoire insuffisante

Bonjour,

Ca plante pour des fichiers qui ont combien de lignes ?

Pourquoi ne pas ouvrir directement le fichier avec Excel qui reconnait le format CSV ?

Ci-joint une petite modif :

Sub Test()
Dim ProductLine As String
Dim Tab1
Dim i, x As Integer
x = 0
Range("a4:n65536").Clear
ProductFile = Application.GetOpenFilename("csv files (*.csv), *.csv")
If ProductFile = False Then Exit Sub
Open (ProductFile) For Input As #1
Do
Line Input #1, ProductLine
Tab1 = Split(ProductLine, ";")
Cells(4 + x, 1).Resize(1, UBound(Tab1) + 1) = Tab1
x = x + 1
Loop While Not EOF(1)
Close #1
End Sub

Je reproduis le pb à ~ 32764 lignes dans les 2 cas.
Ton code est 2 fois plus rapide que le mien...
 
Dernière édition:

jiritsu

XLDnaute Nouveau
Re : [Macro] Importation un fichier CSV - Mémoire insuffisante

Merci pour ta réponse.

Je fais cette macro pour simplifier l'importation des données du fichier csv. Malheureusement, certaines personnes ne sont pas capables de passer par le menu Données. :/

Alors, j'ai le même problème avec ton code. Ce n'est pas sur le nombre de ligne mais sur la taille du texte pour une cellule. Si la valeur est trop grande pour la cellule de la feuille Excel, cela plante.

Connais-tu un code pour esquiver les valeurs trop grandes ?

Une autre question, si j'ai un fichier csv avec des doubles tabulations comme séparateur, comment je peux l'indiquer dans mon code ?
J'ai essayé ceci : Split(ProductLine, " ") mais je ne suis pas convaincu...

Merci de ton aide.
 

Catrice

XLDnaute Barbatruc
Re : [Macro] Importation un fichier CSV - Mémoire insuffisante

Re,

Peux tu etre plus precis sur la taille du texte ?
Donner un exemple ?

Voici un autre code pour faire ce que tu veux (qui pour moi ne plante pas à 32000 lignes) et dans lequel j'ai mis un eemple pour les doubles Tab

Sub Test2()
ThisWorkbook.Sheets(1).Cells.ClearContents
ProductFile = Application.GetOpenFilename("csv files (*.csv), *.csv")
If ProductFile = False Then Exit Sub
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(ProductFile)
Set ts = f.OpenAsTextStream(1, -2)
Do While ts.AtEndOfStream <> True
Tab1 = Split(ts.readline, Chr(9) & Chr(9))
For i = 0 To UBound(Tab1)
Range("A4").Offset(x, i) = Tab1(i)
Next i
x = x + 1
Loop
ts.Close
End Sub

On peut afficher jusqu"à 32 767 caracteres dans une cellule.
J'arrive à en ouvrir qui contiennent 32 767 caracteres, avec ton code aussi d'ailleurs ...
 
Dernière édition:

jiritsu

XLDnaute Nouveau
Re : [Macro] Importation un fichier CSV - Mémoire insuffisante

Merci pour ton code ci-dessus.

Pour information, voici un exemple en pièce jointe que j'ai utilisé avec ton 1er code.

Merci pour ton aide, le dernier code que tu m'as fourni correspond parfaitement à mes besoins.

Bonne journée.
 

Pièces jointes

  • product.zip
    284 bytes · Affichages: 59

Discussions similaires

Statistiques des forums

Discussions
311 708
Messages
2 081 750
Membres
101 812
dernier inscrit
trufu