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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    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
    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 : 241
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 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
    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 actif
    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
    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 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
    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 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    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 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 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

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

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