IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copie de valeurs depuis un fichier texte au format Text


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 6
    Par défaut Copie de valeurs depuis un fichier texte au format Text
    Bonjour à tous,

    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 un nouveau excel, de choisir le format, de copier les valeurs dans mon fichier excel).

    Je vais par exemple avoir la valeur 2e00 (hexadecimale) qui est interprété comme 2e+02 ce qui n'a rien à voir... et qui fausse mon graphique.
    Je souhaiterais donc au moment de la copie des valeurs depuis mon fichier .txt être au format Text sans qu'il ne change.

    Je n'arrive pas à mettre le fichier texte en pièce jointe donc voici deux lignes posant problème tirées du fichier texte :
    1f03 1e03 1f03 1f03 1e03 1f03 1e03 1e03
    0103 0103 0103 0103 0303 0103 0003 0303
    Cette ligne par exemple ne pose aucun problème : 9f02 9f02 9f02 9f02 9f02 9f02 9f02 9f02

    Et ici ma macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    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 en mettant toutes les cellules au format text
    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 aussi mais non
    .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

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    A ta place, je remplacerai les requêtes par une ouverture de ton fichier texte sous forme de classeur avec un OpenText sur Workbooks.
    https://msdn.microsoft.com/fr-fr/vba...t-method-excel
    Cette méthode te permet entre autre de contrôler le type du contenu des cellules (voir le paramètre FieldInfo dans la page d'aide que j'ai donnée en lien).
    Une fois le fichier texte ouvert comme un classeur, il est plus simple d'aller y récupérer des données et de contrôler leur format.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 6
    Par défaut
    Ok, je me penche sur ce que tu m'as envoyé

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 6
    Par défaut
    Grâce à toi j'ai réussi à faire ce que je souhaitais faire, merci !
    Est-ce qu'il y aurait un moyen par contre de choisir le fichier au lieu de devoir à chaque fois indiquer le datapath ?
    Possible avec Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt") ?
    J'ai essayé mais je ne sais pas du coup comment inclure la variable Fichier dans mon code
    Sinon ce n'est pas grave

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Ouvrir()
     
    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
     
    End Sub

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par DylanBE Voir le message
    Est-ce qu'il y aurait un moyen par contre de choisir le fichier au lieu de devoir à chaque fois indiquer le datapath ?
    Possible avec Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt") ?
    J'ai essayé mais je ne sais pas du coup comment inclure la variable Fichier dans mon code
    Rien de plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Fichier As String
    Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    Workbooks.OpenText Filename:=Fichier, _
        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))
    Bien sûr, pour faire propre il faudrait rajouter deux ou trois bricoles comme tester le contenu de la variable Fichier avant de la transmettre à OpenText.
    A minima, vérifier qu'elle n'est pas False.
    Mais le mieux serait de vérifier l'existence du fichier avec un Dir().

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 6
    Par défaut
    Okay,

    Mais du coup il y aura problèmes avec l'utilisation de toute la suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Workbooks("data.txt").Worksheets("data").Range("A1:H1").EntireColumn.Copy _
        Workbooks("TestPression2.xlsm").Worksheets("TestPression").Range("A3:H3").EntireColumn
     
    Workbooks("data.txt").Close False
    Etant donné que finalement on ne sait pas quel va être le nom de la Worksheet active. Nous avions data car le fichier était data.txt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2010] Copie de valeur depuis un fichier XLS fermé vers un fichier de consolidation
    Par Kishor Kumar dans le forum Microsoft Office
    Réponses: 1
    Dernier message: 13/08/2014, 20h22
  2. Réponses: 4
    Dernier message: 26/03/2014, 15h30
  3. [XL-2010] Récupérer valeurs depuis plusieurs fichiers
    Par DraGula dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/08/2013, 13h35
  4. Réponses: 2
    Dernier message: 06/03/2012, 10h47
  5. [XL-2007] Copie de valeur entre 2 fichiers sous condition
    Par hdisnice dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/06/2011, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo