Exporter des données en CSV_VBA

Résolu
senecartour Messages postés 391 Statut Membre -  
 Maurice -
Bonjour,

Je suis en train de mettre en place un outil permettant d'exporter une plage de données de mon classeur en CSV avec comme séparateur (^)

L'idée c'est une fois appuyer sur le bouton, il se crée un répertoire. Ce répertoire contiendra des sous répertoire représentant chacun le répertoire d'enregistrement de mon fichier CSV généré.
Jusqu'ici tout va bien.

Mon problème c'est que, ma macro arrive à créer le répertoire et les sous répertoire, mais dans mon répertoire, les données ne sont pas exportées.
S'il vous plaît, je dois rendre ce travail pour demain soir.

Voici un exemple de mon travail avec les macros: https://www.cjoint.com/c/DJwqtCH1nDt

Au secours !

Partager son savoir est la meilleure façon d'apprendre!

20 réponses

  1. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Vaux-t-il la peine de chercher la solution ou c'est trop tard ... ?

    0
  2. senecartour Messages postés 391 Statut Membre 3
     
    Bonsoir Le Pingou,
    Non, je galère toujours je n'arrive pas à trouver la solution.
    Si vous pouvez m'aider à résoudre le problème ce sera vraiement gentil!
    Merci d'avance,
    0
  3. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    OK je regarde votre fichier et comment fonctionne votre code..... pour cerner le problème... !

    0
  4. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    A première vue, il manque une valeur pour [cMax] dans la ligne d'instruction :
    For Index = 1 To cMax

    Avez-vous une précision.... ?

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. senecartour Messages postés 391 Statut Membre 3
     
    Au fait je n'ai pas de précision sur Max, j'ai essayé de d'dapter un code retouvé sur le net.
    Mais mon idée, c'est d'arriver à extraire en csv la palge de donnée.
    Si vous avez une solution, vous pouvez modifier le code!!
    Merci d'avance!
    0
  7. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci pour l'information, la solution pour demain.
    Toutefois essayer de supprimer la ligne d'instruction

    For Index = 1 To cMax

    y compris :
    Next Index

    Bonne nuit.

    Salutations.
    Le Pingou
    0
  8. senecartour Messages postés 391 Statut Membre 3
     
    Bonsoir Le Pingou,
    Avez-vous trouvé la solution?
    Merci d'avance!
    0
  9. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    J'attendais de savoir si vous avez essayé selon mon message précédent !

    0
  10. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Ou voulez-vous insérer la plage de donnée à exporter (la position dans le classeur CSV.... ?

    0
  11. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Pour finaliser la solution j'ai besoin de la réponse aux 2 messages précédents !

    0
    1. senecartour Messages postés 391 Statut Membre 3
       
      Bonjour Le Pingou,
      Les classeurs exportés doiventent être placés dans des sous repertoires. C'est à dire le même repertoire que l'outil maios cahque classeur exporté sera dans un sous repertoire qui porte le nom du classeur.
      Merci id'avance!
      0
  12. Maurice
     
    Bonjour

    le principe des csv le separateure est ";"

    Voila une macro avec le test du repertoire

    Sub CreatRepertoire()
    Chemin = ActiveWorkbook.Path & "\"
    MonRep = Chemin & "Export"
    If Dir(MonRep, vbDirectory) = "" Then
    MkDir (MonRep)
    End If
    Export MonRep
    End Sub

    Sub Export(Chemin)
    Non = ActiveSheet.Name
    Ext = ".csv"
    Fichier = Non & Ext
    CheminFiche = Chemin & "\" & Fichier
    Sep = ";"
    Nlig = Cells(Rows.Count, 2).End(xlUp).Row
    Set Plage = Range("B6:E6,B8:E" & Nlig)
    Open CheminFiche For Output As #1
    For Each Lig In Plage.Rows
    Tmp = ""
    For Each Cel In Lig.Cells
    Tmp = Tmp & CStr(Cel.Text) & Sep
    Next
    Print #1, Tmp
    Next
    Close
    Set Plage = Nothing
    MsgBox "Votre fichier CSV a été créé avec succès!"
    End Sub

    A+
    Maurice
    0
    1. senecartour Messages postés 391 Statut Membre 3
       
      Maurice!
      Merci pour ta proposition qui fonctionne aussi!
      J'ai finalement opté pour la méthode de pingou qui correspond plus à ma méthode!
      En tout cas c'est vraiment gentil de votre part!
      Bonne journée
      0
  13. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci pour l'information.
    Concernant la suppression de
    For Index = 1 To cMax
    y compris :
    Next Index

    Le fichier [csv] est bien créer mais il est vide.

    Entre temps Maurice vous a fournis une solution, ne voulant pas faire les choses à double, est-ce que cela vous suffit pour adapter votre code... ?

    0
  14. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Dans l'attente de votre bon vouloir, voici ma proposition basé sur votre fichier : https://www.cjoint.com/?3JAo7MMnNpw

    0
    1. senecartour Messages postés 391 Statut Membre 3
       
      Merci beaucoup Le Pingou!
      Ce que vous avez fait est super!!
      ca me vent vraiement!
      J'ai cependant soulevé un autre point sur le même sujet.
      Voir message ci-dessous
      0
  15. senecartour Messages postés 391 Statut Membre 3
     
    Le Pingou,
    Vous ne savez même pas à quel point vous m'avez sauvé!
    C'est excellet! c'est exactement ce que je voulais
    Merci infiniement.

    En parallèle, Je souhaiterais rajouter une module dans mon outil qui permet de masquer certains onglets en fonction de la valeur dans un autre onglet.
    J'ai commencé à coder mais je suis bloqué. Voici mon code:

    Sub masquer_onglet()

    Dim ws As Worksheet
    Dim ilinecourante As String
    Dim iderligne As String
    Dim icolonnecourante As String
    Dim idernierecolonne As String

    iLigneCourante = 3
    ipremierecolonne = 1
    idernierecolonne = 2
    iDerniereLigne = Sheets("Validation_Onglets").Range("A" & Rows.Count).End(xlUp).Row

    With ActiveWorkbook
    For iLigneCourante = 3 To iDerniereLigne
    If Worksheet.Name = Worksheets("Validation_Onglets").Cells(iLigneCourante, 1).Value
    And Worksheets("Validation_Onglets").Cells(iLigneCourante, 2) = "OUI"
    Then
    Worksheet.Visible = xlSheetVeryHidden
    iLigneCourante = iLigneCourante + 1
    End If
    Next
    End With

    Je vous remets le fichier: https://www.cjoint.com/?DJApSw3YDti

    Si vous m'aidez à résoudre ce dernier point, vous me sauvez vraiment

    End Sub

    0
  16. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci pour l'information.
    J'ai donné un oeil à votre fichier et je suis surpris que l'export ne fonctionne pas et dans ce cas je ne vais pas aller plus loin sans une explication.

    0
    1. senecartour Messages postés 391 Statut Membre 3
       
      Désolé Le Pingou,
      Ayant plusieurs version du fichier, je me suis trompé sur la dernière version.
      Voici la bonne version: https://www.cjoint.com/c/DJAsaNK3FFi
      Merci d'avance
      0
    2. senecartour Messages postés 391 Statut Membre 3
       
      Le Pingou,
      Merci c'est OK pour masquer les onglets.
      La solution de Maurice fonctionne bien.
      Merci en tout cas.
      Je clôtue le sujet!
      0
    3. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
       
      Merci.
      0
  17. Maurice
     
    Bonjour

    tien voila ta macro modifier

    Sub Masquer_Onglet()
    Nlig = Cells(Rows.Count, 1).End(xlUp).Row
    For L = 4 To Nlig
    If Cells(L, 2).Value = "Oui" Then
    Sheets(Cells(L, 1).Value).Visible = 2
    Else
    Sheets(Cells(L, 1).Value).Visible = -1
    End If
    Next
    End Sub

    A+
    Maurice
    0
    1. senecartour Messages postés 391 Statut Membre 3
       
      Bonsoir Maurice,
      C'est super!!
      ça fonctionne.
      Je clôture le sujet!
      0
    2. senecartour Messages postés 391 Statut Membre 3
       
      Bonsoir Maurice,
      Je me permets de vous solliciter car je souhaiterais modifier une partie de mon outil avec la macro que vous m'avez faite.
      En effet, avec mon responsable on souhaiterais que l'extraction du fichier csv soit comme suite.
      En effet, on a découpé notre fichier en trois plages
      plageentete = ligne 7
      plagetitre = 8
      plagedonnee = de la ligne 18 jusqu'à la fin de la plage de données
      plagetotale = plageentete + plagetitre + plagedonnéee

      Et ce que je souhaiterais, c'est d'avoir la plagetotale qui sera exportée en csv (toutes les plages en couleur orange dans mon fichier).

      En parallèle je souhaiterais obtenir ceci:
      -La concatenation des colonnes B et D dans le fichier csv qui sera généré
      -Lorsqu'on a le mot "MAJUSCULE" dans une cellule de la ligne 17 les données dans le fichier csv seront en majuscule

      Si vous pouvez m'aider à y arriver ce seraiit top! Car, c'est la dernière étape de mon outil que je dois présenter à mon responsable pour la fin de mon stage.

      Je vous joins le fihcier. J'ai déjà fait 89% du travail en s'appuyant sur la macro qui vous m'avez donnée la dernière fois: https://www.cjoint.com/c/DKcwrs9chAY

      Merci infimenet Maurice.
      0
  18. Maurice
     
    re

    voila ton modele avec les Boutons

    http://cjoint.com/?3JAsZu3PWut

    A+

    Maurice
    0
  19. Maurice
     
    Bonjour
    je voie que 2 plage

    voila une dernier macro

    Sub CreatRepCsv()
    Chemin = ActiveWorkbook.Path & "\"
    MonRep = Chemin & "Dossier"
    If Dir(MonRep, vbDirectory) = "" Then
    MkDir (MonRep)
    End If
    ExportCsv MonRep
    End Sub

    Sub ExportCsv(Chemin)
    Non = ActiveSheet.Name
    Ext = ".csv"
    Fichier = Non & Ext
    CheminFiche = Chemin & "\" & Fichier
    Sep = ";"
    Nlig = Cells(Rows.Count, 2).End(xlUp).Row
    Set A = Range(Cells(7, 2), Cells(8, 6))
    Set B = Range(Cells(18, 2), Cells(Nlig, 6))
    Set plage = Union(A, B)
    Open CheminFiche For Output As #1
    For Each Lig In plage.Rows
    Tmp = ""
    For Each Cel In Lig.Cells
    Tmp = Tmp & CStr(Cel.Text) & Sep
    Next
    Print #1, Tmp
    Next
    Close
    Set A = Nothing
    Set B = Nothing
    Set plage = Nothing
    MsgBox "Votre fichier CSV a été créé avec succès!"
    End Sub

    A+
    Maurice
    0
  20. senecartour Messages postés 391 Statut Membre 3
     
    Bonsoir Maurice,
    Merci beaucoup! c'est super!
    Désolé pour le retard, j'étais en vacance!

    Avec tes astuces, je me suis bien amélioré en VBA! Je continue à apprendre!
    Encore Merci!
    0
  21. Maurice
     
    Bonjour
    Voila une nouvelle version
    http://cjoint.com/?0KmncrSatyS

    A+
    Maurice
    0