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 :

Convertir fichier largeur fixe via excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 42
    Points : 18
    Points
    18
    Par défaut Convertir fichier largeur fixe via excel
    Bonjour tout le monde,

    J'ai un fichier excel que je doit convertir en fichier Txt mais avec des largeurs spécifique par colonne.

    Exemple 1er colonne : sur 5 caractères à droite alors que je n'ai que 3 caractères ?
    2em colonne : sur 10 caractères à gauche
    Etc...

    La solution serait de mettre des espaces !! mais je pense qu'il y a bien une autre manière.

    Merci pour votre aide !

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par sebys Voir le message
    en fichier Txt mais avec des largeurs spécifique par colonne.
    Personnellement, je ne vois que les espaces pour arriver à ce que tu sembles vouloir.

  3. #3
    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
    Bonsoir,

    ou encore utiliser les instructions Lset et Rset.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ce qui, au final, ajoute des espaces.
    L'instruction LSet remplace les caractères restants de l'argument stringvar par des espaces.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    re,

    je n'arrive pas à trouver des exemples avec ces arguments, en aurais tu un ?


    Merci !

  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
    Citation Envoyé par sebys Voir le message
    je n'arrive pas à trouver des exemples avec ces arguments, en aurais tu un ?


    Merci !
    De quels arguments parles-tu ??
    Il n'y a pas d'arguments à passer...!
    Tes chaînes doivent être transformées par ajouts d'espaces devant ou derrière (selon le cas) par la méthode de ton choix (concaténations ou utilisation des instructions Lset et Rset !!!)
    Si tu choisis la concaténation :
    Regarde dans ton aide en ligne :
    La fonction Len
    La fonction Space
    L'opérateur &

    Si tu choisis l'utilisation de Lset et de Rset : ces 2 instructions sont assorties d'exemples dans ton ... aide en ligne !


    Edit : j'ignore la raison pour laquelle tu choisis d'utiliser un fichier txt ainsi "présenté", mais attention : si tu veux que l'alignement visuel soit réel, il te faudra le visualiser (kif-kif pour l'impression) avec une police de caractères à espacement fixe (telle Courier)...

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Re,

    En faite, j'ai besoin d'un fichier de sortie en largeur fixe, car mon logiciel d'intégration ne prend pas le csv... et donc je suis obligé de faire un macro pour en faire un fichier plat mais avec des largeurs fixe, donc oui je vais devoir tester mon fichier à chaque instruction au début...

    Dsl de ne pas tout comprendre, j'ai bien trouvé la fonction Len dans mon aide en ligne sous excel (mais je ne trouve toujours pas l'expression lset et rset.. mais cela va quand même me permettre de mettre des espaces à chaque blanc.

    Merci

  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
    Regarde ce que ferait ceci :

    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
    Private Type item
        Nom As String * 30
        prenom As String * 40
    End Type
     
    Private Sub Command1_Click()
        Dim article As item, saut As item
        saut.Nom = ""
        saut.prenom = vbCrLf
        Open "d:\essai.txt" For Random As #1 Len = Len(article)
          Put #1, , saut
          article.Nom = "DUPONT"
          article.prenom = "Henri"
          Put #1, , article
          Put #1, , saut
          article.Nom = "DURANTEAU"
          article.prenom = "Pierre"
          Put #1, , article
          Put #1, , saut
          article.Nom = "SAUVAGE"
          article.prenom = "Jean-jacques"
          Put #1, , article
       Close #1
    End Sub
    En ouvrant ensuite (bien évidemment) avec la police Courrier ...


    Ceci étant dit : je "renifle" que ce que tu veux en réalité faire est tout autre chose. ... Ne serait-ce pas tout simplement une base de données de type Texte.
    Si c'est celà, il n'y a qu'à dire ! (c'est mille fois plus simple).

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Re,

    Je viens de tester, ok c'est ce genre de resultat mais j'ai x ligne et colonne à traiter, donc je vais mettre une boucle...

    Pour le genre de fichier, (on peut dire que c'est un genre de base de donnée si on considere que c'est des lignes que j'injecte dans un logiciel pour traitement....)

    Si il y a une autre méthode, je suis tout à fait preneur !!


  10. #10
    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
    1) Bien évidemment, qu'il te faudra faire une boucle (ce que j'ai mis n'était là que pour exemple !)
    2) pour ce qui est du reste : une seule question : à quoi destines-tu en fait (et très exactement) ce fichier txt ? Ta réponse mettra en évidence si oui ou non c'est une base de données txt de longeurs fixes qui convient mieux ... C'est cette réponse, que j'attends de toi ...
    A + donc

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Re,

    1)
    2) le fichier txt sert a être intégré dans un logiciel comptable pour alimenter une table avec des noms, matricule et adresses.... --> le logiciel peut être parametré sur les données qui lui sont envoyé (de tel champ à tel champ c'est le nom par exemple), mais il n'integre que des formats à largeur fixe (et une adresse n'est jamais fixe).

    Donc c'est pourquoi je recherche une solution pour créer via Excel --> un fichier txt à largeur fixe, (car je reçoit un fichier excel et rien d'autre).

    En espérant avoir été plus claire...

  12. #12
    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
    Bon ...

    Je ne suis pas certain d'avoir tout compris, mais regarde ce que fait ceci (toi, tu dois faire une boucle, hein...)

    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
    Private Type item
        Nom As String * 20
        prenom As String * 15
    End Type
     
    Private Sub Command1_Click()
        Dim article As item
        Open "d:\essai.txt" For Random As #1 Len = Len(article)
          article.Nom = "DUPONT"
          article.prenom = "Henri"
          Put #1, , article
          article.Nom = "DURANTEAU"
          article.prenom = "Pierre"
          Put #1, , article
          article.Nom = "SAUVAGE"
          article.prenom = "Jean-jacques"
          Put #1, , article
       Close #1
    End Sub
     
    Private Sub Command2_Click()
      Dim article As item
      Open "d:\essai.txt" For Random As #1 Len = Len(article)
      nb = 1
      Do Until EOF(1)
        Get #1, nb, article
          MsgBox "Nom " & article.Nom & vbCrLf & "Prénom :" & article.prenom
        nb = nb + 1
      Loop
      Close #1
    End Sub
    n'oublie pas d'effacer d'abord essai.txt (pour le cas où il existerait déjà, avec d'autres longueurs fixes.
    clique sur command1 pour constituer ta base
    clique sur command2 pour la lire

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    re,

    Super avec une boucle c'est tout à fait cela,

    Juste deux ptite info supp :o)

    Peux tu m'expliqué le debut de code : For Random As #1

    et je voulais savoir comment je pouvais caller à gauche, merci beaucoup en tout cas, cela va me permettre de crée un fichier text tres tres rapidement !!

    et une dernière j'ai des carrés sur mes retours chariots, je n'arrive pas bien à comprendre comment faire !

  14. #14
    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
    Pour l'explication de l'utilisation de Randon, j'en aurais pour des pages !....
    Ouvre ton aide en ligne sur le mot Open et lis tout, y compris les "Voir aussi"...

    Tes "petits carrés" sont des séparateurs de la base de données. (c'est ainsi que travaille une base de données).

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Ok pour Random et son utilisation, mais en faite les pti carré m'embete bien quand même car il ne met pas de retour chariot sans me les mettre...

    y a t il une solution pour faire un retour chariot sans avoir de carré ?
    car il me met autant de carré que de caractère deja crée !

    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
    Private Type item
        Nom As String * 22
        prenom As String * 42
       ab As String * 1
        ac As String * 1
     
    End Type
     
    Private Sub Command1_Click()
        Dim article As item, saut As item
     
        saut.ab = ""
        saut.ac = vbCrLf
     
        Open "d:\essai.txt" For Random As #1 Len = Len(article)
     
          For i = 1 To 3 Step 1
          article.Nom = Range("a" & i)
          article.prenom = Range("b" & i)
          Put #1, , article
          Put #1, , saut
          Next
       Close #1
    End Sub

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    j'ai compris pour les cotes de base de donnée !!
    Mais je n'arrive pas à caller à droite mon resultat, est t'il possible de la faire ?
    Il met d'office les valeurs à gauche ?


    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
    Private Type item
        Nom As String * 20
        prenom As String * 15
        retourligne As String * 1
    End Type
     
    Private Sub Command1_Click()
        Dim article As item, saut As item
        article.retourligne = vbCrLf
     
        Open "d:\essai.txt" For Random As #1 Len = Len(article)
          For i = 1 To 3 Step 1
          article.Nom = Range("a" & i)
          article.prenom = Range("b" & i)
          Put #1, , article
          Next
       Close #1
    End Sub

    Probleme résolu, lol, il suffisait de mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RSet article.Nom = Range("a" & i)

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

Discussions similaires

  1. générer un fichier à largeur fixe
    Par vaness303 dans le forum Excel
    Réponses: 1
    Dernier message: 25/05/2009, 13h19
  2. [PHP 5.0] Convertir Fichier Excel avec php
    Par nbelg27 dans le forum Langage
    Réponses: 11
    Dernier message: 30/12/2008, 12h02
  3. Convertir fichier.RES via la dos
    Par Yondaime69 dans le forum Windows
    Réponses: 0
    Dernier message: 23/12/2008, 17h40
  4. Réponses: 3
    Dernier message: 10/05/2007, 14h12
  5. Convertir fichier Excel en fichier XML
    Par rafiq25 dans le forum C#
    Réponses: 2
    Dernier message: 28/03/2007, 17h12

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