export txt

I

imanuelga

Guest
Bonjour à tous et toutes, trés excellent membres du forum,

J'avais déjà remarqué qu'excel n'aimait pas les points, les virgules, les points virgules. Et j'ai un nouveau cas.

J'aimerais convertir un fichier excel en fichier txt avec des séparateurs point virgule.

Aujourd'hui, la procédure manuelle consiste à enregistrer le fichier en .csv
puis à renommer en point txt.

C'est assez simple et rapide.

Or, lorsque j'utilise l'enregistreur de macro j'ai des surprises :
- en enregistrant la création en csv, celui ci à une forme correcte mais en lançant la macro, le séparateur devient virgule et non point-virgule !...
d'autre part, l'enregistreur refuse de saisir code pour le changement de nom en txt. ( pas sympa :) )

J'ai créé un code pour récupérer mes données sur une seule colonne séparées par le ";" puis qui enregistre en txt et cela marche pas mal mais c'est assez long surtout pour de gros fichier.

Y a t'il moyen de faire plus simple et plus court.

Je remercie d'avance pour votre aide.

Bien cordialement,
Imanuelga
 
@

@+Thierry

Guest
Bonjour Imanuelga, le Forum

Cette histoire me dit quelque chose, j'ai déjà traité le même problème... Je ne sais plus dans quel fil, mais CSV avec mon pseudo devrait te retourner des infos...

Sinon tu as cette démo : Lien supprimé

Je dois filer déjeuner maintenant

Bon Appétit
@+Thierry
 
I

imanuelga

Guest
Bonjour Thierry,

Je savais que tu avais répondu hiers sur une question similaire concernant les export pour SAP et, peut-être, as-tu été surpris de trouver un poste pratiquement au même titre ? En fait, mon post aurait du s'intitulé ainsi : "export txt avec séparateur ";" ".

Ce qui me gène dans ces procédures d'exportation ( nous avons pratiquement, je pense la même facon de procéder ), c'est quelle soit plus longue à exécuter qu'à traiter en manuelle ( c'est à dire en passant en csv manuellement puis en renommant en txt).

Pour 10000 lignes sur 4 colonnes ta procédure dure 133s sur mon PC contre 139 pour la mienne qui convertit au choix en CSV ou txt mais avec un unique séparateur ";".

Quel intéret de bloquer le pc pendant 2 mn alors que la conversion manuelle dure au maximum 15 s ?
Mais peut-être que je coupe trop les cheveux en 4 !!


Dans tous les cas, je te remercie pour ces exemple d'utilisation d'userform. Personnellement, je n'en ai encore jamais fait et je compte bien m'en imprégner.

Cordialement
Manuel
 
@

@+Thierry

Guest
Re: Export TXT avec ";" en séparateur, méthode par Array (Super Fast)

Re Bonsoir Manuel

Je ne parlais pas du Fil de Discussion d'Hier pour SAP, je pensais à celui-ci :

=> Lien supprimé

Bien que le sujet ne soit pas rééllement correspondant à ta demande, une partie du code que j'ai fourni dans mon post du 24-07-04 14:53 répond à ta demande "d'autre part, l'enregistreur refuse de saisir code pour le changement de nom en txt. ( pas sympa :) )

Je pense que tu y trouveras un élément de réponse.

Pour la longueur du traitement, tout dépend de la machine...

Cependant comme pour la chanson de Noir Désir "Un Homme Pressé" on pourrait accélérer considérablement en faisant comme ceci (hi hi hi hi)

Sub SuperFaaaaaaaastBuildTXT()
Dim Plage As Variant
Dim TheText As String, ThePath As String
Dim TheFile As Variant
Dim L As Integer
Dim C As Byte, X As Byte
Dim TheTime As Double


ThePath = ThisWorkbook.Path & "\ReportDataTXT"
TheFile = Application.GetSaveAsFilename(ThePath, "Fichier,*.txt")
If TheFile = False Then Exit Sub

TheTime = Timer

Plage = TXT.Range("A2:D" & TXT.Range("A65536").End(xlUp).Row)
Open TheFile For Output As #1

    For L = 1 To UBound(Plage)
       TheText = ""
          For C = 1 To 4
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If C < 4 Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TheText = TheText & CStr(Plage(L, C)) & Chr(59)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TheText = TheText & CStr(Plage(L, C))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next C

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print #1, TheText
&nbsp;&nbsp;&nbsp;&nbsp;Next

Close #1

MsgBox "DUREE EN SECONDE : " & Timer - TheTime

End Sub

Sur un PIV de moins de 2GHZ / 256 RAM, je viens de faire tourner sur 4 colonnes et 10000 lignes aux environs de 1/4 ou 1/3 de seconde....

Comme ça je pense que tu seras content car tu auras le temps d'occuper ton ordinateur à d'autres occupations

Bonne Soirée
@+Thierry
 
I

imanuelga

Guest
Bonjour Thierry,

Bon dans un premier temp : MERCI.

Dés que j'aurai lu tout cela, je te ferai part de mes commentaires :)

Cependant, j'avais bien cherché ton post sur le csv mais n'ayant pas coché l'option "corps des messages" (à cause peut-être de la remarque (plus lent) ! lol ), je n'avais rien trouvé.

A+
Manuel
 
I

imanuelga

Guest
Bonsoir Thierry,

bon, aprés vérif, je peux confirmer que je ne bloquerai pas mon PC avec cette macro. ;-)
Même avec des test à 40000 lignes, la conversion se fait en moins de 1 s!

Cette macro m'a permi de voir plein d'object que je manipule pas d'habitude :

1-open Fichier for output as #1 :
si je comprend bien ouvre se fichier en le vidant et le nomme 1 dans une zone entrée/sortie ( pas trés claire :))

2-GetSaveAsFilename(chemin)
c'est bien plus pratique qu'une inputbox pour récupérer le chemin

Pour ce qui est du message sur le forum,
je ne comprends pas trop ce qui se passe avec ces 3 instructions :

Set FS = CreateObject("Scripting.FileSystemObject")
Set F = FS.GetFile(FilePath & FileName & CSV)
F.Copy FilePath & FileName & TXT

Le fichier FilePath & FileName & TXT est-il crée lors de la copie ?

Amicalement,
Manuel
 
@

@+Thierry

Guest
Re: Export TXT avec ";" en séparateur, méthode par Array (Super Fast)

Bonsoir Manuel, Le Forum

Pour ta première question, il faut lire VBA, qui dit ceci (sorry suis en version US)
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]

(Chercher l'aide sur "Open")

Pour ta dernière question, la réponse est dans l'intégralité du code (MsgBox en Bold)

Const FileName As String = "My_CSV_File"
Const FilePath As String = "C:\Mes documents\"
Const TXT As String = ".txt"
Const CSV As String = ".csv"

Sub TestAndOpenAsTxt() '@+Thierry July 2004
Dim Q As Byte
Dim FS As Object, F As Object
&nbsp;&nbsp;&nbsp;If Ouvert(FileName & TXT) = True Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox "Le fichier " & FileName & TXT & " est bien ouvert, vous pouvez travailler dessus"
&nbsp;&nbsp;&nbsp;ElseIf Existe(FilePath & FileName & TXT) = True Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q = MsgBox("Le Fichier " & FileName & TXT & " n'est pas ouvert, voulez vous l'ouvrir ?", vbQuestion + vbYesNo)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Q = vbYes Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Workbooks.Open FilePath & FileName & TXT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;ElseIf Existe(FilePath & FileName & CSV) = True Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q = MsgBox("Le Fichier " & FileName & TXT & " n'existe pas, voulez vous ouvrir une copie en .txt ?", vbQuestion + vbYesNo)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If Q = vbYes Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set FS = CreateObject("Scripting.FileSystemObject")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set F = FS.GetFile(FilePath & FileName & CSV)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F.Copy FilePath & FileName & TXT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Workbooks.Open FilePath & FileName & TXT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;Else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox "Le fichier " & FileName & " n'existe pas ni en CSV ni en TXT !", vbCritical
&nbsp;&nbsp;&nbsp;End If
End Sub


Function Ouvert(ByVal NomFichier As String) As Boolean 'de Ti
Dim Wbk As Workbook
On Error GoTo fin
Set Wbk = Workbooks(NomFichier)
Ouvert = True
fin:
End Function

Function Existe(ByVal NomCheminFichier As String) As Boolean
Dim Wbk As Workbook
On Error GoTo fin
Open NomCheminFichier For Input As #1
Existe = True
Close #1
fin:
End Function


Bonne Soirée
@+Thierry
 
I

imanuelga

Guest
Bonjour Thierry,

D'abord, merci beaucoup pour ta patience et ton aide.

Au risque de passer pour un débil, ce que je ne comprends pas ce n'est pas le "quoi" mais le "comment".

Un des grands plaisir de l'informatique pour moi, c'est de comprendre ce que je fais dans une proportion raisonnable.
Voici ce que je comprends avec ces 3 lignes de code.

Set FS = CreateObject("Scripting.FileSystemObject")
FS recoit un object FileSystemObject ("Scripting.FileSystemObject") -> que je ne connais pas, je n'ai rien trouvé dans l'aide : qu'est-ce que c'est ?

Set F = FS.GetFile(FilePath & FileName & CSV)
F recoit le fichier FilePath & FileName & CSV (pas d'aide sur GetFile)

F.Copy FilePath & FileName & TXT
ok

Mais quoi qu'il en soit je te remercie encore pour ton aide et ta bonne humeur,

Amicalement,
Manuel
 
@

@+Thierry

Guest
Bonjour Manuel, le Forum

Oui tu ne trouveras pas grand chose dans l'aide VBA sur FileSystemObject étant donné que c'est plus lié au VBscript.

J'avais vu une documentation quelque part sur le Net... Mais là, aujourd'hui, je ne l'ai pas sous la main.

Regarde sur MSDN à "Scripting" peut-être tu trouveras ton bonheur.

Bon Noël à Tous et Toutes
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 496
Messages
2 088 983
Membres
103 997
dernier inscrit
SET2A