XL 2016 [Macro] Copier des valeurs depuis un fichier texte au format "text"

DylanR

XLDnaute Nouveau
Bien le bonjour,

Il m'est demandé pour mon stage de traiter des données Hexadécimales d'un fichier texte avec Excel.
Il faut pour cela que ce soit le plus user-friendly, malheureusement je n'arrive pas à bien récupérer les valeurs de mon fichier texte au format Text à l'aide de macro (en ouvrant le fichier depuis excel il est facile de choisir le format de chaque colonne, mais c'est trop long d'ouvrir, de choisir, de copier les valeurs dans mon fichier excel).
Je vais par exemple avoir la valeur 2e00 qui est interprété comme 2e+02 ce qui n'a rien à voir...
Je souhaiterais donc au moment de la copie des valeurs depuis mon fichier .txt être au format Text sans qu'il ne change.

En pièce jointe le fameux fichier texte.

Et ici ma macro :

Code:
Sub Copie()

    Dim Fichier

    Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    Worksheets("TestPression").Range("A3:H3").EntireColumn.ClearContents
    Worksheets("TestPression").Range("A3:H3").EntireColumn.NumberFormat = "@" 'Je pensais que ça marcherait
    Cells(1, 1).Value = "Valeurs copiées du fichier .txt"

    If Fichier <> False Then

        With Worksheets("TestPression").QueryTables.Add("TEXT;" & Fichier, [A3])
        '.NumberFormat = "@"  Je pensais que ça marcherait
        .Refresh
        .FieldNames = True
        .PreserveFormatting = True
        .SaveData = True
        .AdjustColumnWidth = True
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileSemicolonDelimiter = True
        .Refresh BackgroundQuery:=False
        End With
   
    Else
        MsgBox "Il faut choisir un fichier texte"
    End If
End Sub

[Résolu]
Code:
Sub Ouvrir()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Workbooks.OpenText Filename:="C:\Users\Dylan\Desktop\Test\data.txt", _
    DataType:=xlDelimited, Space:=True, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), _
    Array(6, 2), Array(7, 2), Array(8, 2))

Workbooks("data.txt").Worksheets("data").Range("A1:H1").EntireColumn.Copy _
    Workbooks("TestPression2.xlsm").Worksheets("TestPression").Range("A3:H3").EntireColumn

Workbooks("data.txt").Close False

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@DylanR [Bienvenue sur le forum]
Un retour de ta part un plus éloquent n'aurait pas été de trop... :rolleyes:
Apparemment ta question est résolue (c'est ce que semble dire ton édition du 2/7/18 à 15:06)
Oui mais résolu comment ?

Le préciser avec plus de détails pourrait intéresser des xldnautes qui tomberaient sur ton fil.

Donc comme j'ai fait quelques tests (avant de voir ce mot [résolu] perdu entre tes deux macros), je poste ici mes modifs de ta macro Copie qui semble importer au format texte (en tout cas, c'est le cas avec XL2013)

La macro modifiée donc
VB:
Sub Copie_BIS()
Dim Fichier
Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Worksheets("TestPression")
.Columns("A:H").Clear
.[A1] = "Valeurs copiées du fichier .txt"
    If Fichier <> False Then
    With .QueryTables.Add("TEXT;" & Fichier, .[A3])
        .AdjustColumnWidth = True
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileSpaceDelimiter = True 'Dans ton fichier texte, le séparateur c'est l'espace, non ?
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2) '2=xlTextFormat
        .Refresh BackgroundQuery:=False
        End With
    Else
        MsgBox "Il faut choisir un fichier texte"
    End If
End With
End Sub
 

DylanR

XLDnaute Nouveau
Bonjour le fil, le forum

@DylanR [Bienvenue sur le forum]
Un retour de ta part un plus éloquent n'aurait pas été de trop... :rolleyes:
Apparemment ta question est résolue (c'est ce que semble dire ton édition du 2/7/18 à 15:06)
Oui mais résolu comment ?

Le préciser avec plus de détails pourrait intéresser des xldnautes qui tomberaient sur ton fil.

Donc comme j'ai fait quelques tests (avant de voir ce mot [résolu] perdu entre tes deux macros), je poste ici mes modifs de ta macro Copie qui semble importer au format texte (en tout cas, c'est le cas avec XL2013)

La macro modifiée donc
VB:
Sub Copie_BIS()
Dim Fichier
Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Worksheets("TestPression")
.Columns("A:H").Clear
.[A1] = "Valeurs copiées du fichier .txt"
    If Fichier <> False Then
    With .QueryTables.Add("TEXT;" & Fichier, .[A3])
        .AdjustColumnWidth = True
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileSpaceDelimiter = True 'Dans ton fichier texte, le séparateur c'est l'espace, non ?
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2) '2=xlTextFormat
        .Refresh BackgroundQuery:=False
        End With
    Else
        MsgBox "Il faut choisir un fichier texte"
    End If
End With
End Sub

Bonjour,

J'étais assez frustré de ne recevoir aucune réponse de la part du forum et de devoir donner une solution qualitative si l'on puit dire.
J'en ai donc convenu que ma réponse suffisait amplement pour d'autres internautes.
Je suis passé directement par le traitement de données sur un fichier excel ouvert avec le contenu de mon fichier texte dans chaque cellule.

VB:
'J'ouvre mon fichier texte en définissant chaque colonne au format texte séparé par un espace
Workbooks.OpenText Filename:="C:\Users\Dylan\Desktop\Test\data.txt", _
    DataType:=xlDelimited, Space:=True, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), _
    Array(6, 2), Array(7, 2), Array(8, 2))

'Je copie toutes les colonnes de ce nouveau classeur excel ouvert contenant les données dans mon classeur qui traitera celles-ci
Workbooks("data.txt").Worksheets("data").Range("A1:H1").EntireColumn.Copy _
    Workbooks("TestPression2.xlsm").Worksheets("TestPression").Range("A3:H3").EntireColumn

'Je ferme ensuite mon classeur, dans mon cas je ne vois pas l'ouverture et la fermeture du classeur dû à la vitesse ce qui me convient parfaitement
Workbooks("data.txt").Close False

J’espère que cela suffira,

Bien à vous
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri