Excel conversion d'un répértoire txt en xls
cletess
Messages postés
38
Date d'inscription
Statut
Membre
Dernière intervention
-
Zoul67 Messages postés 1959 Date d'inscription Statut Membre Dernière intervention -
Zoul67 Messages postés 1959 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
J'ai toute une série de fichier txt se trouvant dans un même répertoire que je désire transformer en fichier xls portant le même nom que le fichier txt d'origine.
En fouillant un peu dans les méandres d'internet, j'ai trouvé le code ci-dessous qui semble remplir parfaitement cette fonction (en ayant au préalable activé "Microsoft Script Runtime" dans les références VBA). Ce code fonctionne à merveille pour les fichiers txt avec TAB comme séparateur (Chr(9)). Les fichiers txt que je désire transformer sont de type "FixedWidth" avec des espaces comme séparateur. J'ai tenté de simplement changer le séparateur en Chr(32) pour la barre d'espace (voir code ascii) mais toutes les colonnes sont décalées maintenant.
Auriez-vous quelques idées pour contourner le problème ?
Merci beaucoup !
J'ai toute une série de fichier txt se trouvant dans un même répertoire que je désire transformer en fichier xls portant le même nom que le fichier txt d'origine.
En fouillant un peu dans les méandres d'internet, j'ai trouvé le code ci-dessous qui semble remplir parfaitement cette fonction (en ayant au préalable activé "Microsoft Script Runtime" dans les références VBA). Ce code fonctionne à merveille pour les fichiers txt avec TAB comme séparateur (Chr(9)). Les fichiers txt que je désire transformer sont de type "FixedWidth" avec des espaces comme séparateur. J'ai tenté de simplement changer le séparateur en Chr(32) pour la barre d'espace (voir code ascii) mais toutes les colonnes sont décalées maintenant.
Auriez-vous quelques idées pour contourner le problème ?
Merci beaucoup !
Option Explicit
Public Sub Test()
Dim fd As FileDialog
Dim repertoire As String
Set fd = Application.FileDialog(msoFileDialogFolderPicker) 'création d'une boite de dialogue choix de répertoire
fd.AllowMultiSelect = False 'on ne peut choisir qu'un seul repertoire
If fd.Show = -1 Then 'l'utilisateur à valider sa selection
repertoire = fd.SelectedItems(1) 'le repertoire choisi
TransformerTousLesFichiers repertoire
End If
End Sub
'Boucle sur tous les fichiers d'un répertoire
Private Sub TransformerTousLesFichiers(ByVal repertoire As String)
Dim fso As New FileSystemObject
Dim fichier As File
For Each fichier In fso.GetFolder(repertoire).Files 'pour chaque fichier du repertoire
If Right(fichier.Name, 4) = ".txt" Then 'si c'est un fichier texte
TransformerFichierTexteEnExcel fichier 'il effectue la transformation ci-dessous
End If
Next fichier
End Sub
'Ouvre un fichier texte, sépare chaque ligne par ses "tab" et le met dans un fichier excel qui porte le même nom
Private Sub TransformerFichierTexteEnExcel(ByRef fichier As File)
Dim wb As Workbook
Dim ws As Worksheet
Dim chemin As String
Dim nomFichier As String
Dim numFic As Integer
Dim i, iCol, iRow As Long
Dim ligneFichier As String
Dim ligneFichierSplit() As String
Dim separateur As String
chemin = fichier.ParentFolder.Path 'le chemin du fichier texte
nomFichier = fichier.Name 'le nom du fichier texte
nomFichier = Left(nomFichier, Len(nomFichier) - 4) & ".xls" 'qu'on transforme en fichier excel
Set wb = Application.Workbooks.Add 'on ouvre un nouveau classeur
wb.SaveAs chemin & "\" & nomFichier 'qu'on sauve sous le bon nom
Set ws = wb.Worksheets(1) 'la première feuille
numFic = FreeFile
separateur = Chr(9)
Open fichier.Path For Input As #numFic 'ouverture du fichier texte
iRow = 1
Do While Not EOF(numFic) 'tant que le fichier n'est pas parcouru en entier
iCol = 1
Line Input #numFic, ligneFichier 'on récupère la ligne suivante
ligneFichierSplit = Split(ligneFichier, separateur) 'on sépare la ligne dans un tableau
For i = LBound(ligneFichierSplit) To UBound(ligneFichierSplit) 'on copie le tableau
ws.Cells(iRow, iCol) = ligneFichierSplit(i)
iCol = iCol + 1
Next
iRow = iRow + 1
Loop
Close #numFic 'fermeture du fichier texte
wb.Save 'sauvegarde du fichier excel
wb.Close 'fermeture du fichier excel
End Sub
A voir également:
- Excel conversion d'un répértoire txt en xls
- Liste déroulante excel - Guide
- Mise en forme conditionnelle excel - Guide
- Word et excel gratuit - Guide
- Trier un tableau excel - Guide
- Déplacer colonne excel - Guide
1 réponse
Bonjour,
Le problème avec ta méthode est que chaque caractère espace va faire changer de colonne. Je vois deux solutions :
- soit tu es proche du but et te satisfais de la suppression a posteriori des espaces superflus :
- soit tu repars de zéro en te basant par exemple sur le code généré automatiquement pour les largeurs fixes :
A+
Le problème avec ta méthode est que chaque caractère espace va faire changer de colonne. Je vois deux solutions :
- soit tu es proche du but et te satisfais de la suppression a posteriori des espaces superflus :
Selection.Delete Shift:=xlToLeft
- soit tu repars de zéro en te basant par exemple sur le code généré automatiquement pour les largeurs fixes :
Workbooks.OpenText Filename:= _ "C:\Users\User1\Desktop\CCM\a1.txt", Origin:=xlMSDOS, _ StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(10 _ , 1)), TrailingMinusNumbers:=True
A+