Transfert données Excel vers fichier texte

Le
Pat
Bonjour,
J'ai crée une petite appli. afin de récupérer des données d'un fichier Excel
d'environ 800 enreg. de 5 champs et les écrire dans un fichier texte.
Malgré un PC Pentium 4 dual core 1GO de mémoire je suis surpris de la
lenteur du process , 5 Minutes. Sous Excel l'ouverture est immédiate.
Je fais des essais sous VB2005 depuis quelques semaines merci de m'indiquer
sur la copie du code ci dessous si je suis à coté de la plaque ??? ?
Merci de mindiquer comment améliorer
Salutations.

' Déclaration
Dim ExcelApp As Object

Dim Excelcla As Object

Dim ExcelFeuille As Object

Dim ExcelPlage As Object

' CdeBouton_Click

Dim VarX As String

Dim VarLine As String

Dim i As Integer = 2

FileOpen(1, "c:MonFichier.txt", OpenMode.Output)

ExcelApp = CreateObject("Excel.Application")

Excelcla = ExcelApp.WorkBooks.open("c:MonFichier.xls")

Try

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

Do While VarX <> ""

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

If VarX = "" Then

Exit Do

End If

VarLine = ""

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

VarLine = VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 2).value)

VarLine = VarLine & VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 4).value)

VarLine = VarLine & VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 5).value)

VarLine = VarLine & VarX

Mémo.Text = Mémo.Text + VarLine & Chr(13) & Chr(10)

i = i + 1

Loop

Print(1, Mémo.Text)

FileClose(1)

Catch ex As Exception

MsgBox("Erreur Boucle")

End Try

ExcelApp.Quit()
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles TOURREAU
Le #12243971
Le Tue, 21 Aug 2007 22:47:46 +0200, Pat écrit:

Bonjour,
J'ai crée une petite appli. afin de récupérer des données d'un fichier
Excel
d'environ 800 enreg. de 5 champs et les écrire dans un fichier texte.
Malgré un PC Pentium 4 dual core 1GO de mémoire je suis surpris de la
lenteur du process , 5 Minutes. Sous Excel l'ouverture est immédiate.
Je fais des essais sous VB2005 depuis quelques semaines merci de
m'indiquer
sur la copie du code ci dessous si je suis à coté de la plaque ??? ?
Merci de mindiquer comment améliorer
Salutations.

' Déclaration
Dim ExcelApp As Object

Dim Excelcla As Object

Dim ExcelFeuille As Object

Dim ExcelPlage As Object

' CdeBouton_Click

Dim VarX As String

Dim VarLine As String

Dim i As Integer = 2

FileOpen(1, "c:MonFichier.txt", OpenMode.Output)

ExcelApp = CreateObject("Excel.Application")

Excelcla = ExcelApp.WorkBooks.open("c:MonFichier.xls")

Try

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

Do While VarX <> ""

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

If VarX = "" Then

Exit Do

End If

VarLine = ""

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

VarLine = VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 2).value)

VarLine = VarLine & VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 4).value)

VarLine = VarLine & VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 5).value)

VarLine = VarLine & VarX

Mémo.Text = Mémo.Text + VarLine & Chr(13) & Chr(10)

i = i + 1

Loop

Print(1, Mémo.Text)

FileClose(1)

Catch ex As Exception

MsgBox("Erreur Boucle")

End Try

ExcelApp.Quit()





Dans votre cas passez plustôt par OleDB :
http://www.connectionstrings.com/?carrier=excel

Cela vous permettra d'executer des requêtes SQL et manipule le fichier
plus rapidement qu'un pilotage d'Excel...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Pat
Le #12243961
Bonjour,
Merci de la réponse, je vais étudier cette possibilité.
S'il existe un site équivalent en Français, je suis preneur.
Cordialement;

"Gilles TOURREAU"
Le Tue, 21 Aug 2007 22:47:46 +0200, Pat écrit:

Bonjour,
J'ai crée une petite appli. afin de récupérer des données d'un fichier
Excel
d'environ 800 enreg. de 5 champs et les écrire dans un fichier texte.
Malgré un PC Pentium 4 dual core 1GO de mémoire je suis surpris de la
lenteur du process , 5 Minutes. Sous Excel l'ouverture est immédiate.
Je fais des essais sous VB2005 depuis quelques semaines merci de
m'indiquer
sur la copie du code ci dessous si je suis à coté de la plaque ??? ?
Merci de mindiquer comment améliorer
Salutations.

