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 :

.xls vers .csv ou . txt


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut .xls vers .csv ou . txt
    SAlut
    Est ce qu'il est possible depuis un fichier excel de créer un fichier .txt ou .csv ne reprenant qu'une partie de ce fichier excel
    enfait dans mon fichier excel, j'ai une entête et dessous un tableau qui peut étre plus ou moins long et je ne voudrais mettre dans mon fichier .txt ou . csv que les données du tableau
    Quelqu'un aurait-il un code permettant de faire ce genre de manip???
    Merci
    Voila une partie de mon code qui me permet d'enregistrer mon fichier excel entier en .csv (par contre lorsque je veu ouvrir ce .csv , je n'arrive pas à le voir avec des ; il me l'ouvre au format excel j'ai l'impression que ça ne change que l'extension???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Dir("C:\TEMP\", vbDirectory) <> "" Then
            'enregistrement de la FDM à envoyer par FTP
            are = Left(Worksheets(1).Range("L2"), 3)
            fdm1 = "C:\TEMP\" & Range("L2") & ".CSV"
            ThisWorkbook.SaveAs (fdm1)

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour :

    Tiens voila par exemple comment créer un .csv des lignes sélectionnées :

    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
    '
    ' Fonction d'export en Csv de la sélection
    '
    Private Sub ExporteCSV()
     Dim stF As String
     Dim c As Range
     Dim rL As Range
     Dim iC As Integer 'Nombre de colone déterminé par 1° ligne sélectionné
     Dim i As Integer
     Dim f As Integer
      stF = Application.GetSaveAsFilename
      If stF <> "Faux" Then
        f = FreeFile
        iC = Intersect(Selection.Rows(1), Selection.Cells(1, 1).CurrentRegion).Columns.Count
        Open stF For Output As #f
        For Each rL In Selection.Rows
          For i = 1 To iC
            Print #f, rL.Cells(1, i) & ";";
          Next
          Print #f, ""
        Next
        Close #f
      End If
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    merci pour ton code qui devrait me faire avancer
    pour les colonnes il faut toutes les compter sans tenir compte des cellules fusionnées????
    En fait il faut que je cré un fichier csv dans lequel j'envoie les données des cellules sélectionnées
    mon code ne fait qu'enregistrer xls en csv il n'est donc plus valable??
    PUpuis-je activer ta fonction en cliquant sur un bouton et en plus je voudrais enregistrer le .csv créé avec ce nom:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    are = Left(Worksheets(1).Range("L2"), 3)
             fdm1 = "C:\TEMP\" & Range("L2") & ".CSV"
    Excuses mais je ne suis pas trés fort ...

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    je n'arrive pas à modifier ton code pour ne sélectionner qu'une plage de cellules
    y-aurait-il quelqu'un qui pourrait m'aider?
    MERCI

  5. #5
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonsoir,

    le code précédent fonctionne avec une selection de lignes..

    pour une selection d'une plage quelconque:
    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
    Private Sub ExporteCSV()
     Dim stF As String
     Dim c As Range
     Dim rL As Range
     Dim f As Integer
      stF = Application.GetSaveAsFilename
      If stF <> "Faux" Then
        f = FreeFile
        Open stF For Output As #f
        For Each rL In Selection.Rows
          For Each c In rL.Cells
            Print #f, c & ";";
          Next
          Print #f, ""
        Next
        Close #f
      End If
    End Sub

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Excelent
    j'ai mis ton code sous un bouton ç afonctionne du tonnerre
    mais, j'aimerai ne pas sélectionner manuellement,
    en fait je voudrait lui prédéfinir une plage de cellules (de A17 à O78 mon soucis c'est que cela part toujours de A16 mais 78 peut varier )
    en cliquant sur le bouton cela crée le fichier .csv sans demander ou je l'enregistre,( je défini le dossier temporaire) et ensuite moi j'ai le code pour pousser ce fichier dans mon ftp
    Tout cela en transparence
    excuses moi mais j'en profite tu as l'air d'avoir les compétences pour m'aider
    Merci encore

  7. #7
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonsoir,


    pour le nom de fichier suffit de le placer dans variable stF
    en rempaçant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      stF = Application.GetSaveAsFilename
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      stF = "c:\tmp\Monfichier.txt"
    pour la zone à sauver , rajoute une variable range que tu initialise avec zone à sauver

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim MyR as range
     
    set MyR = Thisworkbook.sheets("Feuil1").range("A17").CurrentRegion
    ensuite dans tous le code tu remplace Selection par MyR

    [EDIT] Correction code rajoute feuille oubliée, merci cavalier

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Merci on avance bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set MyR = Thisworkbook.range("A17").CurrentRegion
    un soucis, chaque fois que j'active ma macro il buggue sur RANGE, il me dit:
    "Membre de méthode ou de données introuvable"
    ?????

  9. #9
    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
    Par défaut
    En mettant "set MyR = Thisworkbook.range("A17").CurrentRegion" tu fais référence au classeur, non à une feuille de calculs. Désigne le feuille de calculs concernée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Thisworkbook.Worksheets(NomDeLaFeuille).range(...)
    'ou
    Thisworkbook.Activesheet.range(....)

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    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
    Sub saveMS_QuandClic()
    Dim stF As String
     Dim c As Range
     Dim rL As Range
     Dim f As Integer
     Dim MyR As Range
     
      stF = "P:\MES DOCUMENTS\new_GDA\" & Range("L2") & ".csv"
      If stF <> "Faux" Then
        f = FreeFile
        Open stF For Output As #f
        Set MyR = ThisWorkbook.ActiveSheet.Range("A17").CurrentRegion
        For Each rL In MyR.Rows
          For Each c In rL.Cells
            Print #f, c & ";";
          Next
          Print #f, ""
        Next
        Close #f
      End If
     
    End Sub
    ça , ça marche bien, mais maintenant, je voudrais délimiter la fin de mon tableau et le problème c'est que ça vari et il y a quelque lignes que je ne veut pas
    exemple de A17 à O26 mais cela peut étre O28 ou alors un code qui dirait prends moi toutes les lignes depuis la A16 dont les cellules de la colonne N contiennent CRE, CR, MC ou Type com

  11. #11
    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
    Par défaut
    CRE, CR, MC ou Type com correspondent à une partie de la cellule ou à la cellule ? "CRE???" ou "CRE" tout court ?
    Tu peux vérifier la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if c.offset(0,1) = "CRE" or c.offset(0,1) = "CR" or ...etc. then
    ou bien
    if instr(c.offset(0,1), "CRE") <> 0 or Instr(c.offset(0,1), "CR") <> 0 or ...etc. then
    Sinon, tu as une autre solution consistant à établir au préalable la plage de cellules contenant ces mots.
    Tu dis

  12. #12
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    ouf, j'ai du mal à suivre ....
    en fait dans la colonne N à partir de la ligne 17
    J'ai des cellules qui peuvent contenir soit "CRE" soit "CR" soit "i" soit "E"
    et je voudrais n'envoyer dans mon fichier .csv que les lignes dont les cellules de la colonne N contiennent "CRE" ou "CR"

  13. #13
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut 14 pas 17
    Bonsoir,
    suffit de texter le contenue de la cellule 14 de ta ligne le N

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
    For Each rL In MyR.Rows
      If rl.Cells(14) <> "CRE" And Rl.Cells(14) <> "CR" Then
          For Each c In rL.Cells
            Print #f, c & ";";
          Next
          Print #f, ""
       End if
       Next
    ...

  14. #14
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Voila le code qui marche bien
    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
    Sub saveMS_QuandClic()
     Dim test, stF, script As String
    'Dim stF As String
     Dim c As Range
     Dim rL As Range
     Dim f As Integer
     Dim MyR As Range
     
      stF = "P:\MES DOCUMENTS\new_GDA\" & Range("L2") & ".csv"
      If stF <> "Faux" Then
        f = FreeFile
        Open stF For Output As #f
        Set MyR = ThisWorkbook.ActiveSheet.Range("A17").CurrentRegion
        For Each rL In MyR.Rows
        If rL.Cells(14).Value = "CRE" Or rL.Cells(14).Value = "CR" Or rL.Cells(14).Value = "MC" Then
          For Each c In rL.Cells
            Print #f, c & ";";
          Next
          Print #f, ""
         End If
        Next
        Close #f
      End If
    puis_je encore t'embéter?
    Ton code m'enregistre bien le fichier .csv que je veu là ou je veux avec le nom que je veux jusque là super!!!
    par contre j'ai une macro sur mon fichier excel qui permet de pousser mon fichier excel dans un serveur ftp (plutot que de le joindre par parcourrir)
    et je voudrais pousser aussi mon nouveau fichier .csv vers le ftp
    j'ai essayé d'adapter les 2 codes mais ça ne marche pas bien si je te montre mon code peux tu m'aider?
    Si oui puis-je plustot t'envoyer mon bout de code en MP pousser dans le ftp
    merci

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Salut
    Bon OK voila mon code qui pousse MA FEUILLE EXCEL dans le FTP que ce soit sou NT ou sous VISTA:

    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
    Sub SaveRIP()
     
        Dim test, fdmca, script As String
     
        'mise à jour automatique de la date lors de l'enregistrement
        Range("S4").Value = Now()
     
        On Error Resume Next
        If Dir("C:\TEMP\", vbDirectory) <> "" Then
            'enregistrement de la FDM à envoyer par FTP
            are = Left(Worksheets(1).Range("L2"), 3)
            fdm = "C:\TEMP\" & Range("L2") & ".xls"
            ThisWorkbook.SaveAs (fdm)
            ' creation du script FTP et enregistrement provisoire
            script = "C:\TEMP\script.ftp"
            Open script For Output As #1
            Print #1, "prompt"        
            Print #1, "0.199.0.0.0."
            Print #1, "Adm.."
            Print #1, "tartampion"
            Print #1, "cd FDM"
            Print #1, "put " & fdm
            Print #1, "quit"
            Close #1
            Shell ("command.com /c ftp.exe -s:C:\TEMP\script.ftp")
    Else
     
                'enregistrement de la FDM à envoyer par FTP
                are = Left(Worksheets(1).Range("L2"), 3)
                fdm = "C:\Users\Public\FCMOarch\" & Range("L2") & ".xls"
                ThisWorkbook.SaveAs (fdm)
                ' creation du script FTP et enregistrement provisoire
                script = "C:\Users\Public\script.ftp"
                Open script For Output As #1
                Print #1, "prompt"
                Print #1, "0.199.0.0.0."
                Print #1, "Adm.."
                Print #1, "tartampion"
                Print #1, "cd FDM"
                Print #1, "put " & fdm
                Print #1, "quit"
                Close #1
                Shell ("command.com /c ftp.exe -s:C:\Users\Public\script.ftp")
        End If
    ThisWorkbook.Saved = True
        Application.Quit
     
    End Sub
    Comment pousser le fichier .csv en même temps dans un autre répertoir du ftp?

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Il faut aussi faire un "put" de stF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub SaveRIP()
    ...
            Print #1, "tartampion"
            Print #1, "cd FDM"
            Print #1, "put " & fdm
            Print #1, "put " & stF
            Print #1, "quit"
    MAIS il faut enlever la déclaration de la variable stF de la sub saveMS_QuandClic()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub saveMS_QuandClic()
     Dim test, stF, script As String ' <-- enlever "stF," !
    pour la déclarer dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public stF as string
    Ceci afin que la variable stF puisse être utilisable par toutes les procédures qui en ont besoin (et donc aussi par SaveRIP() dans ton cas).

  17. #17
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Merci je vois que tu as compris mon souçis seulement petit hic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Print #1, "cd FDM"
            Print #1, "put " & fdm
    je pousse fdm dans répertoire FDM, mais je voudrais pousser stf dans FDM/FCMOCSV

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub SaveRIP()
    ...
            Print #1, "tartampion"
            Print #1, "cd FDM"
            Print #1, "put " & fdm
            Print #1, "cd FCMOCSV"
            Print #1, "put " & stF
            Print #1, "quit"

  19. #19
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Print #1, "cd FDM"
                Print #1, "put " & fdm
                Print #1, "cd FDM/FCMOCSV"
                Print #1, "put " & stF
    Malgré ce code il me pousse les 2 sous FDM , il ne veut pas me pousser stF sous FDM/FCMOCSV

    Pourquoi d'aprés toi?

  20. #20
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Je pense que si tu fais "cd FDM/FCMOCSV" il plante car il cherche un sous-répertoire FDM alors que tu es déjà sous FDM (cf le cd FDM juste avant).

    "cd FCMOCSV" doit suffire, à condition bien sûr que ce répertoire existe déjà sous FDM.

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

Discussions similaires

  1. [SSIS] [2K5] Converstion xls vers csv
    Par jeud84 dans le forum SSIS
    Réponses: 1
    Dernier message: 26/05/2010, 15h39
  2. [XL-2003] Copier de données d'un fichier xls vers csv
    Par gandalf20000000 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/09/2009, 15h20
  3. [PHP 5.2] Conversion xls en csv ou txt
    Par Delors dans le forum Langage
    Réponses: 1
    Dernier message: 13/07/2009, 11h52
  4. [Excel] De xls vers csv sans objet COM (php4 sous linux)
    Par AntaresJon dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 26/02/2009, 17h13
  5. Exporter fichier XLS vers CSV
    Par arnaud_verlaine dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/09/2007, 17h47

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