Importation fichier texte dans une boucle

hydr

XLDnaute Nouveau
Bonjour,

Je cherche à ouvrir des fichiers textes pour appliquer des calculs. J'ai réussi à construire la macro pour ouvrir un fichier mais j'aimerais pouvoir l'appliquer à tout un dossier.

Workbooks.OpenText Filename:= _
"C:\Nom du fichier.txt" _
, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1)), DecimalSeparator:=".", TrailingMinusNumbers:=True

J'ai défini une boucle qui va chercher les fichiers dans ce dossier mais j'ai un problème pour associer les deux.

Dim Fich As String
Const Chemin_dossier = "chemin dossier voulu"
Fich = Dir(Chemin_dossier & "*.txt")
Do While Fich <> ""
Workbooks.Open Chemin_dossier & Fich

Comment est-ce que je peux intégrer les modalités d'ouverture de mon fichier texte à ma boucle???
Je sature et j'arrive plus à rien là...donc s'il y a quelqu'un qui a une solution je suis preneuse!
 

kjin

XLDnaute Barbatruc
Re : Importation fichier texte dans une boucle

Bonjour,
Tu y es presque
Code:
Sub marine()
Rep = "Le chemin du dossier" 'à adapter sans oublier le dernier antislash
nfich = Rep & "*.txt"
pfich = Dir(nfich)
Do While pfich <> ""
    Workbooks.OpenText Filename:=Rep & pfich _
    , Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
    Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
    Array(2, 1)), DecimalSeparator:=".", TrailingMinusNumbers:=True
pfich = Dir
Loop

End Sub
Non testé bien entendu
A+
kjin
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : Importation fichier texte dans une boucle

Boujour hydr, kjin et à ceux qui passeront par là.
Je m'intéresse nouvellement à la transcription de fichier ".xls" en ".txt"

J'ai trouvé sur un précédent Fil comment le faire,
sauf que la feuille active est rebaptisée du nom de mon TXT,
et que seule celle-ci est exportée. !!! :confused:

Je ne sais pas non plus comment revenir au format Excel via Macro… et c.
ni réincorporer la ou les pages dans mon classeur initial.

Je ne suis pas allé trop loin dans mes recherches.

Auriez-vous dans vos adresses, une porte à laquelle je puisse frapper? :)

Merci d'avance

Yann
 

mromain

XLDnaute Barbatruc
Re : Importation fichier texte dans une boucle

Bonjour hydr, kjin, YANN,

Boujour hydr, kjin et à ceux qui passeront par là.
Je m'intéresse nouvellement à la transcription de fichier ".xls" en ".txt"

J'ai trouvé sur un précédent Fil comment le faire,
sauf que la feuille active est rebaptisée du nom de mon TXT,
et que seule celle-ci est exportée. !!! :confused:

Je ne sais pas non plus comment revenir au format Excel via Macro… et c.
ni réincorporer la ou les pages dans mon classeur initial.

Je ne suis pas allé trop loin dans mes recherches.

Auriez-vous dans vos adresses, une porte à laquelle je puisse frapper? :)

Merci d'avance

Yann

Je me suis créé l'année dernière deux fonctions pour l'export/import de fichiers txt/csv.

Si ça peut te servir...

Code:
'***************************************************************************************
'*  Module    : Module ImportExportTxt
'*  Author    : mromain
'*  Date      : 10/06/2009
'*  Purpose   : contient 2 procédures
'*                - TxtToXls : importe un fichier texte dans une feuille Excel
'*                - XlsToTxt : exporte une feuille Excel dans un fichier texte
'***************************************************************************************




