Exportation de données xls vers un fichier texte

cs_matheo54 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 novembre 2007 - 22 déc. 2004 à 15:14
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012 - 27 déc. 2004 à 12:00
Bonjour,

J'essaye de réaliser une macro qui me permettrais d'exporter les données du feuille excel (classeur2.xls) à partir d'une macro se trouvant dans une autre feuille excel (classeur1xls) vers un fichier txt (Export.txt).

Malheureusement, ca ne fonctionne pas car ca m'exporte les données se trouvant dans le classeur 1 (celui ou se trouve la macro) et ne va pas chercher ds le classeur2. Pourtant je l'ouvre bien. Je met mon code si quelqu'un veut bien y jetter un coup d'oeil... j'éspere avoir était assez clair sinon n'hésitaient pas a me le dire.

Merci

' Exportation dans un fichier texte (séparateur ;)
' ****************************************************

Dim MyFichierExcel As String
Dim F As Integer
Dim F1 As Integer
Dim S As String
Dim valeur As String
Dim Sep As String * 1
Dim i As Integer
Dim j As Integer
Dim MyValue As String
Dim tamp As String
Sep = ";"
F = FreeFile()
F1 = FreeFile()
F2 = FreeFile()
' Lit et sauvegarde dans S les données se trouvant ds le classeur 2
MyFichierExcel = Inputbox("Chemin d'accés au fichier Excel : ", accés_fichier_Excel, "C:\Documents and settings\mat\Bureau\Classeur2.xls", 100, 100)

Open MyFichierExcel For Output As #F
For i = 1 To 30
For j = 1 To 30

If Cells(i, j).Value <> "" Then
valeur = Cells(i, j).Value & Sep
S = S & valeur & Sep
valeur = ""
End If

Next j
Next i
Close #F

'Sauvegarde tout ce qui trouve dans le fichier txt dans la variable tamp
MyValue = Inputbox("Chemin d'accés au fichier d'exportation : ", accés_fichier, "C:\Documents and settings\mat\Bureau\Export.txt", 100, 100)

Open MyValue For Input As #F1
Do While Not EOF(F1) ' Tant que la lecture n'est pas a la fin du fichier
Line Input #F1, tamp ' Lit et place les lignes dans la variable tamp
Loop
Close #F1

'Ecrit dans le fichier txt les variables tamp et S
Open MyValue For Output As #F2

Print #F2, tamp & Sep & S

Close #F2

5 réponses

madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
22 déc. 2004 à 18:50
Déjà la variable Tamp de type string est écrasée à chaque passage.
Il faudrait que tu utilises un tableau de string... avec ta méthode
ou que tu concatenes les extractions de lignes ou que tu changes de methode de lecture comme tu l'a fait plus haut avec S

Il me semble que tu aurais intérêt à utilise une macro que tu crées en mode enregistre (en faisant un export)... Excel le fait très bien, ensuite tu l'adaptes.

madbob
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
22 déc. 2004 à 20:47
Entièrement OK avec <madbob>.

En VBA Excel, tu as la chance d'avoir une sorte d'assistant avec l'Enregistrement de macro. Utilise-le. Et si tu veux optimiser, demande-nous si tu ne sais pas.

Cordialement, CanisLupus
0
cs_matheo54 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 novembre 2007
23 déc. 2004 à 12:02
Merci madbob, Merci CanisLupus. En fait, j'ai réctifié et ma variable tamp n'est plus écrasée, le résultat dans mon fichier txt est ce que je demande... mais pour la feuille de classeur1 alors que je voudrais les données d'un autre fichier excel! Je ne comprend pas une chose, pourquoi alors que je lui dis d'aller chercher les valeurs dans un autre classeur excel (classeur2) il ne le fait pas est reste sur le classeur "actif". Je lui dis bien d'ouvir le classeur 2 pourtant et ce qu'il me fait lui c'est m'éffacer les valeurs présente dans le classeur2 et renommer la feuille en "classeur2" ce que je trouve bizarre.
Vous me parliez egalement de l'assistant, dans mon cas je ne crois pas qu'il me soit utile ou sinon je sais pas comment. j'ai cherché pour faire un export mais c'est seulement possible de faire l'export de la macro et je me vois mal faire 45 fois le même export ( la j'essaye sur deux fichier mais au final c'est 45 dossiers que la macro devra ouvrir) ou sinon ca serais vraiment en derniere solution. Bref j'ai encore besoin de votre aide.

