OVH Cloud OVH Cloud

Importer grand fichier texte

7 réponses
Avatar
Martin
Bonjour,

J'ai un fichier texte a importer dans excel qui contient plus que 65536
données.
Je dois donc le faire importer sur plus d'une feuille.
J'ai trouvé un code qui le fait mais une partie de ce code ne fonctionne pas

Worksheets("Feuil" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))

Je crois comprendre la propriété offset ne peut pas etre applique a l'objet
worksheets, ce qui est normal, mais je ne trouve pas la syntaxe pour le
faire.
Voici le code complet:

Public Sub LoadFile()
Dim strLine As String
Dim I As Long
Dim J As Long
Dim iLen As Integer
Dim iSh As Integer
Dim lL As Long
Dim sDelim As String
Dim MaxSize As Long

sDelim = Chr(9)
MaxSize = 65000
I = 0
Open "C:\MyDir\MyFile.txt" For Input As #5
Do While Not EOF(5)
iSh = (I / MaxSize) + 1
lL = I Mod MaxSize
Line Input #5, strLine
If Right(strLine, 1) <> sDelim Then
strLine = Trim(strLine) & sDelim
End If
J = 0
Do While Len(strLine) > 1
iLen = InStr(strLine, sDelim)
Worksheets("Sheet" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))
strLine = Trim(Right(strLine, Len(strLine) - iLen))
J = J + 1
Loop
I = I + 1
Loop
Close #5
End Sub
Merci beaucoup de votre aide à l'avance
Martin

7 réponses

Avatar
Papy Bernard
Slt,

De "Martin"
J'ai un fichier texte a importer dans excel qui contient plus que 65536
données.
Je dois donc le faire importer sur plus d'une feuille.
J'ai trouvé un code qui le fait mais une partie de ce code ne fonctionne
pas


Worksheets("Feuil" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))
...................

Close #5
End Sub



Plutôt que de pisser de la ligne, tu aurais plus court chemin de te mettre à
un SDBD.

--
A+
Papy Bernard (RTCien malgré lui)

Avatar
Ricky
Bonjour *Papy Bernard*
| Plutôt que de pisser de la ligne,

Qui dit que telle est son intention ?


| tu aurais plus court chemin de te
| mettre à un SDBD.

Il pourrait aussi l'importer dans un traitement de texte, mais ce n'est pas le sens de la question (dont je ne connais pas la réponse).

--
Ricky
Avatar
anonymousA
bonjour,

je ne connais pas le code, mais je confimre que la propriété offset ne
s'applique qu'à l'objet range donc rencontre une erreur d'appli avec
l'objet worksheet.
Es-tu sur d'avoir bien copié le code ?

un exemple ci-dessous d'importation de fichier texte dont le nbre de
lignes est supérieur à 65536.

Sub ImportLargeFile()

'Imports text file into Excel workbook using ADO.
'If the number of records exceeds 65536 then it splits it over more than
one sheet.

Dim strFilePath As String, strFilename As String, strFullPath As String
Dim lngCounter As Long
Dim oConn As Object, oRS As Object, oFSObj As Object


'Get a text file name
strFullPath = Application.GetOpenFilename("Text Files (*.txt),*.txt", ,
"Please select text file...")

If strFullPath = "False" Then Exit Sub 'User pressed Cancel on the open
file dialog
Application.ScreenUpdating = False


'This gives us a full path name e.g. C:folderfile.txt
'We need to split this into path and file name
Set oFSObj = CreateObject("SCRIPTING.FILESYSTEMOBJECT")

strFilePath = oFSObj.GetFile(strFullPath).ParentFolder.Path
strFilename = oFSObj.GetFile(strFullPath).Name


'Open an ADO connection to the folder specified
Set oConn = CreateObject("ADODB.CONNECTION")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" &
strFilePath & ";" & "Extended Properties=""text;HDR=Yes;FMTÞlimited"""

Set oRS = CreateObject("ADODB.RECORDSET")

'Now actually open the text file and import into Excel
oRS.Open "SELECT * FROM " & strFilename, oConn, 3, 1, 1

While Not oRS.EOF

Sheets.Add
ActiveSheet.Range("A1").CopyFromRecordset oRS, 65536

Wend

oRS.Close
oConn.Close

Application.ScreenUpdating = True


End Sub

A+


Bonjour,

J'ai un fichier texte a importer dans excel qui contient plus que 65536
données.
Je dois donc le faire importer sur plus d'une feuille.
J'ai trouvé un code qui le fait mais une partie de ce code ne fonctionne pas

