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 :

Export au format TXT avec des "PIPE" en séparateur


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Octobre 2016
    Messages : 20
    Par défaut Export au format TXT avec des "PIPE" en séparateur
    Bonjour,

    J'ai besoin d'exporter mes données d'une feuille excel dans un fichier txt avec des PIPE comme séparateur. J'ai mon code en VBA qui fonctionne correctement à un petit détail près, c'est que je ne souhaite pas avoir de pipe sur la dernière colonne.

    Je sèche complètement, donc si vous avez des idées je suis preneur !

    Merci



    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
        sep = "|"
            With Worksheets("Sortie")
                Set Plage = .Range("A1:V4")
            End With
     
        Open chemin & "\" & nomfichier For Output As #1
     
     
        For Each oL In Plage.Rows
     
            Tmp = ""
     
            For Each oC In oL.Cells
     
            Tmp = Tmp & CStr(oC.Text) & sep
            Next
     
            Print #1, Tmp
     
        Next
     
        Close

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Enlève-le juste avant le Print
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tmp = left(Tmp, len(tmp)-1)
    Print #1, tmp
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re

    change la ligne pour celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Tmp = Tmp & CStr(oC.Text) & iif(oc.column<(plage.column+plage.columns.count-1),"|","")
    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

  4. #4
    Membre averti
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Octobre 2016
    Messages : 20
    Par défaut
    Citation Envoyé par patricktoulon Voir le message

    change la ligne pour celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Tmp = Tmp & CStr(oC.Text) & iif(oc.column<(plage.column+plage.columns.count-1),"|","")

    Super cela fonctionne parfaitement !

    Un grand merci a vous deux

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    J'arrive un peut tard mais bon!
    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
    Const DATAOBJECT_BINDING As String = "new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
    Public Property Let PressePapier(Value)
    With CreateObject(DATAOBJECT_BINDING)
        .SetText Value
        .PutInClipboard
     End With
    End Property
     
    Public Property Get PressePapier()
    With CreateObject(DATAOBJECT_BINDING)
        .GetFromClipboard
        PressePapier = .GetText
    End With
    End Property
    Sub test()
    Plage.copy
    Temp=replace(PressePapier,VbTab,"|")
    End sub

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    jolie robert

    je fait la même chose avec le "htmlfile" et son parent.clipboard


    je l'ai ajouté dans ma contrib a se sujet " et encore une..." comme ca on retrouve le principe du clipboard au même endroit
    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

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Juste une question : quelle est la taille moyenne (en octets) du fichier texte résultant ?

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    c'est vrai jacques c'est une chose a prendre en compte

    dans mes test avec le htmlfile je suis allé jusqu'à 40000 lignes sur 20 colonnes

    si il y a trop avec l'object "htmldocument" on a la possibilité de ne pas passer par une variable string mais directement par le le body innerhtml qui lui va beaucoup plus loin en terme de taille

    puis dans l'object" freefile" :print# .body.innerhtml
    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

  9. #9
    Invité
    Invité(e)
    Par défaut
    rien empêche de faire de pas de x

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for x = 1 to 1048576 step 1000

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    en utilisant   Join   il n'y a pas de séparateur à la fin et sans besoin de boucler sur les colonnes !

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    oui c'est vrai pour le join
    mais cela remet en question l'utilisation du clipboard qui nous donne une structure toute faite par les "VBtaB"

    a boucler sur le texte obtenu autant boucler directement sur les ROWS et utiliser la fonction index pour récupérer la ligne dans un array 1 dim et passer par un join avec le symbole

    bref possibilité y en a à foison
    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

  12. #12
    Invité
    Invité(e)
    Par défaut
    Code A1:AZ1048576 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Set plage = ActiveSheet.UsedRange
    With CreateObject("AdoDb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No;"""
        Debug.Print .Execute("Select * from [" & plage.Parent.Name & "$" & Replace(plage.Address, "$", "") & "]").getstring(, , "|", vbCrLf)
        .Close
    End With
    End Sub

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    tu va t'arrêter oui !!!!!
    j'ai mis ta première proposition dans ma contrib si ca te dérange pas et j'ai même adapter ta forme d'écriture a ma méthode

    ICI
    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

  14. #14
    Invité
    Invité(e)
    Par défaut
    Désolé Patrick!

    oui j'ai vue et je t'en remercie; je t'es dalleur mis +1!

    moiré insuffisante à A1:BI1048576

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    j'ai testé cela chez moi a peine a l'instant
    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
    Public Property Let pressepapier(pressepapier)
        With CreateObject("htmlfile"): pressepapier = .parentWindow.clipboardData.GetData("Text"): End With
    End Property
    '
    Public Property Get pressepapier()
    With CreateObject("htmlfile"): pressepapier = .parentWindow.clipboardData.GetData("Text"): End With
    End Property
    '
    Sub test()
        Set plage = Range("A1:Z65535")
        'plage.Value = "aaaaa"
        plage.Copy
        temp = Replace(pressepapier, vbTab, "|")
        MsgBox temp
    End Sub
    ca match pour la totalité de la feuille en terme de row et 26 colonnes "Z")
    débloque la ligne d'écriture "aaaa" et lance
    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

  16. #16
    Invité
    Invité(e)
    Par défaut
    avec une connexion ADODB ça fonction pour A1:AZ1048576 ou A1:XFD4088

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    non chez moi avec 2007 visiblement j'ai une limite
    avec 1 quart de la feuille je suis déjà trop grand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range("A1", Cells(Rows.Count / 2, Cells.Columns.Count / 2))
    Nom : Capture.JPG
