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 :

Convertir plusieurs fichiers excel en csv avec des guillemets [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut Convertir plusieurs fichiers excel en csv avec des guillemets
    bonjour;

    j'ai un problème pour automatiser une macro pour convertir plusieurs fichiers excel 2010 en csv avec des guillemets et chaque fichier possède un voir 2 onglets le tout c'est 126 fichiers repartis dans 21 dossier suivants des projets.

    la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Export()
        Dim Enrgt As String
        Close #1
        Open "C:\Users\Desktop\test.csv" For Output As #1
        For Each c In Range([A1], Cells(Rows.Count, 1).End(xlUp))
            Enrgt = ""
            For Each x In Range(Cells(c.Row, 1), Cells(c.Row, Columns.Count).End(xlToLeft))
                Enrgt = Enrgt & """;""" & x.Value
            Next x
            Enrgt = Right(Enrgt, Len(Enrgt) - 2) & """"
            Print #1, Enrgt
        Next c
        Close #1
    End Sub
    En plus de ça j'ai certaines cellules en forme 001 et la macro les converties a 1

    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Mets en PJ un échantillon de fichier (sans données confidentielles). Si les fichiers sont répartis dossiers, comment reconnait-on les fichiers à convertir ? ou est-ce l'utilisateur qui choisit ?

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par karido-74 Voir le message

    en plus de ça j'ai certain cellules en forme 001 et la macro les converti a 1
    merci
    Bonjour

    Mets ' devant les valeurs qui débutent par 0 afin de conserver le 0.

    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
    Sub Export_Valeurs_Debutant_Par_Zero()
    Dim Enrgt As String
    Close #1
    Open "C:\test2\test.csv" For Output As #1
     
    For Each c In Range([A1], Cells(Rows.Count, 1).End(xlUp))
    Enrgt = ""
     
    For Each x In Range(Cells(c.Row, 1), Cells(c.Row, Columns.Count).End(xlToLeft))
     If Enrgt <> "" Then Enrgt = Enrgt & ";"
    If Mid(CStr(x.Value), 1, 1) = "0" And IsNumeric(CStr(x.Value) & "0") Then
     Enrgt = Enrgt & Chr(34) & "'" & x.Value & Chr(34)
    Else
     Enrgt = Enrgt & Chr(34) & x.Value & Chr(34)
    End If
    Next x
    Print #1, Enrgt
     
    Next c
    Close #1
    End Sub
    Cordialement

    Docmarti

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut nouvelles macro
    Bonjour,

    j'ai réussi a trouver une autre macro sur le net qui ne convertie pas les cellules (001 en 1) sauf que cette macro elle ne met pas les champs entre guillemets

    voila la macro
    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
     
    Sub Placeoweb_XLS2CSV_OneFileBySheet()
     
       Application.DisplayAlerts = False
       Application.ScreenUpdating = False
       For Each feuilleEnCours In ThisWorkbook.Sheets
           feuilleEnCours.Select
           feuilleEnCours.Copy
           ActiveWorkbook.SaveAs Filename:="C:\placeoweb.com.xls2csv." & feuilleEnCours.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True
           ActiveWorkbook.Close SaveChanges:=False
       Next
       Application.ScreenUpdating = True
       Application.DisplayAlerts = True
     
       MsgBox ("Exportation terminée, retouvez vos fichier à la racine dans le C:\")
     
    End Sub
    merci
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Je répète :

    Si les fichiers sont répartis dossiers, comment reconnait-on les fichiers à convertir ? ou est-ce l'utilisateur qui choisit ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    En fait tout les dossiers contiennent plusieurs fichiers xlsx donc pour la conversion c'est tous les fichiers (L'utilisateur ne choisit pas)

    La nouvelle macro m’arrange bien sauf qu'il lui manque juste l'ajout des guillemets

  7. #7
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    la nouvelles macro que elle m’arrange bien sauf que il lui manque juste pour rajouter les guillemets
    Oui mais il n'y a pas moyen de l'adapter.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Merci mais existe-t-il un autre moyen avec une autre macro juste pour avoir les guillemets et qu'elle garde le même format de cellule ?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Je ne peux pas traiter tous les dossiers de ton disque. La macro suivante te permets de choisir 1 dossier et traite tous les fichiers .xlsx. Chaqque fefuille contenant des données est sauvegardée dans le dossier sous le nom nom du classeur - nom de la feuille.csv.

    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
    Sub ExportDossierCSV()
        Dim Enrgt As String, FSO As Object, F As Object, Dossier As String
        Dim Repertoire As FileDialog, Sh As Worksheet, Wbk As Workbook
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
        Repertoire.Show
        For Each F In FSO.getfolder(Repertoire.SelectedItems(1)).Files
            Dossier = Repertoire.SelectedItems(1)
            If LCase(Right(F.Name, 5)) = ".xlsx" Then
                Set Wbk = Workbooks.Open(F.Path)
     
                For i = 1 To Wbk.Worksheets.Count
                    Set Sh = Wbk.Worksheets(i)
                    If Application.CountA(Sh.Cells) > 0 Then
     
                        Close #1
                        Open Dossier & "\" & Left(Wbk.Name, Len(Wbk.Name) - 5) & "-" & Sh.Name & ".csv" For Output As #1
                        For Each c In Range([A1], Cells(Rows.Count, 1).End(xlUp))
                            Enrgt = ""
                            For Each x In Range(Cells(c.Row, 1), Cells(c.Row, Columns.Count).End(xlToLeft))
                                Enrgt = Enrgt & """;""" & x.Value
                            Next x
                            Enrgt = Right(Enrgt, Len(Enrgt) - 2) & """"
                            Print #1, Enrgt
                        Next c
                        Close #1
                    End If
                Next i
                Wbk.Close , False
     
            End If
        Next F
    End Sub

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Comment je vais exécuter cette macro ?
    (Désolé pour cette question)

    [Edit] Est-ce que j'ouvre un fichier faisant l'objet de conversion vers csv dans un dossier particulier ou je crée un nouveau fichier excel et je dois parcourir le dossier ou il y a mes fichiers excel

    Cordialement

  11. #11
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Onglet Affichage, bouton Macros, clique sur le nom de la macro et sur "Exécuter".

    Il faut auparavant coller cette macro dans un classeur :

    1. appuie sur Alt+F11. La fenêtre VBE s'ouvre
    2. Repère dans la partie gauche le projet qui porte le nom de ton classeur. Clique dessus.
    3. clique sur "Insertion" et "Module". Dans la partie droite, colle la macro.

    N'ouvre aucun autre classeur. Exécute seulement la macro.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Moi d'habitude j'ouvre mon fichier Excel et tape Alt F11.

    Puis j'insère un nouveau module, je colle le code et F5 pour exécuter.

    Ensuite je parcours le dossier ou il y a mes fichiers Excel.
    il y a un problème avec:

    Set Wbk = Workbooks.Open(F.Path)




    Cordialement

  13. #13
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    moi d'habitude j'ouvre mon fichier excel te tape Alt F11
    puis insère un new module je colle le code
    Je n'ai pas écrit autre chose.

    comment je vais exécuter cette macro désoler pour cette question
    Si tu le sais, pourquoi poses-tu la question ?

    et F5 pour exécuter
    Tu peux aussi faire comme ça.

    ensuite je parcoure le dossier ou il ya mes fichier excel
    Pas compris ?

    il ya un problème avec:

    Set Wbk = Workbooks.Open(F.Path)
    QUEL problème ?

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Désolé, quand j’exécute la macro il y a une fenêtre qui s'ouvre je cherche alors le dossier ou il y a mes fichier Excel.

    Ensuite je clic ok il y a une fenêtre qui s'ouvre de la macro pour debuger et quand je clic il y a la phrase dans le message précédent.

    j'ai mis en pièce jointe l'impression écran

    Cordialement
    Fichiers attachés Fichiers attachés

  15. #15
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Exécute cette macro, note le contenu des deux msgboxes et poste-les.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Bonsoir Daniel,

    Désolé de vous répondre en retard, j'ai exécuté la macro et vous trouverez toutes les étapes dans les pièces jointes qui sont numérotées de image1 a image5.

    Cordialement
    Fichiers attachés Fichiers attachés

  17. #17
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Ce n'est pas ce que je t'ai demandé. Ce n'est même pas la dernière macro envoyée.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Bonsoir Daniel,

    Je n'ai pas reçu la dernière macro

    Cordialement

  19. #19
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonsoir Daniel; karido



    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
    Sub Daniel_ExportDossierCSV()
     
        Dim Enrgt As String, FSO As Object, F As Object, Dossier As String
        Dim Repertoire As FileDialog, Sh As Worksheet, Wbk As Workbook
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
        Repertoire.Show
        For Each F In FSO.getfolder(Repertoire.SelectedItems(1)).Files
            Dossier = Repertoire.SelectedItems(1)
     
            If LCase(Right(F.Name, 4)) = ".xls" Then
                Set Wbk = Workbooks.Open(F.Path)
     
                For i = 1 To Wbk.Worksheets.Count
                    Set Sh = Wbk.Worksheets(i)
                    Debug.Print Dossier & "\" & F.Name & "-" & Sh.Name & ".csv"
     
                    If Application.CountA(Sh.Cells) > 0 Then
     
                        Close #1
                        Open Dossier & "\" & F.Name & "-" & Sh.Name & ".csv" For Output As #1
                        For Each c In Sh.Range(Sh.Cells(1, 1), Sh.Cells(Rows.Count, 1).End(xlUp))
                            Enrgt = ""
                            For Each x In Sh.Range(Sh.Cells(c.Row, 1), Sh.Cells(c.Row, Columns.Count).End(xlToLeft))
                                Enrgt = Enrgt & """;""" & x.Value
                            Next x
                            Enrgt = Right(Enrgt, Len(Enrgt) - 2) & """"
                            Print #1, Enrgt
                        Next c
                        Close #1
                    End If
                Next i
                Wbk.Close , False
     
            End If
        Next F
     
    End Sub

  20. #20
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Essaie plutôt le code de Docmarti qui a l'avantage de te permettre plusieurs dossiers.

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

Discussions similaires

  1. Un flux avec plusieurs fichier Excel dépendant d'une des variables du flux
    Par dev_ggy dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 24/01/2012, 17h16
  2. [MySQL] Convertir un fichier excel en csv avant d'uploader
    Par kakashi05 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/08/2011, 14h50
  3. Réponses: 2
    Dernier message: 01/06/2011, 12h14
  4. [CSV] importation CSV avec des guillemets
    Par trash_board dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2006, 14h08

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