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 :

Importer les données d'un fichier texte sous Excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Points : 25
    Points
    25
    Par défaut Importer les données d'un fichier texte sous Excel
    Bonjour tout le monde!
    Je travaille dans le domaine du calcul et je cherche à créer une macro qui extrait d'un fichier texte placé à une certaine adresse du style :
    D:\Documents and Settings\265735\Desktop\Affaires\fichier.txt
    dont une partie est décrite ci-dessous :
     Déplacements aux paliers du flasque supérieur
     Palier supérieur (Rp,Hp2):
            Déplacement radial=              0.127 mm
            Déplacement vertical=           0.873 mm
      
     Palier intermédiaire (Rp,Hp1):
            Déplacement radial=              -6.1E-02 mm
            Déplacement vertical=           0.681 mm
    Je cherche à récupérer ces valeurs et les mettre dans un fichier excel sous la forme suivante :
      A1  |  A2  |    A3    |   A4 |
    0.127|0.873|-6.1E-02|0.681|
    Comme je ne sais pas comment va se présenter le nombre(chiffre en écriture décimale ou scientifique et le nombre de chiffre aprés la virgule), je ne sais pas si c'est possible de l'automatiser. Et si oui, si quelqu'un peut m'expliquer comment faire pour que je comprenne la procédure à appliquer! ça m'arrangerait beaucoup, vu le nombre de fichiers textes que je dois rentrer sous excel (600)!^^
    Merci d'avance pour cette macro encore délicate pour mon niveau!

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    A1 c'est un libellé ou la cellule de destination?
    Jérôme

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Non c'est la cellule, en gros A1 est égale à 0.127. Désolé pour la clarté!^^

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Voila pour la partie lecture du fichier et récupération des données

    On considère que l'on prend en compte uniquement la partie droite des lignes avec 1 signe "=" (Suivant exemple fournis)
    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
    29
    30
    Sub import()
     
    Dim strLigne As String
    Dim i As Long
    Dim Sh As Worksheet
     
    i = 1
    'Instancie la variable Sh
    Set Sh = Sheets("Feuil1")
     
    'Ouvre le fichier en lecture
    Open "c:\fichier.txt" For Input As #1
     
    'Boucle sur chaque ligne du fichier
    Do While Not EOF(1)
        'Lit la première ligne et la met dans la variable strLigne
        Line Input #1, strLigne
        'Split : Permet de fractionner la ligne en utilisant le "=" comme séparateur
        'Ubound : Retourne le plus grand indice disponible pour la dimension indiquée d'un tableau (ici strligne) les tableaux étant de base 0 si ubound retourne 1 c'est qu'il a trouvé au moins un "="
        If UBound(Split(strLigne, "=")) = 1 Then
            'Trim : supprime les espaces avants et après
            Sh.Range("A" & i).Value = Trim(Split(strLigne, "=")(1))
            i = i + 1
        End If
     
    Loop
     
    Close #1
     
    End Sub
    Jérôme

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Merci déjà pour votre réponse, ça m'aide déjà beaucoup.
    Par contre, certains problèmes restent encore et par ma faute puisque je me suis mal expliqué et pas assez donné d'éléments :
    - il ne faut pas qu'il y ait les unités derrière les nombres dans les cellules
    - je ne cherche qu'à sélectionner que certains résultats et non tous les nombres de toutes les lignes
    - certaines lignes ont des "=" donc ce qui suit (dans la ligne) est mis dans une cellule aussi
    - et je me suis trompé en disant A1,A2...mais je veux plutôt les résultats en ligne A1,B1,C1,etc... :s (pardon encore)

    Je ne cherche qu'à avoir certains résultats donc est-il possible de sélectionner plutôt les lignes et appliquer la commande pour sélectionner le chiffre? (Mes fichiers de résultats sont toujours structurés de la même façon.
    Pour mieux expliciter mes problèmes je vous mets mon fichier texte en pièce jointe.
    Je ne cherche qu'à avoir les résultats suivants :
    - Palier supérieur (Rp,Hp2):
            Déplacement radial=              0.127 mm
    - Palier intermédiaire (Rp,Hp1):
            Déplacement radial=              -6.1E-02 mm
    - Palier inférieur (Rp,Hp3):
            Déplacement radial=              5.E-03 mm
    - Aux coordonnées (Rm,Hm):
         Déplacement radial=       8.1E-02 mm
         Déplacement vertical=     1.441 mm
    - Palier supérieur (Rp,Hp2):
         Rotation flasque=        -1.841E-03 rad
    -  Palier intermédiaire (Rp,Hp1):
         Rotation flasque=        -2.098E-03 rad
    -  Palier inférieur (Rp,Hp3):
         Rotation flasque=        2.8E-05 rad
    -  Réaction au palier supérieur=     19696 N
       Réaction au palier intermédiaire= -30249 N
       Réaction au palier inférieur=     10344 N
    -  Effort au levier= -298 N
    Et si ce n'est pas trop vous demandez (je sais que c'est déjà beaucoup, pourriez vous me décrire les fonctions suivantes que vous avez mis dans le programme précédent :
    EOF(1), Line Input #1, UBound, Split, strligne ??

    Si c'est trop je comprendrai de toute évidence.

    Merci par avance encore!!!
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    J'ai commenté mon précédent code. Cela devrait t'aider à le comprendre

    Je n'ai pas compris comment on repere les lignes à garder
    Jérôme

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Dans mon fichier texte, je ne veux pas sélectionner tous les résultats mais par exemple juste récupérer le résultat de la ligne 26 ("Déplacement radial= 0.127 mm") de mon fichier texte (que j'ai mis en annexe) soit 0.27 (résultat).

    J'ai essayé ton code en l'adaptant comme ceci. Mais ça ne marche pas puisque je ne comprends pas bien le rôle de #1.
    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
     
    Sub import()
     
    Dim strLigne As String
    Dim i As Long
    Dim Sh As Worksheet
     
    i = 1
    Set Sh = Sheets("Feuil1")
     
    Open "C:\Users\Lucas\Desktop\static_analysis.txt" For Input As #26
     
        Line Input #26, strLigne
        If UBound(Split(strLigne, "=")) = 1 Then
            Sh.Range("A" & i).Value = Trim(Split(strLigne, "=")(1))
        End If
     
     
    Close #26
     
    End Sub
    De plus, il ne faut pas que l'unité "mm" apparaissent dans ma case excel ce qui est le cas pour l'instant.

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    #1 est la variable représentant le fichier à importer. Rien a voir avec la ligne
    Si je comprend bien tu veux toutes les valeurs de déplacement radial?
    Je ferais la suppression des unités demain. (Sur iPhone pour ce message)
    Jérôme

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Non plutôt l'extraction des valeurs numériques sans unités aux lignes 26, 30, 38, 70, 71, 109, 115, 121, 135, 136, 137 et 163 de mon fichier texte et qui seraient rangées dans les cases A1, B1, C1, D1, etc...
    Merci encore pour ton temps.

  10. #10
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Voila

    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
    Sub import()
     
    Dim strLigne As String
    Dim i As Long
    Dim Sh As Worksheet
    Dim str() As String
     
    i = 1
    Set Sh = Sheets("Feuil1")
     
    Open "C:\Users\Lucas\Desktop\static_analysis.txt" For Input As #1
     
    Do While Not EOF(1)
        Line Input #1, strLigne
        str = Split(strLigne, "=")
     
        If UBound(str) = 1 Then
            If Trim(str(0)) = "Déplacement radial" Then
                Sh.Cells(1, i).Value = Trim(Replace(str(1), "mm", ""))
                i = i + 1
            End If
        End If
    Loop
     
    Close #1
     
    End Sub
    Jérôme

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Merci beaucoup!ca va beaucoup m'aider!

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

Discussions similaires

  1. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59
  2. Réponses: 5
    Dernier message: 09/01/2008, 07h54
  3. Pour extraire les données d'un fichier texte
    Par Floch dans le forum Access
    Réponses: 2
    Dernier message: 02/05/2006, 15h01
  4. Réponses: 2
    Dernier message: 05/01/2006, 00h29
  5. [JTable] Comment récuperer les données d'un fichier texte ?
    Par Makunouchi dans le forum Composants
    Réponses: 2
    Dernier message: 03/05/2005, 16h37

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