Affichages : 2169
Taille : 152,8 Ko

    par contre avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range("A1:z65530")
    ca marche mais c'est au moins 5 fois plus long
    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

  18. #18
    Invité
    Invité(e)
    Par défaut
    Oui par copié collé, ca me la fait!

    Mais en tirant la poignée de la plage c'est long chiant mais on y arrive!

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    non pas par copiercoller mais avec ta méthode adob connection

    avec l'object data on a une limite si je prends toutes les colonnes
    avec htmlfile ca passe
    avec adob on a aussi une limite
    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

  20. #20
    Invité
    Invité(e)
    Par défaut
    Oui je l'avais noté au poste #16, je vais voir si je peux insérer directement via ado mais je suis celtique en csv!

    ÉDITE:
    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
     
     
    Public Sub ShemaInit(Serveur As String, Fichier As String, Delimited As String)
    Dim fso, NewFichier
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set NewFichier = fso.OpenTextFile(Serveur & "\schema.ini", 2, True)
    NewFichier.Write "[" & Fichier & "]" & vbCrLf & "Format=Delimited(" & Delimited & ")"
    NewFichier.Close
    Set NewFichier = Nothing
    Set fso = Nothing
    End Sub
    Sub test()
    Dim Server As String, Delimited As String, Fichier As String
    Server = "C:\MyRepertoire": Fichier = "toto#CSV": Delimited = "|"
    Dim Plage As Range
    Set Plage = ActiveSheet.UsedRange
    With CreateObject("AdoDb.Connection")
    'ThisWorkbook.FullName
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server & ";Extended Properties=""Text;HDR=NO;"""
        On Error Resume Next: .Execute "Drop table " & Fichier: On Error GoTo 0
        ShemaInit Server, Replace(Fichier, "#", "."), Delimited
        .Execute "Select * INTO  " & Fichier & " from [" & Plage.Parent.Name & "$" & Replace(Plage.Address, "$", "") & "] in '" & Plage.Parent.Parent.FullName & "' 'Excel 12.0;HDR=Yes;'"
        .Close
    End With
    End Sub
    Dernière modification par Invité ; 30/09/2017 à 02h00.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Exporter au format txt des données numériques
    Par muphalgu dans le forum Access
    Réponses: 2
    Dernier message: 23/07/2010, 15h09
  2. Export au format txt : gestion des NULL
    Par guidav dans le forum Access
    Réponses: 3
    Dernier message: 08/08/2006, 11h28
  3. [Format]nombres avec des 0
    Par zozolh2 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 01/06/2004, 08h43

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