Microsoft 365 Import .txt au format date

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Rapax44

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin de votre aide car j'importe un fichier .txt dans mon fichier Excel à l'aide de la macro suivante :

VB:
Sub import()
Dim Chemin, Wbk As Workbook
 
  Chemin = Application.GetOpenFilename("Fichier txt (*.txt), .txt", , "Sélectionnez le fichier...")
    If Chemin = False Then End 
    Set Wbk = Workbooks.Open(Chemin)  

Range([A65536].End(3), "G1").Select: Selection.Copy 

Windows(Fichierorigine).Activate
Feuil01.Range("A2").Select   
ActiveSheet.Paste

End Sub

Or lors de la copie du fichier .txt dans mon fichier Excel, la colonne A, qui contient des dates, n'est pas reconnu sous le format JJ/MM/AAAA et je me retrouve avec des dates au format JJ/MM/AAAA et d'autres en MM/JJ/AAAA.
Comment faire pour indiquer que la colonne A contient des dates au format JJ/MM.

Je vous joins un exemple de fichier .txt (avec des données de décembre 2024)

Merci pour votre aide
 

Pièces jointes

Bonjour Rapax, Chris,
Le problème est que le fichier n'est pas un csv mais un simple txt.
Un import en scv donne un résultat mitigé mais avec les bonnes dates. 😂
Code:
Sub Importer()
    Fichier = "C:\Users\PC_PAPA\Desktop\encaissement 12-2024.txt"
    Workbooks.OpenText Filename:= _
        Fichier, Origin:=1256, 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, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True
End Sub
 
Re,
peut être en bidouillant :
Code:
Sub Importer()
    Fichier = "C:\Users\PC_PAPA\Desktop\encaissement 12-2024.txt"
    Workbooks.OpenText Filename:= _
        Fichier, Origin:=1256, 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, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True
    For L = 1 To Cells(Cells.Rows.Count, "A").End(xlUp).Row
        If Right(Cells(L, "E"), 1) = "/" Then
            Cells(L, "E") = Cells(L, "E") & Cells(L, "F")
            Cells(L, "F") = ""
        End If
    Next L
End Sub
 
Bonjour Sylvanu, Chris,

Merci de vous être penché sur ma problématique.
Le problème est que le fichier txt est issu d'un logiciel de caisse qui ne propose des exports qu'en .txt.

J'ai besoin de récupérer ces données pour les importer dans un logiciel de comptabilité.
Le retraitement des données est à faire tous les mois et est assez chronophage car il y a plusieurs fichiers txt chaque mois.

J'ai réussi à automatiser tous les traitements par VBA en partant d'un simple copier/coller du fichier txt et cela fonctionne bien sauf pour ce problème de format de date.
Ce qui est étonnant est que si je glisse/dépose directement mon fichier .txt dans Excel, les dates sont reconnues avec le bon format.
 
Re,
peut être en bidouillant :
Code:
Sub Importer()
    Fichier = "C:\Users\PC_PAPA\Desktop\encaissement 12-2024.txt"
    Workbooks.OpenText Filename:= _
        Fichier, Origin:=1256, 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, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True
    For L = 1 To Cells(Cells.Rows.Count, "A").End(xlUp).Row
        If Right(Cells(L, "E"), 1) = "/" Then
            Cells(L, "E") = Cells(L, "E") & Cells(L, "F")
            Cells(L, "F") = ""
        End If
    Next L
End Sub
Sylvanu,
J'ai essayé ton code mais il semble pas régler mon problème de format de date.
J'avouer que le ne comprend pas la boucle sur les lignes. Que veut dire le "E" et le "F" ?
 
Bonjour tout le monde,

à tester
VB:
Option Explicit

