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 :

Imprimé le résultats d'une colonne dans un fichier CSV [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Points : 12
    Points
    12
    Par défaut Imprimé le résultats d'une colonne dans un fichier CSV
    Bonjour tout le monde,

    J'ai un résultat qui s'affiche dans la colonne D2 jusqu'à D & DerniereLigne

    Nom : Capture.jpg
Affichages : 205
Taille : 25,4 Ko

    J'aimerais copié le résultat de cette colonne dans un nouveau fichier CSV

    Ce qui est important ici, c'est que chacune des entrées doit avoir un LF (pour Line Feed) à la fin !

    Voici mon 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
    Option Explicit
    Option Private Module
    Sub Create_Clean_Doublons_File_csv()
      Dim fichier_final As String, DataLine As String, NameJourCour As String, _
          DayTemp As String, Ext As String, JrCourant As String
      Dim x1 As Long
      Dim Plage As Object
      Dim DerniereLigne As Integer
      Ext = ".csv"
      DayTemp = Now()
      NameJourCour = "r" & Format(DayTemp, "ddmmyy") & Ext
     
      x1 = FreeFile 'La fonction FreeFile sert à créer un descripteur de fichier libre et valide. Ce descripteur est passé comme paramètre à l'instruction Open, qui ouvre le fichier
      fichier_final = RepRet & NameJourCour 'Le nom du fichier où doit être compiler toutes les données
      ActiveSheet.Range("$D$1:$D$300").RemoveDuplicates Columns:=1, Header:=xlYes 'Filtrage et suppression des doublons de la colonne D
      DerniereLigne = Range("D" & Rows.Count).End(xlUp).Row  'Passez le curseur sur dernièreLigne pour en lire la valeur
      DerniereLigne = DerniereLigne - 1
     
      Open fichier_final For Output As #x1
     
      Set Plage = ActiveSheet.Range("D2:D" & DerniereLigne)
      Plage.Copy
      DataLine = Plage.Copy
     
      If Len(DataLine) > 0 Then
            Print #x1, DataLine;    'On inscrit la ligne dans le fichier_final si elle contient quelque chose et on ne veut pas une ligne vide entre chaque fichier avec l'ajout du ; après DataLine
       End If
       Close #x1   'Fermeture du fichier en input afin de passer au suivant s'il y a
    End Sub

    Jusqu'à maintenant la chose chose qui fait, c'est de mettre la valeur "vrai" dans le fichier au lieu du résultat de D2 à D6 dans ce cas-ci.

    Il me manque la dernière touche finale..

    Merci 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 re
    bonsoir
    ben en meme temps c'est normal
    regarde ce que tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Plage.Copy
      DataLine = Plage.Copy'en gros tu dis dataline=action de copier
      If Len(DataLine) > 0 Then
            Print #x1, DataLine; 'ben ici il te met vrai et c'est vrai car dataline contient pas le texte de tes cellule mais le test de copie qui est vrai puisque rien n'empeche la copie     
      End If
       Close #x1   'Fermeture du fichier en input afin de passer au suivant s'il y a


    tout a revoir c'est pas comme ca que l'on copie en texte une serie de cellules il te faut utiliser le clipboard par un dataobject ou object htmldocument en memoire pour acceder au clipboard

    sinon boucle sur cellules niveau debutant
    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
    Membre à l'essai
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Points : 12
    Points
    12
    Par défaut Re:
    Bonjour Patrick
    Moi qui pensais ne pas être loin du résultat...

    Je vais tenter de voir pour le clipboard par un dataobject ou object html document en memoire ..
    Mais à la base, je connais pas cela !

    En ce qui concerne de boucler sur cellules, je sais ne sais pas trop comment envoyer cela ds un fichier..
    Encore là, je vais regarder.

    Par contre, j'ai vu que ce code était utilisé en dessous du Plage.Copy et ça donnait des résultats:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Workbooks.Add
        ActiveSheet.Paste
        Application.CutCopyMode = False
        ActiveWorkbook.SaveAs Filename:=NomEtCheminFichier, FileFormat:=xlCSV, CreateBackup:=False
        ActiveWindow.Close
    Par contre, cela ne mets pas de LF (Line Feed) mais bien un CR (Carriage return) dans le fichier et je n'aime pas la façon qu'il le sauvegarde non plus.

  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
    re
    je sais un linefeed c'est un saut de ligne alors ma fois je vois pas trop ce que tu veux me dire
    en attenndant teste ca pour ta colonne "D" je remplace les saut de ligne par un "$" remplace par ce que tu veux
    exemple vite fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Set plage = Range("D2", Cells(Rows.Count, "D").End(xlUp))
    plage.Copy
    With CreateObject("htmlfile"): texte = .parentwindow.clipboarddata.GetData("text"): End With
    MsgBox Replace(texte, vbCrLf, "$")
    End Sub
    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
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour à tous,

    moi je reste basique :-) Ecriture directe dans un fichier texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub csv()
        Dim datas, lig As Long
        Dim numfich As Integer, i As Long
        numfich = FreeFile
        Open "D:\tmp\test.csv" For Output As #numfich
        datas = [D2:D6].Value
        For lig = 1 To UBound(datas)
            If datas(lig, 1) <> "" Then Print #numfich, datas(lig, 1) & vbLf;
        Next lig
        Close #numfich
    End Sub
    le 'truc' est d'écrire le LF et de bloquer le CRLF avec le ; (demande d'écrire la suite sans saut de ligne)
    eric

  6. #6
    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
    oui eriiic c'est vrai vu la taille des données un tableau mais sans boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub csv()
        Dim datas, lig As Long
        Dim numfich As Integer, i As Long
        numfich = FreeFile
        Open "C:\Users\polux\Desktop\test.csv" For Output As #numfich
        Print #numfich, Join(Application.Transpose([D2:D6].Value), vbLf)
        Close #numfich
    End Sub
    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
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    sans boucle peut-être, mais il ne veut pas des cellules vides, et il reste le CRLF final :
    Nom : 2018-07-14_09-11-08.png
