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 Function

Nomfichier contient ton extension

Fait

Saveas left(nomfichier, len(nomfichier)-4) & .xlsx

Merci EngueEngue, mais je viens de tester et quelque chose ne passe pas

Erreur d'exécution '438', propriété ou méthode non gérée par cet objet

qui renvoi à ta ligne

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 With

La 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 ?

Rechercher des sujets similaires à "enregistrer txt modifie macro format xlsx"