Merci :-)

je vous remet la macro au cas où :

' Lit et sauvegarde dans S les données se trouvant ds le classeur 2

MyFichierExcel = Inputbox("Chemin d'accés au fichier Excel : ", accés_fichier_Excel, "C:\Classeur2.xls", 100, 100)

Open MyFichierExcel For Output As #F
For i = 1 To 30
For j = 1 To 30

If Cells(i, j).Value <> "" Then
valeur = Cells(i, j).Value & Sep
S = S & valeur
valeur = ""
End If

Next j
Next i
Close #F

'Sauvegarde tout ce qui trouve dans le fichier txt dans la variable tamp

MyValue = Inputbox("Chemin d'accés au fichier d'exportation :", accés_fichier, "C:\Export.txt", 100, 100)

Open MyValue For Input As #F1

Do While Not EOF(F1) ' Tant que la lecture n'est pas à la fin du fichier
Line Input #F1, valeur ' Lit et place les lignes dans la variable tamp
tamp = tamp & valeur
valeur = ""
Loop

Close #F1

'Ecrit dans le fichier txt les variables tamp et S

Open MyValue For Output As #F2

Print #F2, tamp & Sep & S

Close #F2
0
cs_matheo54 Messages postés 65 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 28 novembre 2007
23 déc. 2004 à 17:13
Bon, c'est re moi, y'a eu de l'évolution, j'arrive a exporter les données de mon classeur2. En fait c'etait ma méthode d'ouverture du fichier excel qui ne correspondait pas.
Il faut mettre :
workbooks.Open "C:\Classeur2.xls"
au lieu de :
Open "C:\classeur2.xls" For Input As #F1
Par contre le workbooks.close ne fonctionne pas mais ca n'as pas l'air de géner donc...!

En revanche, j'aurais aimé remplacer dans "workbooks.open" mon chemin du fichier excel par une variable pour pouvoir faire une boucle et en ouvrire 45 mais cette methode n'as pas l'air d'accépter les variables. Zut alors! Vous avez une idée de comment je pourrais faire pour changer le chemin sans répéter 45 fois la macro? :O)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
27 déc. 2004 à 12:00
Salut et bonne fêtes....
Tu les as bien méritées :-)))

L'idée d'enregistrer la macro c'est simplement pour que tu comprennes comment excel passe la main d'un classeur à l'autre d'une feuille à l'autre qu'est-ce qu'il utilise pour faire un import, une opération que tu ne connais pas etc....

Comme tu m'as l'ai dégourdi, n'hésite pas à réfléchir à la séquence puis à l'enregistrer puis à t'en servir. Mais il ne sait pas écrire ni de boucle ni de test... seulement une suite d'action !

Concernant ton problème d'ouverture successive de 50 fichiers....
Tu peux tout à fait en utilisant les propriétés des répertoires et des fichiers faire une boucle qui ouvrira et lancera pour chaque fichier le traitement. Il s'agit des fonction vba clasiques.

Tu peux utiliser cette méthode de l'aide utilisant FSO mais y en a d'autres. C'est un exemple basic de l'aide en ligne d'excel modifié

Sub macrodir()
dim MonRep as string
dim MonFic as string

MonRep = "C:"
MonFic = ""

Set fs = Application.FileSearch
With fs
'* tu lui donne l'arborescence
.LookIn = MonRep
'* le type de fichier "*.csv" ici tous les fichiers
.Filename = "*.*"
If .Execute > 0 Then
'* Pour débugage
'MsgBox "There were " & .FoundFiles.Count & " file(s) found."

For i = 1 To .FoundFiles.Count
'* Récupération du nom
MonFic = .FoundFiles(i)
'* Appel de mon traitement d'importation
Call Mon_Import(MonFic)

MonFic = ""
Next i
Else
MsgBox "There were no files found."
End If
End With
End Sub

N'oublie pas d'utiliser copieusement l'aide, c'est aussi important à mon avis de savoir chercher une information que de tout connaître.
Tous les fichiers doivent se trouver dans le même répertoire et pense à construire les noms complets (si nécessaire) avec concaténation MonRep & MonF pour les ouvertures...

madbob :-p
0
Rejoignez-nous