Affichages : 112
Taille : 8,4 Ko
    Il faudrait ajouter des Replace()
    eric

  8. #8
    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
    Bonjour eriiic
    c'est quoi ces cellules vides? je pige pas la d'ou elles viennent
    tu m'interesse la

    le dernier saut de ligne il se fait tout seul et avec ta boucle il y est aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub csv()
        Dim datas, lig As Long
        Dim numfich As Integer, i As Long
        numfich = FreeFile
        Open "C:\Users\polux\Desktop\test.csv" For Output As #numfich
        Print #numfich, Join(Application.Transpose([D2:D6].Value), vbLf)    '& vbLf;
        'OU!!!
        'pour supprimer les cellules vides
        'Print #numfich, Replace(Application.Trim(Join(Application.Transpose([D2:D6].Value), " ")), " ", vbLf)
         Close #numfich
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub csveriic()
        Dim datas, lig As Long
        Dim numfich As Integer, i As Long
        numfich = FreeFile
        Open "C:\Users\polux\Desktop\test.csv" For Output As #numfich
        datas = [D2:D6].Value
        For lig = 1 To UBound(datas)
            If datas(lig, 1) <> "" Then Print #numfich, datas(lig, 1) & vbLf; 'dans ton exemple le dernier saut de ligne y est aussi
        Next lig
        Close #numfich
    End Sub
    dans le mien les vblf sont entre deux par le join et replace il n'y en a pas a la fin ;application.trim pour faire sauter les lignes vides
    dans le tiens tu en met un en fin de ligne a chaque tours
    mais qu'importe que tu en mette un ou pas il y sera quand meme a la fin
    Nom : demo.gif