Worksheets("Feuil" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))

Je crois comprendre la propriété offset ne peut pas etre applique a l'objet
worksheets, ce qui est normal, mais je ne trouve pas la syntaxe pour le
faire.
Voici le code complet:

Public Sub LoadFile()
Dim strLine As String
Dim I As Long
Dim J As Long
Dim iLen As Integer
Dim iSh As Integer
Dim lL As Long
Dim sDelim As String
Dim MaxSize As Long

sDelim = Chr(9)
MaxSize = 65000
I = 0
Open "C:MyDirMyFile.txt" For Input As #5
Do While Not EOF(5)
iSh = (I / MaxSize) + 1
lL = I Mod MaxSize
Line Input #5, strLine
If Right(strLine, 1) <> sDelim Then
strLine = Trim(strLine) & sDelim
End If
J = 0
Do While Len(strLine) > 1
iLen = InStr(strLine, sDelim)
Worksheets("Sheet" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))
strLine = Trim(Right(strLine, Len(strLine) - iLen))
J = J + 1
Loop
I = I + 1
Loop
Close #5
End Sub
Merci beaucoup de votre aide à l'avance
Martin




Avatar
anonymousA
Quelle tirade grandiose et qui fait beaucoup avancer le sujet.Pourquoi
s'obstiner à venir sur ce forum pour pisser de la ligne en permanence
sur le fait d'utiliser un logiciel de BDD plutot qu'Excel.

Par ailleurs, SDBB ou SGBD ?

Slt,

De "Martin"

J'ai un fichier texte a importer dans excel qui contient plus que 65536
données.
Je dois donc le faire importer sur plus d'une feuille.
J'ai trouvé un code qui le fait mais une partie de ce code ne fonctionne


pas

Worksheets("Feuil" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))


...................

Close #5
End Sub




Plutôt que de pisser de la ligne, tu aurais plus court chemin de te mettre à
un SDBD.

--
A+
Papy Bernard (RTCien malgré lui)





Avatar
Martin
Merci pour ta reponse, je vais tester

et oui j'avais bien copier le code!

Martin
"anonymousA" a écrit dans le message de news:
42deaf6b$0$22308$
bonjour,

je ne connais pas le code, mais je confimre que la propriété offset ne
s'applique qu'à l'objet range donc rencontre une erreur d'appli avec
l'objet worksheet.
Es-tu sur d'avoir bien copié le code ?

un exemple ci-dessous d'importation de fichier texte dont le nbre de
lignes est supérieur à 65536.

Sub ImportLargeFile()

'Imports text file into Excel workbook using ADO.
'If the number of records exceeds 65536 then it splits it over more than
one sheet.

Dim strFilePath As String, strFilename As String, strFullPath As String
Dim lngCounter As Long
Dim oConn As Object, oRS As Object, oFSObj As Object


'Get a text file name
strFullPath = Application.GetOpenFilename("Text Files (*.txt),*.txt", ,
"Please select text file...")

If strFullPath = "False" Then Exit Sub 'User pressed Cancel on the open
file dialog
Application.ScreenUpdating = False


'This gives us a full path name e.g. C:folderfile.txt
'We need to split this into path and file name
Set oFSObj = CreateObject("SCRIPTING.FILESYSTEMOBJECT")

strFilePath = oFSObj.GetFile(strFullPath).ParentFolder.Path
strFilename = oFSObj.GetFile(strFullPath).Name


'Open an ADO connection to the folder specified
Set oConn = CreateObject("ADODB.CONNECTION")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" &
strFilePath & ";" & "Extended Properties=""text;HDR=Yes;FMTÞlimited"""

Set oRS = CreateObject("ADODB.RECORDSET")

'Now actually open the text file and import into Excel
oRS.Open "SELECT * FROM " & strFilename, oConn, 3, 1, 1

While Not oRS.EOF

Sheets.Add
ActiveSheet.Range("A1").CopyFromRecordset oRS, 65536

Wend

oRS.Close
oConn.Close

Application.ScreenUpdating = True


End Sub

A+


Bonjour,

J'ai un fichier texte a importer dans excel qui contient plus que 65536
données.
Je dois donc le faire importer sur plus d'une feuille.
J'ai trouvé un code qui le fait mais une partie de ce code ne fonctionne
pas



Worksheets("Feuil" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))

Je crois comprendre la propriété offset ne peut pas etre applique a
l'objet