' Déclaration
Dim ExcelApp As Object

Dim Excelcla As Object

Dim ExcelFeuille As Object

Dim ExcelPlage As Object

' CdeBouton_Click

Dim VarX As String

Dim VarLine As String

Dim i As Integer = 2

FileOpen(1, "c:MonFichier.txt", OpenMode.Output)

ExcelApp = CreateObject("Excel.Application")

Excelcla = ExcelApp.WorkBooks.open("c:MonFichier.xls")

Try

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

Do While VarX <> ""

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

If VarX = "" Then

Exit Do

End If

VarLine = ""

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

VarLine = VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 2).value)

VarLine = VarLine & VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 4).value)

VarLine = VarLine & VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 5).value)

VarLine = VarLine & VarX

Mémo.Text = Mémo.Text + VarLine & Chr(13) & Chr(10)

i = i + 1

Loop

Print(1, Mémo.Text)

FileClose(1)

Catch ex As Exception

MsgBox("Erreur Boucle")

End Try

ExcelApp.Quit()





Dans votre cas passez plustôt par OleDB :
http://www.connectionstrings.com/?carrier=excel

Cela vous permettra d'executer des requêtes SQL et manipule le fichier
plus rapidement qu'un pilotage d'Excel...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr


Patrick BREIL
Le #12190661
Bonjour,

J'ai rencontré le même problème.
Il existe une solution,

Il faut conserver la partie de code pour ouvrir le fichier XLS
Il faut ensuite sauver chaque onglet (si il y en plusieurs) au format CSV
(pour la syntaxe effecutuer la manip sous Excel en enregistrant la macro)

le fichier CSV peut être lu en une seule de façon trés rapide en utilisant
Dim FichierCSV() as string = file.ReadAllLines(NomduFichier CSV)
Une boucle for Each permet de redécomposer les chaines

For each ligne as string in FichierCSV
Dim DecompLigne() as string = split(ligne, ";")
' les valeurs sont alors contenus dans le tableau DecompLigne(xx) ou xx
indique le nombre d'élément (à partir de 0)
Next

Pour info, en utilisant la lecture des cellules depuis Excel mon appli
tournait pendant 1h30 en CSV moins de 2 minutes


" Pat" news:uRV$
Bonjour,
J'ai crée une petite appli. afin de récupérer des données d'un fichier


Excel
d'environ 800 enreg. de 5 champs et les écrire dans un fichier texte.
Malgré un PC Pentium 4 dual core 1GO de mémoire je suis surpris de la
lenteur du process , 5 Minutes. Sous Excel l'ouverture est immédiate.
Je fais des essais sous VB2005 depuis quelques semaines merci de


m'indiquer
sur la copie du code ci dessous si je suis à coté de la plaque ??? ?
Merci de mindiquer comment améliorer
Salutations.

' Déclaration
Dim ExcelApp As Object

Dim Excelcla As Object

Dim ExcelFeuille As Object

Dim ExcelPlage As Object

' CdeBouton_Click

Dim VarX As String

Dim VarLine As String

Dim i As Integer = 2

FileOpen(1, "c:MonFichier.txt", OpenMode.Output)

ExcelApp = CreateObject("Excel.Application")

Excelcla = ExcelApp.WorkBooks.open("c:MonFichier.xls")

Try

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

Do While VarX <> ""

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

If VarX = "" Then

Exit Do

End If

VarLine = ""

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 1).value)

VarLine = VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 2).value)

VarLine = VarLine & VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 4).value)

VarLine = VarLine & VarX & ","

VarX = (Excelcla.Worksheets("Feuil1").cells.Item(i, 5).value)

VarLine = VarLine & VarX

Mémo.Text = Mémo.Text + VarLine & Chr(13) & Chr(10)

i = i + 1

Loop

Print(1, Mémo.Text)

FileClose(1)

Catch ex As Exception

MsgBox("Erreur Boucle")

End Try

ExcelApp.Quit()




Publicité
Poster une réponse
Anonyme