Sub ImporterFichierTexte()
    Dim ws As Worksheet, Fichier As fileDialog
            Dim Texte As Object, Valeur As String, Lig As Long

    Set ws = ThisWorkbook.Sheets(1) ' adapter la feuille

    Set Fichier = Application.fileDialog(msoFileDialogFilePicker)
    
    With Fichier
        .Title = "Sélectionnez un fichier texte"
        .Filters.Clear
        .Filters.Add "Fichiers texte", "*.txt"
        .AllowMultiSelect = False
        
        If .Show = -1 And .SelectedItems.Count = 1 Then
            Dim filePath As String
            filePath = .SelectedItems(1)
            
            ' Vider la feuille avant d'importer
            ws.Cells.Clear
            
            Set Texte = CreateObject("Scripting.FileSystemObject").OpenTextFile(filePath, 1, False)
            
            Lig = 1
            
            Do While Not Texte.AtEndOfStream
                Valeur = Texte.ReadLine
                Dim columns() As String
                columns = Split(Valeur, vbTab)
                
                ws.Cells(Lig, 1).Value = DateValue(columns(0))
                ws.Cells(Lig, 2).Value = columns(1)
                ws.Cells(Lig, 3).Value = columns(2)
                ws.Cells(Lig, 4).Value = columns(3)
                ws.Cells(Lig, 5).Value = columns(4)
                ws.Cells(Lig, 6).Value = CDbl(Replace(columns(5), ".", ","))
                ws.Cells(Lig, 7).Value = CDbl(Replace(columns(6), ".", ","))
                
                Lig = Lig + 1
            Loop
            MsgBox "Importation du fichier texte terminée!", vbInformation + vbOKOnly, "IMPORT FICHIER"

            Texte.Close
        Else
            MsgBox "Vous n'avez sélectionné aucun fichier texte.", vbExclamation + vbOKOnly, "ABANDON"
        End If
    End With
End Sub
 
