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 :

lire fichier texte jusqu'à..


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Par défaut lire fichier texte jusqu'à..
    Bonjour à tous,

    Je débute en VBA et j'aurais besoin d'un petit coup de main svp... Mon objectif est de créer une macro permettant de transformer un fichier texte contenant des coordonnées de points (x,y) en un fichier python directement codé pour créer ces points dans un logiciel de simulation numérique.

    En gros le fichier est comme ci-dessous :

    0.00 -791.0
    5.98 -791.0
    11.95 -791.1
    17.93 -791.1
    23.90 -791.2
    29.88 -791.2
    etc...
    Que je voudrais transformer en :

    s.Line(point1=(0.00,-791.0),point2=(5.98,-791.0))
    s.Line(point1=(5.98,-791.0),point2=(11.95,-791.0))
    s.Line(point1=(11.95,-791.1),point2=(17.93,-791.1))
    s.Line(point1=(17.93,-791.1),point2=(23.90,-791.1))
    s.Line(point1=(23.90,-791.2),point2=(29.88,-791.2))


    Donc j'ai déjà ecrit pas mal de trucs : comment demander l'adresse du fichier à l'utilisateur, puis ouvrir ce fichier, lire des données dedans, les écrire dans un nouveau fichier,etc.. en voici un extrait ci dessous :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'Creation d'un fichier python
    Open "python.py" For Output As #2
     
    ' Ouverture du fichier texte
    Open Nom_Fichier For Input As 1
     
    While Not EOF(1)
    Line Input #1, strLigne
    Print #2, strLigne
    Wend
     
    Close 1
     
    Close #2
    Je voudrais juste savoir comment programmer en VBA une lecture jusqu'à un espace (pour la première coordonnée) et jusqu'à un retour à la ligne (pour la seconde) ?

    Merci d'avance pour votre aide

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,


    regarde du côté des fonctions MID, INSTR, INSTRREV, SPLIT

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Par défaut
    merci pour la réponse. Il n'existe pas des fonctions simples permettant de lire ju'au prochain caractere ? ou lire jusqu'à un pespace,etc ... ?

  4. #4
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    bjr,

    une fois la ligne lue, il suffit effectivement de séparer les coordonnées, soit avec instr, soit avec split.
    pour les numéros de fichiers, une bonne pratique est d'utiliser des variables remplies avec FreeFile

    Un exemple :
    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
    31
     
    Dim lFilePy As Integer
    Dim lFileTxt As Integer
    Dim strLigne As String
    Dim lCoord1 As String, lCoord2 As String
    Dim lOldCoord1 As String, lOldCoord2 As String
    ' Ouverture du fichier texte
    lFileTxt = FreeFile
    Open ThisWorkbook.Path & "\in.txt" For Input As #lFileTxt
    'Creation d'un fichier python
    lFilePy = FreeFile
    Open ThisWorkbook.Path & "\python.py" For Output As #lFilePy
    ' Boucle de lecture du fichier d'entrée
    While Not EOF(lFileTxt)
        ' Lecture ligne
        Line Input #lFileTxt, strLigne
        ' Split des coordonnées séparées par un espace
        lCoord1 = Split(strLigne, " ")(0)
        lCoord2 = Split(strLigne, " ")(1)
        ' A partir de la deuxième coordonnées
        If lOldCoord1 <> "" Or lOldCoord2 <> "" Then
            ' Ecrit dans le fichier python
            Print #lFilePy, "s.Line(point1=(" & lOldCoord1 & "," & lOldCoord2 & "),point2=(" & lCoord1 & "," & lCoord2 & "))"
        End If
        ' Conserve les coordonnées pour les reprendre sur la ligne suivante
        lOldCoord1 = lCoord1
        lOldCoord2 = lCoord2
    Wend
    ' Ferme les fichiers
    Close #lFileTxt
    Close #lFilePy

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Par défaut
    Merci énormément j'ai réussi a tout remettre et c'est exactement ca...

    Encore un petit probleme si je peux me permettre. Comment faire si j'ai plusieurs espaces (et que je ne connaisse pas le nombre) entre mes coordonnées, par exemple :

    0.00 -791.0
    5.98 -791.0
    11.95 -791.1
    17.93 -791.1
    23.90 -791.2
    29.88 -791.2
    etc...
    mêmeproblème, si j'ai 3 coordonnées, comme par exemple : (dans ce cas je pense que j'arriverais à trouver la solution avec le problème précédent, je n'aurais qu'à spliter une troisieme variable)
    0.00 -791.0
    5.98 0 -791.0
    11.95 0 -791.1
    17.93 0 -791.1
    23.90 0 -791.2
    29.88 0 -791.2
    etc...

    encore merci pour votre aide en tout cas, j'ai déjà bien avancé !

  6. #6
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    bjr,

    il est possible de supprimer les espaces avant le traitement avec Replace (dans un boucle et avec Instr pour vérifier qu'il n'y a plus de double espace)

    il est également possible de mettre le résultat du split dans un tableau
    ensuite on peut parcourir le tableau en utilisant LBound et UBound (ou un For Each)
    chaque valeur non vide serait à prendre en compte

    pour la troisième coordonnée c'est effectivement le même principe
    si c'est variable, il faudrait alors peut-être mieux mettre le résultat du split dans un tableau puis faire une boucle dessus

Discussions similaires

  1. Réponses: 11
    Dernier message: 25/01/2007, 18h20
  2. [VB.NET 2.0] lire fichier text
    Par Emcy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 20/12/2006, 08h45
  3. Lire fichier texte
    Par kinouseb dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 08/11/2006, 17h01
  4. Lire fichier texte en respectant la police, la forme
    Par loupin dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2006, 22h49
  5. Lire fichier Texte
    Par rprom1 dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 15/03/2006, 16h36

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