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 :

Ecrire sur le i ème caractère d'une ligne d'un fichier texte


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut Ecrire sur le i ème caractère d'une ligne d'un fichier texte
    Bonjour,

    N'ayant aucune de mes macro précédente sous la main je n'arrive plus a retrouver une instruction.
    L'objectif est de positionne un texte a un certain endroit d'un fichier texte.
    en gros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print #nf, cells(i,1) & LaFonction(19) & cells(i,2)
    Le but est que le contenu de cells(i,2) soit par exemple à partir du 19ème caractères de ma ligne de texte quelque soit la longeur du contenu de la première cellule (de longueur bien évidement inférieure à 19)

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

    Je ne vois pas l'instruction dont tu parles mais ne peux tu pas tester la longueur du texte avant et ajuster en fonction ?


    Edit : un essai

    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
    Sub EX01_txt()
    Dim Liste As String
    Dim nf As Integer
     
     nf = FreeFile(1)
     Open "c:\exemple.txt" For Output As #nf
    'ensuite pour ecrire dans le fichier tu fais
     
    For i = 1 To 10
        Macell = Trim(Cells(i, 1).Value)
        If Len(Macell) > 19 Then
            Cells(i, 1).Select
            MsgBox "je ne traite pas ce cas"
            Exit For
        Else
            Liste = Cells(i, 1) & Space(19 - Len(Macell)) & Cells(i, 2)
        End If
    Print #nf, Liste
    Next
     
     
    Close (nf) 'ne pas oublier de fermer le fichier a la fin
    End Sub

  3. #3
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Pour l'instant je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ligne = Cells(i, 1)
    For j = Len(ligne) To 17
    ligne = ligne & " "
    Next j
    ligne = ligne & Cells(i, 2)
    Mais ce n'est pas vraiment élégant
    je vais continuer a voir avec google s'il n'a pas une meilleure idée, mais je peine sur les mots clefs

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour ami Krovax,

    Si j'ai bien compris, tu cherches à insérer le contenu d'une variable dans un fichier texte, à un endroit précis du dit fichier texte. C'est çà ?
    Si oui, à quel "endroit" ? A une ligne précise du fichier texte ou à un rang précis (nb de caractères) du dit fichier texte ?
    Autre question : quel est le type (comment a-til été écrit ?) du fichier texte en cause : Structuré en base de données (et alors : quelle est la structure utilisée ?) ou plat (et alors écrit par Write ou par Print?) ?

    La réponse exacte à ta question est différente selon le cas de figure concerné et dépend donc des précisions demandées..

  5. #5
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour ucfoutu

    Comme toujours de la précision, et tu as bien raison j'en manque pas mal sur ce coup là. Surtout que mon explication est imprécise.

    Mon fichier est particulièrement simple
    pas d'entête juste des "colonnes" qui corespondent à un certain rang.

    Pour la méthode d'écriture du fichier je crain que cela n'aide pas il est fait par ma macro et sera lut par un mailleur. Chaque colonne corespond au coordonné d'un point, la première a son numéro.

    Ce qui m'interesse c'est au moment ou j'écrit ma ligne (à l'aide d'un simple print) je voudrais placer toujours mes informations a partir du même rang (les infos colonne 2 sont a partir du 19ème caractère par exemple). Il me semble que cet été j'avais une fontion qui me permetait de le faire automatiquement, mais il se peut que je divague.

    La macro pour 3 infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For i = 1 To 106
    ligne = Cells(i, 1)
    For j = Len(ligne) To 19
    ligne = ligne & " "
    Next j
    ligne = ligne & Cells(i, 2)
    For j = Len(ligne) To 36
    ligne = ligne & " "
    Next j
    ligne = ligne & Cells(i, 3)
    Print #nf, ligne
    Next i
    Et il me semble pouvoir le faire d'une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Print #nf, cells(i,1) & LaFonction(19) & cells(i,2) & LaFonction(36) & cells(i,2)

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Re...

    1) C'est quoi, la fonction lafonction et le paramètre que tu lui passes ?
    2) (et juste pour le cas où) : tu vas utiliser ensuite ce fichier à quelles fins ? (cette précision peut être importante).

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour

    Ce ne serait pas la fonction Mid(..) que tu cherches ?

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Re...
    Et juste pour le cas où mon petit doigt serait plus malin que moi...

    Serait-ce ce qui ressemblerait à ceci, ce que tu cherches à faire ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton1_Click()
      Dim toto As String, tata As String, titi As String
      toto = "bonjour": tata = "hello ami": titi = "ça va ?"
      MsgBox zou(toto, 19) & zou(tata, 36) & zou(titi, 15)
    End Sub
     
    Private Function zou(c As String, nb As Integer) As String
      zou = Format(c, String(nb, "@"))
    End Function
    Si oui... bien...
    Mais je reste sous l'impression de ce que tu n'utilises dans ce cas pas la meilleure méthode (un fichier structuré en base de données).
    Tu dis ....

    EDIT :
    Tu auras remarqué l'alignement à droite, pour séparer tes colonnes.
    Si tu le préfères à gauche, voilà une autre zou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Function zou(c As String, nb As Integer) As String
      zou = c & String(nb - Len(c), " ")
    End Function

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    Autant pour moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ce ne serait pas la fonction Mid(..) que tu cherches ?


    Par contre je pense que la fonction Space(..) peut t'aider

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Re
    Après un test rapide, tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ligne = Cells(i, 1)
    For j = Len(ligne) To 17
    ligne = ligne & " "
    Next j
    ligne = ligne & Cells(i, 2)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = Cells(i, 1) & Space(18 - Len(Cells(i, 1))) & Cells(i, 2)

  11. #11
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour a tous, alors effecitvement la fonction space devrait pourvoir m'aider en la combiant avec len

    Pour ucfoutu, c'est effectivement l'idée mais il ne me semble pas que cela ai été une fonction perso mais j'avais pris le projet en cours de route et j'ai très bien put la zapper, ce qui expliquerai que je sèche. Je vérifierais ce soir si je retrouve une version du programme.

    Sinon pour l'utilisation du fichier texte.
    Il sera lut par le mailleur d'un logiciel élément finit pour créer les points de mon modèle mais ca je ne pense pas que cela va beaucoup aider.
    Je le lis puis je le jette. J'utilise excel pour calculer la position des points. Difficile d'utiliser une autre méthode.

    Bon je vais clore en attendant ce soir. Je vous dirais si j'ai révé ma fonction ou si effectivement elle existe belle et bien.

  12. #12
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    voila je l'ai. c'est la la fonction Tab
    Utilisée avec l'instruction Print # ou la méthode Print pour positionner la sortie.
    utilisé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Print #nf, "I"; node_n; Tab(10); "X "; Format(node_X, "0.0##"); Tab(23); Format(node_Y, "0.0##")

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

Discussions similaires

  1. effacer une chaine de caractère dans une ligne dans un fichier texte
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/08/2010, 10h22
  2. Réponses: 6
    Dernier message: 18/10/2009, 08h28
  3. Récupérer les derniers caractères d'une ligne d'un fichier texte
    Par Laaris dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/01/2009, 16h06
  4. Réponses: 1
    Dernier message: 21/08/2007, 08h25
  5. Réponses: 4
    Dernier message: 24/11/2006, 17h03

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