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 :

conversion xls vers txt (guillemet et champs vides délimités) [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut conversion xls vers txt (guillemet et champs vides délimités)
    Bonjour à tous,

    J'ai un super fichier que je dois convertir/sauvegarder en format .txt à partir d'Excel.

    Chaque ligne doit contenir exactement 220 caractères, car ce fichier sera utilisé selon un format précis et j'ai donc des "espaces" à la fin de chacune de mes lignes. Cependant, lorsque je sauvegarde mon fichier, j'ai un des deux problèmes suivants :

    #1 si j'utilise FileFormat = xlTextPrinter mon fichier .txt n'aura pas les 220 caractères requis car lors la sauvegarde, mes espaces sont supprimés.

    #2 si j'utilise FileFormat = xlTextMSDOS ou xlTextWindows ou xlUnicodeText, certaines lignes commenceront et finront par des guillemets(")
    La chose que je trouve "étrange", c'est que si je copie le contenu de mon .txt dans la première colonne(format texte) d'un nouveau fichier Excel, les guillemets ne sont pas présent. Je suis tout de même inquiet que lors du chargement du fichier par l'application du client que ces guillemets causent problème...

    Voici la partie de mon code que j'utilise pour sauvegarder mon fichier pour vous donner une piste :
    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
     
        Application.DisplayAlerts = False
     
        cheminF = ActiveWorkbook.Path
        nomf = "\Biens_services_AA_" & Format(Date, "yyyymmdd") & ".txt"
        Sheets("Résultat").Columns("A:A").Copy
        Workbooks.Add 'Ouverture d'un nouveau document pour y copier ma colonne
        Columns("A:A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
     
        xval = 1 'Permet de vérifier si le nom du fichier existe, si oui, trouve le numéro suivant disponible
        Do Until Dir(cheminF & nnomf) = Dir(cheminF & nomf)
            nomf = "\Biens_services_AA_" & Format(Date, "yyyymmdd") & "_" & xval & ".txt"
            xval = xval + 1
            nnomf = "\Biens_services_AA_" & Format(Date, "yyyymmdd") & "_" & xval & ".txt"
        Loop
     
        ActiveWorkbook.SaveAs Filename:= _
            cheminF & nomf, FileFormat _
            :=xlTextPrinter, CreateBackup:=False
        ActiveWindow.Close
        Application.DisplayAlerts = True
    Il existe surement une solution à ce petit problème...
    j'ai confiance en vous

    Je vous remercie de votre aide.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu!!
    bonjour

    un truc tout simple a faire sera d'agrementer une variable string avec tout le contenu desiré et de le recouper par tranche de 120 caracteres


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut mmm heu ?
    Merci pour ton aide,

    mais je ne suis pas tout à fait certain de comprendre.

    Est-ce que tu veux dire que je devrais mettre chacune de mes X lignes de ma colonne(A) dans une variable string et ensuite de la segmenter en en chaînes de 220 caractères ? Je ne sais jamais combien de lignes que j'aurai, mais je crois que ça peut jouer facilement dans les 3000-5000 lignes.

    Ou

    Étant donné je dois "concatener" le contenu de plusieurs cellules pour faire une seule entrée dans ma colonne A, devrais-je à ce moment sauvegarder le tout dans une string?

    ou

    autre ?

    voici le code que j'ai utilisé pour une occurence "o" pour assembler mes infos :
    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
     
    For Each cell In Sheets("Résultat").Range("B1:B" & Lastlig)
        Select Case cell.Value
        Case "5"                           'enregistrement 05
           cell.Offset(0, -1).Value = _
           "=text(RC[1],""00"") & RC[2] &TEXT(RC[3],""aaaammjjhhmmss"")&TEXT(RC[4],REPT("" "",168))"
     
        Case "10"                          'enregistrement 10
            cell.Offset(0, -1).Value = _
            "=RC[1] & RC[2] & TEXT(RC[3],REPT("" "",25))& TEXT(RC[4],REPT("" "",75)) & TEXT(RC[5],REPT("" "",75)) & TEXT(RC[6],""000"") & RC[7] & RC[8] & RC[9] &RC[10]&RC[11]&RC[12]&RC[13]&RC[14]&RC[15]&TEXT(RC[16],REPT("" "",24))"
    'Et ça continue pour encore quelques cases
     End Select
     
    Next
     
        'Copier coller la colonne en format valeur (sans formule)
        With Sheets("Résultat").Columns("A:A")
                .Copy
                .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
                .NumberFormat = "@"
     
     
        End With
    Merci pour le coup de main

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonsoir

    oui c'est ça que je suggérais

    ton but et de transcrire ton sheets dans un fichier txt par ligne de 120 ou 220 caractère donc boucle sur les lignes de ton sheets
    concatène la variable avec les données

    réécris les par tranche de 120 caractères dans le fichier de sortie en format ".text" tout simplement

    et oui ça peu être long avec le nombre de ligne

    mais que veux tu c'est comme ça


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Ok, voici donc ce que j'ai fait :

    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
    Sub boucle_copie()
     
    Dim strCopie As String * 220
     
        Open "C:\Documents and Settings\u3971\Mes documents\fichierText.txt" For Output As #1
        LastRow = Sheets("Résultat").Range("A20000").End(xlUp).Row
     
        For Each cell In Sheets("Résultat").Range("A1:A" & LastRow)
     
            strCopie = cell.Value
            Write #1, strCopie
     
        Next cell
     
        Close #1
     
    End Sub
    Mon seul hic, c'est que chaque ligne du fichier text est entre guillemets...
    Le bon côté de la chose est que c'est constant.
    EX :
    "2063888882010110120991231N 0000000O_______________"
    "236388888199411012099123102400000_________________"
    "2763888881993072920991231024______________________"
    (remplacer les _ par des espaces)

    Si tu as une idée pour que cest guillemets n'apparaissent pas, fais-moi signe.

    Sinon je vais marquer le post comme résolu.

    Merci pour tout !

    C'est certain que je peux faire un Ctrl-h pour remplacer les " par des vides...

    Mais je n'aime pas travailler manuellement quand je peux l'éviter...

    C'est pour cela que le VBA existe, non ?

    Salutation!

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Pour éviter ces guillemets,
    remplace Write #1, strCopie
    par Print #1, strCopie
    Cordialement

    Docmarti.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Super
    Avoir su que c'était aussi simple que cela.

    Je viens de faire le test et ça fonctionne !

    Je vais en profiter pour aller lire sur cette propriété pour comprendre la différences !

    Merci à vous deux pour votre aide et support !

    Bonne journée

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

Discussions similaires

  1. Réponses: 26
    Dernier message: 03/02/2009, 14h06
  2. Probleme de conversion xls en txt
    Par Ckelito dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/02/2008, 10h36
  3. Automatiser conversion XLS vers PDF
    Par DevPerl dans le forum Langage
    Réponses: 3
    Dernier message: 13/09/2007, 21h08
  4. [XSLT] Conversion xml vers txt ou mdb etc
    Par narodar dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/06/2006, 14h31
  5. [VBA-E] .XLS vers .TXT (enregistrement fixe)
    Par turbo74 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 17/03/2006, 15h45

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