Affichages : 127
Taille : 61,5 Ko
    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
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Rassure-toi, elle vient de ce que c'est moi qui l'ai vidée :-)
    regarde les commentaires dans son code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      If Len(DataLine) > 0 Then
            Print #x1, DataLine;    'On inscrit la ligne dans le fichier_final si elle contient quelque chose et on ne veut pas une ligne vide entre chaque fichier avec l'ajout du ; après DataLine

  10. #10
    barpasc
    Invité(e)
    Par défaut juste par curiosité
    J'ai un niveau intermédiaire en vba mais je me souviens avoir eu des soucis avec l'enregistrement en csv via l'ide vba avec la méthode saveas et le paramètre xlCSV

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveWorkbook.SaveAs Filename:=NomEtCheminFichier, FileFormat:=xlCSV, CreateBackup:=False
    Est-ce que ça fonctionne bien? Vous ne vous retrouvez pas avec des "," au lieu des ";" ?

    Pour quelque chose comme ça, j'enregistrai les données utiles dans une feuille et si pour des manips sur une plage de données avec l'objet range, je concatène un ";" et j'enregistre la feuille au format texte. Il reste à modifier l'extension avec le csv, peut être fait avec filesystemobject je crois.

    En Python, ça serait moins long à faire et surtout fiable du fait que c'est indépendant de l'OS et qu'il n'y a pas une coexistence qui peut tout faire planter selon la configuation hôte entre le système régional US par défaut dans l'ide de vba qui n'a pas connu de mise à jour depuis 1994 je crois et l'application feuille de calcul Excel qui connait des mises à jour fréquentes.

    Si Python n'est pas installé, Apache Office peut également très bien gérer cette situation, un enregistrement en csv sera un csv ";" quoiqu'il arrive. De plus, les valeurs ne seront pas implicitement converties de texte à nombre par exemple, code postal 01000 à 1000 avec vba saveas...

  11. #11
    Membre à l'essai
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Points : 12
    Points
    12
    Par défaut Re:
    Bonjour Patrick et Ériiic :-)

    Merci pour vos réponses et surtout votre aide. C'est très apprécié !

    J'ai regardé et testé chacune de vos solutions. Mais ne connaissant la valeur finale de D2 à D (?),
    j'hésite à mettre cela dans une variable mémoire si je comprend bien la solution de Patrick.
    Donc, j'irais pour la solution d'Ériiic qui écrit au fur et à mesure dans le fichier en l'adaptant ainsi:

    Par contre, j'ai modifié les [] par un Range puisque la dernière ligne est variable d'une journée à l'autre

    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
    Option Explicit
    Option Private Module
    Sub Create_Clean_Doublons_File_csv()
     
      Dim DataLine, lTableau As Long
      Dim NameJourCour As String, DayTemp As String, Ext As String, JrCourant As String, fichier_final As String
      Dim x1 As Long
      Dim DerniereLigne As Integer
     
      ActiveSheet.Range("D1:D300").RemoveDuplicates Columns:=1, Header:=xlYes
      DerniereLigne = Range("D" & Rows.Count).End(xlUp).Row  'Passez le curseur sur dernièreLigne pour en lire la valeur
      DerniereLigne = DerniereLigne - 1
      Ext = ".csv"
      DayTemp = Now()
      NameJourCour = "r" & Format(DayTemp, "ddmmyy") & Ext
      x1 = FreeFile 'La fonction FreeFile sert à créer un descripteur de fichier libre et valide. Ce descripteur est passé comme paramètre à l'instruction Open, qui ouvre le fichier
     
      fichier_final = RepRet & NameJourCour 'Le nom du fichier où doit être compiler toutes l
      Open fichier_final For Output As #x1
      DataLine = Range("D2:D" & DerniereLigne).Value
     
      For lTableau = 1 To UBound(DataLine)    'UBound Renvoie l'indice le plus élevé disponible pour la dimension indiquée
        If DataLine(lTableau, 1) <> "" Then Print #x1, DataLine(lTableau, 1) & vbLf;
      Next lTableau
      Close #x1
    End Sub
    Merci encore pour votre aide !!!

  12. #12
    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
    re
    ben non tu n'a pas compris
    moi aussi je m'arrete a la derniere ligne utilisée de "D"
    tu pense bien que je vais pas te faire un joint sur le rows.count complet ca serait absurde
    j'ai juste mis comme tu l'a indique au depart a savoir la limite (rows6)
    sinon c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("D2",cells(rows.count,"D").end(xlup))
    a la place de
    c'est evident
    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

  13. #13
    Membre à l'essai
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 48
    Points : 12
    Points
    12
    Par défaut Re:
    Salut Patrick..
    Mais est-ce que je load cela en mémoire ? Si oui, est-ce qu'il y a un risque d'en manquer ?

    Merci à toi !

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Patrick tu as raté le post #9. Il ne veut pas des cellules vides.
    eric

  15. #15
    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 eriiic
    j'ai raté rien du tout post#8
    je repete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Print #numfich, Join(Application.Transpose([D2:D6].Value), vbLf)    '& vbLf;
        'OU!!!
        'pour supprimer les cellules vides
        'Print #numfich, Replace(Application.Trim(Join(Application.Transpose([D2:D6].Value), " ")), " ", vbLf)
    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
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Je pense qu'il doit rester le CRLF final...

  17. #17
    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
    c'est ce que j'ai dis plus haut et avec ta methode aussi je t'ai mis une capture animée
    tu n'y peut absolument rien il est generé tout seul
    si tu le veux pas, la seule solution c'est de passer par adobstream ,je chercherais l'archive demain
    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
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    désolé, pas de CRLF avec ma réponse.
    J'ai même expliqué comment le faire, seulement tu prends rarement le temps de lire.
    eric

  19. #19
    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
    Bonjour eriiic
    ben désolé eriiic j'ai testé ton code avec le ";" et non ca marche pas le dernier saut de ligne y est toujours a la fin
    et je te l'ai montré dans la capture capture du #post8
    c'est toi qui ne prends pas le temps de lire!!!!
    alors je ne sais pas si c'est un crLlf ou chr10 ou 13 ou je ne sais quoi mais il y est ca c'est sur!!! exactement de la meme maniere qu'avec le mien de code et je dis bien exactement !

    c'est simple ouvre ton resultat et pointe avec la souris sur la ligne ,clique gauche le carret se positionne ou tu a cliqué
    joue avec la touche fleche bas si tu n'a pas de saut de ligne tu ne doit pas pourvoir bouger
    le carrret se positionne bien en dessous ta ligne il y a bien un saut

    mais comme je te l'ai dis tu n'y peux absolument rien avec open for il te faut adobstream et encore j'en suis pas sur !! je me souviens plus tres bien il y avait quelque chose a faire avec le bom
    je suis certain que si je remet notpad++ je vais le retrouver ton saut
    c'est un sujet qui date et a ce jour je n'ai jamais trouvé de code capable de l'enlever sans passer par autre que open for

    edit:
    regarde le resultat de se qui est ecrit dans le debug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub csv()
            Debug.Print Replace(Application.Trim(Join(Application.Transpose([D2:D6].Value), " ")), " ", "|vbLf|") & "  patrick"
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub csveriic()
          datas = [D2:D6].Value
        For lig = 1 To UBound(datas)
            If datas(lig, 1) <> "" Then texte = texte & datas(lig, 1) & "|vbLf;|" 'dans ton exemple le dernier saut de ligne y est aussi
        Next lig
       Debug.Print texte & "  eriiic"
    End Sub
    resultat
    abcd|vbLf|efgh|vbLf|ijkl|vbLf|mnop|vbLf|qrst patrick
    abcd|vbLf;|efgh|vbLf;|ijkl|vbLf;|mnop|vbLf;|qrst|vbLf;| eriiic
    dailleur fait le meme test du carret dans le debug tu verra que le saut de ligne se créé tout seul
    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
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour patrick :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print texte & "  eriiic"
    Tel que tu l'écris oui, bien sûr. Seulement ce n'est pas ce que j'ai mis dans le Print #.
    Une petite différence qui fait toute la différence.

    Le seul moyen incontestable que je connaisse pour contrôler un fichier est de le lire avec un éditeur hexa.
    Mon résultat :
    Nom : 2018-07-15_12-13-14.png
Affichages : 104
Taille : 5,0 Ko
    tu vois bien qu'il se termine par LF (0A) et non CRLF (0D 0A), et ce avec un simple Print
    Comme déjà dit, j'explique dans ma réponse comment il faut faire. C'est aussi dans l'aide de Print #.
    eric

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

Discussions similaires

  1. parcourir les éléments d'une colonne dans un fichier csv
    Par zeinab ali dans le forum Général Python
    Réponses: 9
    Dernier message: 05/12/2016, 22h10
  2. Ajout d'une colonne dans un fichier csv
    Par sorilazer dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 12/11/2012, 18h08
  3. Réponses: 1
    Dernier message: 18/04/2008, 10h15
  4. Réponses: 0
    Dernier message: 17/04/2008, 00h02
  5. Réponses: 2
    Dernier message: 07/04/2008, 16h37

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