Enregistrer un txt modifié par macro sous format xlsx
Bonjour,
Je viens de passer quelques bonnes heures à écrire une macro grace à l'apport des forums et de l'enregistreur de macro
Mon objectif est de convertir plus d'une centaines de fichiers txt qui ont tous le même format en un fichier xls sur lequel j'aurais exécuté des modifications automatisées.
Je pars d'un fichier.txt, je l'importe en modifiant les propriétés de colonne (notamment pour changer le format date qui est inversé) puis je dois le sauvegarder sous format excel pour un autre traitement sous un logiciel tiers.
Mon problème est que si j'ai surmonté certaines difficultés, je me retrouve bloqué par un problème tout simple. mon fichier final s'appel fichier.txt.xlsx au lieu de fichier.xlsx ou avec une autre commande de type fileformat j'obtien une erreur 1004
Merci si vous arrivez à corriger mon erreur ou à m'aider à optimiser cette macro.
Voici le code
Sub IMPORT()
Dim nomfichier As String
nomfichier = RechercheFichier()
If nomfichier = "" Then
MsgBox "Vous n'avez sélectionné aucun fichier"
Else
Workbooks.OpenText nomfichier _
, 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), Array(3, 1), Array(4, 5), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
, 1), Array(16, 1), Array(17, 1), Array(18, 1)), TrailingMinusNumbers:=True _
End If
Dim extension As String
Dim style As Integer
extension = ".xlsx"
Application.ScreenUpdating = False
MsgBox ThisWorkbook.Path
With ActiveWorkbook
'.SaveAs Filename:=nomfichier & extension 'donne fichier.txt.xlsx
'.SaveAs Filename:=nomfichier, FileFormat:=xlOpenXMLWorkbook 'erreur 1004
.Close
End With
End Sub
' permet de choisir un fichier txt à un emplacement donné
Function RechercheFichier() As String
Dim fd As FileDialog
Dim nomfichier As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Add "fichier txt", "*.txt"
.Title = "Recherche de fichier"
'mettre le chemin du repertoire
.InitialFileName = "C:\Users\SBL\Desktop\RSR\"
End With
If fd.Show = -1 Then nomfichier = fd.SelectedItems(1)
RechercheFichier = nomfichier
Set fd = Nothing
End FunctionNomfichier contient ton extension
Fait
Saveas left(nomfichier, len(nomfichier)-4) & .xlsx
Merci EngueEngue, mais je viens de tester et quelque chose ne passe pas
qui renvoi à ta ligneErreur d'exécution '438', propriété ou méthode non gérée par cet objet
au moment de la commande nomfichier a pour valeur "chemin\fichier.txt"
Dim style As Integer
Application.ScreenUpdating = False
'ThisWorkbook.ActiveSheet.Copy
MsgBox ThisWorkbook.Path
With ActiveWorkbook
.SaveAs Left(nomfichier, Len(nomfichier) - 4) & .xlsx
.Close
End With.SaveAs Left(nomfichier, Len(nomfichier) - 4) & ".xlsx"
Merci je venais de corriger par moi même
Autre problème, le fichier crée qui s'appel bien maintenant fichier.xlsx, mais n'a pas la nature de classeur Excel
J'ai donc modifié le ".xlsx" par ".xls" et cette fois ci il veut bien m' ouvrir le fichier mais m'indique que l'extension ne correspond pas à la nature du fichier
donc la solution n'est pas parfaite, il me faut plutôt une procédure qui sauvegarde le classeur qui vient de subir le traitement sous un format Excel
pour reprendre la procédure :
1 j'ouvre mon classeur qui contient ma macro (classeurimport.xlsm)
2 j'exécute la macro "import"
3 la macro me demande un fichier texte que je sélectionne via un explorateur
4 la macro effectue l'import du fichier sous excel et sauvegarde en gardant le nom du fichier qu'on vient d'ouvrir (exclu son extension)
Je viens de trouver la solution
Comme la feuille active est la bonne ( With Activebook)
je n'ai qu'a sauvegarder sans nommer avec le bon fileformat
With ActiveWorkbook
.SaveAs FileFormat:=xlOpenXMLWorkbook
.Close
End WithLa solution la plus simple est toujours la meilleur
Puis je conserver ce sujet ouvert pour d'autres modifications à venir, car je souhaite améliorer la macro avec quelque fonction complémentaires ?