Re,
il semble pas régler mon problème de format de date.
Exact. Essayez ceci, cela rectifie le problème.
VB:
Sub Importer()
    Application.ScreenUpdating = False
    Fichier = "C:\Users\PC_PAPA\Desktop\encaissement 12-2024.txt"
    Workbooks.OpenText Filename:= _
        Fichier, Origin:=1256, StartRow:=1, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
        Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
        Other:=False, FieldInfo:=Array(Array(1, xlDMYFormat), Array(2, 1), _
        Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True
    For L = 1 To Cells(Cells.Rows.Count, "A").End(xlUp).Row
        If Right(Cells(L, "E"), 1) = "/" Then
            Cells(L, "E") = Cells(L, "E") & Cells(L, "F")
            Cells(L, "F") = ""
        End If
    Next L
End Sub
Le chemin du fichier est à modifier.
Ou simplement en rajoutant l'option Local:=True :
VB:
Sub Importer()
    Application.ScreenUpdating = False
    Fichier = "C:\Users\PC_PAPA\Desktop\encaissement 12-2024.txt"
    Workbooks.OpenText Filename:= _
        Fichier, Origin:=1256, 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, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True, Local:=True
    For L = 1 To Cells(Cells.Rows.Count, "A").End(xlUp).Row
        If Right(Cells(L, "E"), 1) = "/" Then
            Cells(L, "E") = Cells(L, "E") & Cells(L, "F")
            Cells(L, "F") = ""
        End If
    Next L
End Sub
Quand à E et F ce ont les colonnes, Je rapatrie le 0 de F pour le coller sur la valeur de E, "Règlt:001/" devient "Règlt:001/0"
 
Re,

Exact. Essayez ceci, cela rectifie le problème.
VB:
Sub Importer()
    Application.ScreenUpdating = False
    Fichier = "C:\Users\PC_PAPA\Desktop\encaissement 12-2024.txt"
    Workbooks.OpenText Filename:= _
        Fichier, Origin:=1256, StartRow:=1, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
        Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
        Other:=False, FieldInfo:=Array(Array(1, xlDMYFormat), Array(2, 1), _
        Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True
    For L = 1 To Cells(Cells.Rows.Count, "A").End(xlUp).Row
        If Right(Cells(L, "E"), 1) = "/" Then
            Cells(L, "E") = Cells(L, "E") & Cells(L, "F")
            Cells(L, "F") = ""
        End If
    Next L
End Sub
Le chemin du fichier est à modifier.
Ou simplement en rajoutant l'option Local:=True :
VB:
Sub Importer()
    Application.ScreenUpdating = False
    Fichier = "C:\Users\PC_PAPA\Desktop\encaissement 12-2024.txt"
    Workbooks.OpenText Filename:= _
        Fichier, Origin:=1256, 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, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True, Local:=True
    For L = 1 To Cells(Cells.Rows.Count, "A").End(xlUp).Row
        If Right(Cells(L, "E"), 1) = "/" Then
            Cells(L, "E") = Cells(L, "E") & Cells(L, "F")
            Cells(L, "F") = ""
        End If
    Next L
End Sub
Quand à E et F ce ont les colonnes, Je rapatrie le 0 de F pour le coller sur la valeur de E, "Règlt:001/" devient "Règlt:001/0"

Merci Sylvanu, avec le "xlDMYFormat" cela fonctionne parfaitement.

Pour la boucle sur la colonne E je n'avais pas compris que le / te gênait.
Dabs le fichier txt transmis, les données étaient ronqués puisque que le nom du client apparaissait après le /.
Donc je n'ai pas besoin de cette boucle dans la version finale.

Merci beaucoup
 
Bonjour tout le monde,

à tester
VB:
Option Explicit

Sub ImporterFichierTexte()
    Dim ws As Worksheet, Fichier As fileDialog
            Dim Texte As Object, Valeur As String, Lig As Long

    Set ws = ThisWorkbook.Sheets(1) ' adapter la feuille

    Set Fichier = Application.fileDialog(msoFileDialogFilePicker)
   
    With Fichier
        .Title = "Sélectionnez un fichier texte"
        .Filters.Clear
        .Filters.Add "Fichiers texte", "*.txt"
        .AllowMultiSelect = False
       
        If .Show = -1 And .SelectedItems.Count = 1 Then
            Dim filePath As String
            filePath = .SelectedItems(1)
           
            ' Vider la feuille avant d'importer
            ws.Cells.Clear
           
            Set Texte = CreateObject("Scripting.FileSystemObject").OpenTextFile(filePath, 1, False)
           
            Lig = 1
           
            Do While Not Texte.AtEndOfStream
                Valeur = Texte.ReadLine
                Dim columns() As String
                columns = Split(Valeur, vbTab)
               
                ws.Cells(Lig, 1).Value = DateValue(columns(0))
                ws.Cells(Lig, 2).Value = columns(1)
                ws.Cells(Lig, 3).Value = columns(2)
                ws.Cells(Lig, 4).Value = columns(3)
                ws.Cells(Lig, 5).Value = columns(4)
                ws.Cells(Lig, 6).Value = CDbl(Replace(columns(5), ".", ","))
                ws.Cells(Lig, 7).Value = CDbl(Replace(columns(6), ".", ","))
               
                Lig = Lig + 1
            Loop
            MsgBox "Importation du fichier texte terminée!", vbInformation + vbOKOnly, "IMPORT FICHIER"

            Texte.Close
        Else
            MsgBox "Vous n'avez sélectionné aucun fichier texte.", vbExclamation + vbOKOnly, "ABANDON"
        End If
    End With
End Sub
Bonjour Cathodique

Merci pour ton aide cela fonctionne parfaitement.
Je vais garder la proposition de Sylvanu qui est plus condensé et fonctionne dans mon exemple mais je garde la tienne sous le coude car elle est plus complète et me permet de "retravailler" les autres colonnes plus facilement.

Merci à tous
 
Bonjour à tous,

Il me semble que cette macro suffit :
VB:
Sub Import()
Dim chemin As Variant, F As Worksheet, wb As Workbook
chemin = Application.GetOpenFilename("Fichier txt (*.txt), .txt", , "Sélectionnez le fichier...")
If chemin = False Then Exit Sub
Set F = ActiveSheet 'feuille de destination
Application.ScreenUpdating = False
F.Rows("2:" & F.Rows.Count).Delete 'RAZ
Set wb = Workbooks.Open(chemin, Local:=True)
With wb.Sheets(1).UsedRange
    F.[A2].Resize(.Rows.Count, .Columns.Count) = .Value
End With
wb.Close False
End Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
21
Affichages
2 K
Réponses
3
Affichages
546
Réponses
2
Affichages
673
Réponses
4
Affichages
727
Retour