worksheets, ce qui est normal, mais je ne trouve pas la syntaxe pour le
faire.
Voici le code complet:

Public Sub LoadFile()
Dim strLine As String
Dim I As Long
Dim J As Long
Dim iLen As Integer
Dim iSh As Integer
Dim lL As Long
Dim sDelim As String
Dim MaxSize As Long

sDelim = Chr(9)
MaxSize = 65000
I = 0
Open "C:MyDirMyFile.txt" For Input As #5
Do While Not EOF(5)
iSh = (I / MaxSize) + 1
lL = I Mod MaxSize
Line Input #5, strLine
If Right(strLine, 1) <> sDelim Then
strLine = Trim(strLine) & sDelim
End If
J = 0
Do While Len(strLine) > 1
iLen = InStr(strLine, sDelim)
Worksheets("Sheet" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))
strLine = Trim(Right(strLine, Len(strLine) - iLen))
J = J + 1
Loop
I = I + 1
Loop
Close #5
End Sub
Merci beaucoup de votre aide à l'avance
Martin






Avatar
ClémentMarcotte
Bonjour,

Tu peux regarder les 2 ou 3 macros toutes faites chez Frédéric Sigonneau:

http://frederic.sigonneau.free.fr/

ou pour aller direct sur la p(l)age:

http://frederic.sigonneau.free.fr/Formats.htm



"Martin" a écrit dans le message de
news:%
Bonjour,

J'ai un fichier texte a importer dans excel qui contient plus que 65536
données.
Je dois donc le faire importer sur plus d'une feuille.
J'ai trouvé un code qui le fait mais une partie de ce code ne fonctionne
pas


Worksheets("Feuil" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))

Je crois comprendre la propriété offset ne peut pas etre applique a
l'objet

worksheets, ce qui est normal, mais je ne trouve pas la syntaxe pour le
faire.
Voici le code complet:

Public Sub LoadFile()
Dim strLine As String
Dim I As Long
Dim J As Long
Dim iLen As Integer
Dim iSh As Integer
Dim lL As Long
Dim sDelim As String
Dim MaxSize As Long

sDelim = Chr(9)
MaxSize = 65000
I = 0
Open "C:MyDirMyFile.txt" For Input As #5
Do While Not EOF(5)
iSh = (I / MaxSize) + 1
lL = I Mod MaxSize
Line Input #5, strLine
If Right(strLine, 1) <> sDelim Then
strLine = Trim(strLine) & sDelim
End If
J = 0
Do While Len(strLine) > 1
iLen = InStr(strLine, sDelim)
Worksheets("Sheet" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))
strLine = Trim(Right(strLine, Len(strLine) - iLen))
J = J + 1
Loop
I = I + 1
Loop
Close #5
End Sub
Merci beaucoup de votre aide à l'avance
Martin




Avatar
MPi
Salut Martin,

Et si tu ajoutais Range("A1") avant le Offset()
Worksheets("Feuil" & iSh).Range("A1").Offset(lL, J).Value = ...

Est-ce que ça fonctionne mieux ?

Michel


Bonjour,

J'ai un fichier texte a importer dans excel qui contient plus que 65536
données.
Je dois donc le faire importer sur plus d'une feuille.
J'ai trouvé un code qui le fait mais une partie de ce code ne fonctionne pas

Worksheets("Feuil" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))

Je crois comprendre la propriété offset ne peut pas etre applique a l'objet
worksheets, ce qui est normal, mais je ne trouve pas la syntaxe pour le
faire.
Voici le code complet:

Public Sub LoadFile()
Dim strLine As String
Dim I As Long
Dim J As Long
Dim iLen As Integer
Dim iSh As Integer
Dim lL As Long
Dim sDelim As String
Dim MaxSize As Long

sDelim = Chr(9)
MaxSize = 65000
I = 0
Open "C:MyDirMyFile.txt" For Input As #5
Do While Not EOF(5)
iSh = (I / MaxSize) + 1
lL = I Mod MaxSize
Line Input #5, strLine
If Right(strLine, 1) <> sDelim Then
strLine = Trim(strLine) & sDelim
End If
J = 0
Do While Len(strLine) > 1
iLen = InStr(strLine, sDelim)
Worksheets("Sheet" & iSh).Offset(lL, J).Value = _
Trim(Left(strLine, iLen - 1))
strLine = Trim(Right(strLine, Len(strLine) - iLen))
J = J + 1
Loop
I = I + 1
Loop
Close #5
End Sub
Merci beaucoup de votre aide à l'avance
Martin