'---------------------------------------------------------------------------------------
' Procedure : Procédure TxtToXls
' Author    : mromain
' Date      : 10/06/2009
' Purpose   : importe un fichier texte dans une feuille Excel
'               - l'attribut "sheetDest" représente la feuille de destination (pour l'import)
'               - si l'attribut "importFileName" n'est pas précisé, une IHM demandera à l'utilisateur de sélectionner le fichier
'               - si l'attribut "csvDelimiter" n'est pas précisé, la valeur prise par défaut sera ";"
'---------------------------------------------------------------------------------------
'
Public Sub TxtToXls(sheetDest As Worksheet, Optional importFileName As String, Optional csvDelimiter As String = ";")
Dim myFso As Object, csvFile As Object, csvLine As String, tabStr() As String, numLigne As Integer, numColonne As Integer

' si le nom de fichier CSV source n'a pas été précisé,
If importFileName = Empty Or Not ((importFileName Like "*" & Dir(importFileName)) And Dir(importFileName) <> vbNullString) Then
    ' récupérer le nom du fichier CSV à importer
    Do
        importFileName = Application.GetOpenFilename(filefilter:="Fichier texte à importer, *.*")
    Loop Until UCase(importFileName) <> "FAUX"
End If

' ouvrer le fichier CSV
Set myFso = CreateObject("Scripting.FileSystemObject")
Set csvFile = myFso.OpenTextFile(importFileName)

numLigne = 1

' tant qu'on est pas à la fin du fichier CSV
While Not csvFile.AtEndOfStream
    ' lire la ligne suivante
    csvLine = csvFile.ReadLine
    ' "spliter" la ligne
    tabStr = Split(csvLine, csvDelimiter)
    ' boucler sur chaque élément de la ligne
    For numColonne = LBound(tabStr) + 1 To UBound(tabStr) + 1
        ' reporter la valeur de l'élément sur la feuille
        sheetDest.Cells(numLigne, numColonne).Value = tabStr(numColonne - 1)
    Next numColonne
    ' se décaler d'une ligne
    numLigne = numLigne + 1
Wend

' fermer le fichier
csvFile.Close
Set csvFile = Nothing: Set myFso = Nothing
End Sub




'---------------------------------------------------------------------------------------
' Procedure : Procédure XlsToTxt
' Author    : mromain
' Date      : 10/06/2009
' Purpose   : exporte une feuille Excel dans un fichier texte
'               - l'attribut "sheetExport" représente la feuille source (pour l'export)
'               - si l'attribut "exportFileName" n'est pas précisé, une IHM demandera à l'utilisateur de sélectionner le fichier
'               - si l'attribut "csvDelimiter" n'est pas précisé, la valeur prise par défaut sera ";"
'---------------------------------------------------------------------------------------
'
Public Sub XlsToTxt(sheetExport As Worksheet, Optional exportFileName As String, Optional csvDelimiter As String = ";")
Dim myFso As Object, csvFile As Object, i As Integer, j As Integer, csvLine As String

' si le nom de fichier CSV destination n'a pas été précisé,
If exportFileName = Empty Then
    ' récupérer le nom du fichier à créer
    Do
        exportFileName = Application.GetSaveAsFilename(InitialFileName:=sheetExport.Name & ".csv", filefilter:="Fichier CSV, *.csv")
    Loop Until UCase(exportFileName) <> "FAUX"
End If

' créer le fichier
Set myFso = CreateObject("Scripting.FileSystemObject")
Set csvFile = myFso.CreateTextFile(Filename:=exportFileName, overwrite:=True)

With sheetExport
    ' boucler sur toutes les lignes
    For i = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Row
        ' initialiser la ligne CSV
        csvLine = vbNullString
        ' boucler sur toutes les colonnes
        For j = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Column
            ' créer la ligne
            csvLine = csvLine & .Cells(i, j).Text & csvDelimiter
        Next j
        csvLine = Left(csvLine, Len(csvLine) - Len(csvDelimiter))
        ' écrire la ligne dans le fichier
        csvFile.WriteLine csvLine
    Next i
End With

' fermer le fichier
csvFile.Close
Set csvFile = Nothing: Set myFso = Nothing
End Sub

a+
 

YANN-56

XLDnaute Barbatruc
Re : Importation fichier texte dans une boucle

Bonjour mromain.

Diantre quel beau cadeau! Merci beaucoup c'est très sympa de ta part. :)

Bon O.K.! Je vais avoir de quoi m'occuper pour le reste de la journée.

Sinon plus! Car je me suis toujours mélangé les pinceaux
quant à ce qui doit être écrit dans un module ou dans l'USF,
et la façon d'appeler les fonctions. :confused:

J'ai un défaut: Je commence toujours à lire un magazine par la fin.
En VBA; il en est de même……Bien fait pour moi.

Je vais donc prendre le temps d'apprendre; avant de faire.

Merci encore, et bonne fin de fin de semaine.

Yann
 

Discussions similaires

Statistiques des forums

Discussions
312 595
Messages
2 090 095
Membres
104 374
dernier inscrit
cheick.coulibaly@dcsmali.