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 :

exportation excel vers txt


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut exportation excel vers txt
    Bonjour à toutes et à tous,

    j'utilise un soft propriétaire dans ma société et je dois lui envoyer des fichiers .txt formatés par colonnes. Chaque 1er caractère de chaque colonne doit commencer à une position précise. (ex : le 1 caratère de la colonne 1 doit commencer à la 20eme position donc, il faut insérer des espaces).
    Je connais ces positions et le fichier brut de départ est en excel.
    J'ai donc un fichier excel avec des colonnes, et j'ai une routine qui insère le nombre d'espaces souhaités par colonnes.
    Le soucis est quand j'enregistre en .txt, il ne respecte pas les colonnes faites.
    Par exemple les 2 premières colonnes sont respectées mais après c'est le bordel !
    Comment dois-je m'y prendre ?

    Merci.

  2. #2
    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 040
    Points
    20 040
    Par défaut
    bonjour et bienvenue sur le forum..

    ceci étant fait... montre nous une peu de ton code, histoire de voir d'ou viens ton bordel..

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut export
    Salut,
    en fait ma routine ne pren pas encore en compte l'export.
    Je le fait pour l'instant à la main (fichier, enregistrer sous, .txt) et rien que ç a sa foire alors...
    ceci dit je vous envoi mon fichier.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut oups....
    apparement je ne peux pas envoyer mon fichier excel, alors j'écris le code :

    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
    50
     Public nbcol As Integer
    Public nbligne As Integer
     
    Sub formater_colonnes()
     
    Application.ScreenUpdating = False
     
    'Effacer les espaces avant et après chaque chaîne
    For Each cellule In ActiveSheet.UsedRange
    cellule.Value = Trim(cellule.Value)
    Next
     
    Cells(1, 1).Select
    'format texte
    Cells.Select
    Selection.NumberFormat = "@"
    Cells(1, 1).Select
     
    nbcol = WorksheetFunction.CountA(Rows(1))
    nbligne = WorksheetFunction.CountA(Columns(1))
    Dim val
    val = Array(, 28, 37, 46, 55, 64, 73, 82, 91, 100, 109, 118, 127, 136, 145, _
                 154, 163, 172, 181, 190, 199, 208, 217, 226, 235)
    Dim espace As String
    Dim temp_valeur As String
    Dim new_valeur As String
    Dim nb_espace As Integer
    Dim test As String
     
    For j = 1 To nbcol - 1
        Cells(1, j + 1).Select
        For i = 1 To nbligne
        nb_espace = val(j)
        espace = String(nb_espace, " ")    ' Renvoie x espaces, x etant = val.
        temp_valeur = ActiveCell.Value
        test = espace + temp_valeur
     
        ActiveCell.Value = espace + temp_valeur
        ActiveCell.Offset(1, 0).Select
        Next i
     
    Next j
     
    'ajuster
    Cells.Select
    Range("B1").Activate
    Cells.EntireColumn.AutoFit
    Cells(1, 1).Select
     
    End Sub

  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 040
    Points
    20 040
    Par défaut
    tu rajoute donc les espaces dans feuilles de calcul excel..?

    j'ai pas tout compris sur l'allure de ton fichier excel...!, il y as t'il plusieurs colonnes..?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ben en fait, on me donne un fichier excel avec un nombre N de colonnes.
    Celles-ci sont toutes remplies de données numériques.
    Ont me demande de créer un fichier texte avec les N colonnes mais on m'impose :
    le 1er caratere de la 2eme colonne doit commencer à la 28eme position.
    e 1er caratere de la 3eme colonne doit commencer à la 37eme position.
    etc.
    Quand tu ouvre le notepad et que tu met ton curseur à un endroit, il te dit a quelles position tu es.
    col1, col2,col3....
    Et en fait, par exemple, le 1caratere de la 2eme colonne de mon fichier exel doit se trouver en col28 de mon fichier txt.
    C'est super chiant comme truc !

  7. #7
    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
    Ca te convient un truc comme ça:
    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
    Sub Exporter()
     
      Dim aPos As Variant
      Dim rRange As Range
      Dim rCell As Range
      Dim f As Integer
      Dim i As Integer
      Dim sFileName As String
      Dim sBuffer As String
     
      sFileName = "Export.txt"
      Application.ScreenUpdating = False
      'Effacer les espaces avant et après chaque chaîne
      For Each rCell In ActiveSheet.UsedRange
        rCell.Value = Trim(rCell.Value)
      Next rCell
     
      f = FreeFile
      Open ThisWorkbook.Path & "\" & sFileName For Output As #f
     
      aPos = Array(1, 28, 37, 46, 55, 64, 73, 82, 91, 100, 109, 118, 127, 136, _
                   145, 154, 163, 172, 181, 190, 199, 208, 217, 226, 235)
     
      Set rRange = Range([A1], Cells(Cells.SpecialCells(xlLastCell).Row, 1))
     
      For Each rCell In rRange
        sBuffer = ""
        For i = 0 To UBound(aPos)
          If i = UBound(aPos) Then
            sBuffer = sBuffer & rCell.Offset(0, i)
          Else
            sBuffer = sBuffer & rCell.Offset(0, i) & _
                      Space(aPos(i + 1) - aPos(i) - Len(rCell.Offset(0, i)))
          End If
        Next i
        Print #f, sBuffer
      Next rCell
     
      Close #f
     
    End Sub
    ???

  8. #8
    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
    A ta place, je créerais directement un fichier Texte
    Apparemment, tu dois ajouter 9 espaces pour chaque colonne
    Ton nombre de colonnes "a l'air" d'être fixe
    Tes données n'ont sans doute pas la même longueur dans les différentes colonnes
    Donc, je reconstituerais le mot constituant une ligne Excel
    9 caractères + Longueur données col1 + 9 caractères + Longueur données col1 + 9 caractères + Longueur données col1 + etc

    Pour le principe, tu peux faire ça
    'Ouverture du fichier texte
    - une 1ère boucle sur ton nombre de lignes (tant que la cellule de la colonne de référence <> "")
    Tu imbriques
    - une seconde boucle sur le nombre de colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    NoLigne = 1 'tu fixes la première ligne de lecture dans Excel
    NoCol = 1 'tu fixes la colonne de référence
    NbrEspaces = 19
    Do while trim(Cells(NoLigne, NoCol).value) <> ""
         For i = 1 to Ubound(aPos)
              NbrEspaces = NbrEspaces + 9
              LaLigne = LaLigne + String(NbrEspaces, chr(32)) + Cells(NoLigne, i).value)
         Next
         'Ecriture de la ligne dans le fichier text
         NoLigne = NoLigne + 1
    loop
    'Fermeture du fichier texte
    Tu peux bien sûr utiliser Range([A1], Cells(Cells.SpecialCells(xlLastCell).Row, 1)) si tu as des cellules vides dans ta colonne de référence

    Maintenant je ne comprends pas une chose : Si tes données n'ont pas une longueur fixe, elles ne seront jamais alignées dans le txt, même en police "Courrier"
    Tu dis

  9. #9
    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
    Oh, ousk,

    Elle te plait pas ma soluce???

  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
    Hello Alain,
    Mais si elle "doit" être bien, ta soluce... J'étais simplement parti pour écrire directement dans un txt et n'ai pas envisagé le formatage des données dans Excel (on peut supposer qu'il souhaite conserver son fichier Excel en état... à quoi tu répondras "il est pas obligé de l'enregistrer après l'avoir enregistré en format texte", à quoi je te répondrai... mais sûr que ta solution est ...
    ...
    ...
    différente de la mienne

  11. #11
    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
    Ben, c'est exactement ce que je fais aussi...

    Je n'ai gardé que "son" Trim dans les cellules car ça ne peut pas faire de tort.

    Je trouvais l'idée de l'array, pour définir les positions, intéressante.
    J'introduis aussi la notion de range qui me paraît plus "propre" qu'une boucle While.

  12. #12
    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
    T'as tout raison ! J'avais pas utilisé l'ascenseur et n'avais vu que la moitié de ton code
    Depuis le temps, tu devrais tout de même savoir que je prends les escaliers
    En outre, je passais là par hasard vu que j'ai pas beaucoup de temps. Mais j'ai pas résisté quand j'ai vu qu'il s'agissait d'un problème de formatage de données : c'est par là que j'ai commencé en 84 pour des transmissions par modem et rs232... Nostalgie quand tu nous tient
    Ceci étant, et comme actaruss n'a pas l'air au courant de nos discussions intéressantes, on peut continuer à bavarder tranquillement sur ce post
    A+

Discussions similaires

  1. [XL-2007] Export excel vers txt - Ajouter des décimales aux nombres entiers
    Par thom75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/04/2010, 19h11
  2. Export tableau Excel vers txt
    Par TheRealMike dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/05/2009, 08h53
  3. Problème exportation excel vers la racine
    Par bogsy15 dans le forum C++Builder
    Réponses: 1
    Dernier message: 03/05/2007, 14h59
  4. [VBA-Word] Exportation Excel vers Word
    Par le_sonic dans le forum VBA Word
    Réponses: 6
    Dernier message: 20/12/2006, 17h18
  5. extraction particulière d'excel vers txt
    Par firebomber dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2006, 19h56

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