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 :

[VBA-E] .XLS vers .TXT (enregistrement fixe)


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [VBA-E] .XLS vers .TXT (enregistrement fixe)
    Bonjour,

    J'ai un tableau d'environ 60 colonnes et n lignes.
    Chaque ligne doit correspondre à un enregistrement en TXT.

    La forme de cette enregistrement est composé de champs :
    nom 60 car
    prénom 25 car
    age 2 car
    ...

    Les séparteurs de ces champs sont l'espace et chaque champ doit toujours faire la même longueur quelque soit sont contenu..

    Quel méthode me préconisez vous pour générer ce fichier TXT ?

    Turbo74

    Merci d'avance

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu cherches dans la FAQ ou tu fais une recherche sur le forum, ce sujet a été x fois traité.

    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
    Sub CréerFichierTxt()
    Dim i, j, DernièreLigne, DernièreColonne
        Application.ScreenUpdating = False
        ActiveSheet.Range("A1").Select
        Selection.CurrentRegion.Select
        Set tbl = ActiveCell.CurrentRegion
        DernièreLigne = tbl.Rows.Count
        DernièreColonne = tbl.Columns.Count
        Cells(1, 1).Select
        Open "p:\InserComplété.txt" For Output As #1
        For i = 1 To DernièreLigne
            For j = 1 To DernièreColonne - 1  '**** Si tu veux mettre 1 donnée par ligne, supprime -1  et ****
                Print #1, Cells(i, j).Formula + ";"; '**** supprime ce point virgule et ****
            Next j
            Print #1, Cells(i, j + 1).Formula ' ***** supprime cette ligne **** fin si...
        Next i
        Close #1
    End Sub
    Reste plus qu'à adapter

    A+

    NB - Tu as de la veine que j'avais ça pas loin...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci de m'avoir répondu.

    Le prb ne vient pas du fait de lire, les cellules de ma feuille et de les enregistrer, le prb c'est que le fichier créé à un masque particulier (voir description + haut). Chq enreg doit se composer de plusieurs informations (renseignées ou non) mais ces dernières doivent toujours avoir la même longueur.

    Merci par avance de vos précisions.

    A+

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tu peu créer une fonction qui rajoute des espaces pour formater ta colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function MfNb(st As String, iNb As Integer) As String
     MfNb = Left(st & Space(iNb), iNb)
    End Function
    de plus tu peu utiliser un tableau , pour stocker tes "largeurs" de colonnes...

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tiens un peu de code ... , j'utilise la premiére ligne de la feuille courante pour définir la "largeur" des colonnes, cette premiére ligne n'est pas stocker dans fichier texte, seule les lignes suivantes y sont...

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub LanceSauveTexte()
     Dim stFichier As String
     stFichier = Application.GetSaveAsFilename(ActiveSheet.Name & ".txt")
     If stFichier = "" Then Exit Sub 'Abandon opérateur
     If Dir(stFichier) <> "" Then
       If MsgBox("Le fichier : " & vbCrLf & stFichier _
        & " Existe déjà voulez-vous l'écraser ?", _
        vbOKCancel, "Fichier existant") <> vbOK Then Exit Sub
     End If
      SauveTexte stFichier
     
    End Sub
     
    Function MfNb(st As String, iNb As Integer) As String
     MfNb = Left(st & Space(iNb), iNb)
    End Function
    '
    ' Procedure d'enregistrement dans fichier texte ..
    '
    Private Sub SauveTexte(stFichier As String)
    Dim Lc() As Integer 'tableau largeur colonne
    Dim r As Range ' Zone à sauver ...
    Dim lg As Range ' Ligne de la Zone
    Dim iC As Integer
    Dim st As String
    Dim f
    ' on sauve la zone "Contigu" à la cellule A1...( équivalent à Ctrl * en se positionnat sur A1)
    Set r = ActiveSheet.Cells(1, 1).CurrentRegion
    f = FreeFile
    Open stFichier For Output As #f
     
     
    For Each lg In r.Rows
     st = ""
     For iC = 1 To r.Columns.Count
       If lg.Row = 1 Then
        'On mémorise la Premiére ligne pour définir largeurs des colonnes..
         ReDim Preserve Lc(iC)
         Lc(iC) = Len(lg.Cells(iC))
         Else
         st = st & MfNb(lg.Cells(iC), Lc(iC))
       End If
     Next
     If st <> "" Then 'Ecriture de la ligne
      Print #f, st
     End If
    Next
    Close f
    End Sub

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Et encore merci de vos réponses .

    Toutefois, cela ne régle pas mon problème.

    Voici à nouveaux quelques précisions qui j'espère vous permettrons de m'aider.

    J'ai, donc, un tableau EXCEL avec des valeurs (qui proviennent de +ieurs tableaux). Ces cellules ont un format (longueur, nature ....) qui n'a aucune importance pour moi ........

    Par contre, je dois générer un fichier TXT à partir de ce tableau MAIS avec un enregistrement toujours identique

    (ligne 1) NOM (8car) + 1espace + PRENOM (8car) + 1espace ......
    (ligne 2) NOM (8car) + 1espace + PRENOM (8car) + 1espace ......
    ....

    Exemple : je peux avoir dans mon tableau excel dans la celulle où se trouve le nom une valeur supérieur à 10 caractères (ex : DEVELOPPEZ) mais lorsque je vais générer l'enregistrement TXT, cette zone ne devra pas se composer de plus de 8 caractères (ex : DEVELOPP).

    Merci d'avance de vos réponses.

    A+

    Turbo74

    NB : j'espère que je suis pas trop confus dans mes explications

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    as-tu essayer de comprendre le code que je t'ai poster ....

    - la fonction MfNb te permet de formater en nombre de carcatéres la chaine donnée en paramétre, par rajout d'espace ou suppression de carcatéres...

    - Modifie l'initialisation du tableau lc... en y plaçant le nombre de caractéres par colonne...

  8. #8
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Salut, Turbo.
    Franchement, bbil t'a maché le travail.
    Il ne te reste presque rien à faire, alors modifie un tout petit peu son code toi-même, et tu auras le fichier texte que tu veux en sortie.

  9. #9
    Membre habitué Avatar de medbouh
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 171
    Points
    171
    Par défaut
    je pense que le code proposé par BBIL Répond suffisament à ton besoin il faut juste faire des modif
    avant de poste pensez à c'est plus constructif.

    n'oublie pas d'utilise le bouton

    si vous trouvez la solution vous meme n'oublie pas de l'indiquer.

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Le problème est que le séparateur choisi est l'espace or le code de bbil perturbe visiblement turbo74
    Si c'est ça, remplace les espaces ajoutés par autre chose, ou mieux, utilise un autre séparateur (virgule, point virgule, etc...)

    A+

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Salut bbil,

    Merci beaucoup pour ton explication. C'est presque parfait.

    Je suis hélas pas de ton niveau et le souci provient maintenant de la restranscription des valeurs :

    - les numériques. Il me faut les cadrer àdroite en affichant 2 décimales.

    Ne m'en veux pas de n'être pas à ton niveau .

    Merci encore de tes réponses.

    A+

    Turbo 74

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par turbo74
    Salut bbil,
    - les numériques. Il me faut les cadrer àdroite en affichant 2 décimales.
    Turbo 74
    Voir instruction format... quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(MonNumerique,"#.00")

Discussions similaires

  1. [XL-2003] conversion xls vers txt (guillemet et champs vides délimités)
    Par projekx dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/05/2011, 16h45
  2. xls vers txt en largeur fixe
    Par manuboy dans le forum Excel
    Réponses: 1
    Dernier message: 17/10/2010, 17h27
  3. Enregistrement feuille xls sous txt
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 25/02/2007, 14h32
  4. [VBA-E] XLS vers PDF
    Par Fosko dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/07/2006, 15h53
  5. [VBA EXCEL] export vers un fihcier txt
    Par jarod_bx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2006, 20h27

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