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 :

Besoin de sauvegarde en ".csv" et non "xls" [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut Besoin de sauvegarde en ".csv" et non "xls"
    Bonjour,

    La macro dont le code sera présenté effectue pour chaque fichier du dossier "Dossier" les operations suivantes:
    Prenons une cellule A1 d'un des fichiers A1= 9,48,39,1.175e+005,0.194,-0.334
    La macro transforme le 1.175e+005 en 11750 puis éclate la cellule de telle manière à ce que "9" soit dans une colonne , "48" soit dans une autre colonne ... "-0.334" soit dans la dernière colonne. Le résultat est sauvegardé en ".xls" pour justement conserver la mise en forme (chaque valeur dans une colonne).
    J'ai besoin que le fichiers soit sauvegardé en .csv.
    J'ai tout esseyé mais je n'y parviens pas.
    J'ai tenté ".SaveAs Replace(.FullName, ".csv", ".csv"), xlWorkbookNormal" mais à l'ouverture du fichiers Excel m'indique que l'extension .csv n'est pas l'extension d'origine du fichier.

    J'éspère que vous pourrez m'aider.
    Je vous remercie infiniment pour le temps et l'attention accordés à ce problème.
    Voici le code de 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Sub TRANSFORM()
    Dim FolderName As String, FName As String
    Dim Wbk As Workbook
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    FolderName = "C:\Users\SONY\Desktop\Dossier\"                   
    FName = Dir(FolderName & "*.csv")
    Do While Len(FName)
        Set Wbk = Workbooks.Open(FolderName & FName)
        With Wbk
            With .Worksheets(1)
                LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
                .Range("A1:A" & LastLig).TextToColumns Destination:=.Range("A1"), Comma:=True
                .Range("A1:F" & LastLig).NumberFormat = "General"
                .Range("G1:G" & LastLig) = 0
     
                .Rows(1).Insert
                .Range("A1:G1").Value = Array("Att1", "Att2", "Att3", "Att4", "Att5", "Att6", "Class")
            End With
     
            Application.DisplayAlerts = False
            .SaveAs Replace(.FullName, ".csv", ".xls"), xlWorkbookNormal
            Application.DisplayAlerts = True
     
            .Close False
        End With
        Set Wbk = Nothing
        FName = Dir
    Loop
     
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    tout simplement consulter l'aide de la méthode SaveAs et de sa propriété FileFormat
    car en ligne n°24 xlWorkbookNormal indique bien un classeur Excel et non pas un fichier .csv ‼
    Le nom du fichier ne fait pas son format tout comme l'habit ne fait pas le moine …

    Sinon le plus simple est de tester manuellement l'enregistrement du classeur en spécifiant bien un des formats .csv
    et une fois le bon trouvé réitérer l'opération tout en utilisant l'Enregistreur de macros : le code est livré sur un plateau !

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    D'abord merci à vous Marc-L de vous être donner la peine de répondre.

    J'ai consulté la documentation et le résultat est le même en esseyant toutes les valeurs de FileFormat comprenant "csv" dans sa dénomination , les modifications concernant l'ecriture scientifique sont sauvegardées mais les valeurs ne sont pas organisées en colonne comme décrit dans le premier message:
    soit une cellule A1= 9,48,39,1.175e+005,0.194,-0.334 on devrait avoir "9" dans une colonne , "48" dans une autre colonne à droite de la dernière ... "-0.334" dans la dernière colonne

    J'éspère que vous pouvez m'aider.
    Merci pour votre temps et votre patience.

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Un fichier csv n'est pas en colonne, les données sont juste séparées par ligne via un séparateur …

    Sinon joindre alors un classeur exemple en .xls et un fichier csv du résultat désiré.

    Évidemment ne pas indiquer sa version d'Excel dans le titre comme préconisé dans les règles du forum
    s'expose à ne pas obtenir forcément une solution adaptée à la version …

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut
    Ma version est Excel 2010 je joints deux fichiers fichier_avant qui correspond au fichier sur lequel la macro s'applique et fichier_apres qui correspond au résultat voulu.
    Pour rappel, mon soucis c'est d'avoir exactement le même contenu et la même forme du fichier dont l'extension est ".xls"(resultat de l'application de la macro sur le fichie exemple_avant.csv), mais dans un fichier avec l'extension ".csv" .
    Je m'excuse du dérangement que l'absence de la mention de ma version(Excel 2010) a pu causer.
    Merci encore pour votre aide.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Le CSV, c'est du texte brut, il peut arriver que les données sauvegardées ne correspondent pas tout à fait à ce qui apparait à l'écran, surtout si les affichages ont été formatée dans les fonctions de format de nombre de Excel. C'est la données brute qui est exportée en CSV.

    Si ton problème, c'est la notation scientifique de la quatrième colonne, effectivement, ça ne passe pas "naturellement" en CSV.
    La seule solution, c'est de recomposer cette valeur en texte à grands renforts de LOG10.

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SaveAs .FullName, xlCSV
    Oublies le colonnes

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    mercatog merci pour ta réponse.
    J'ai appliqué la modification mais la disposition en colonne n'est pas sauvegardée.
    J'ai vraiment besoin de la disposition en colonne autant que l'extension en ".csv".
    J'éspère vraiment que tu peux m'aider dans ce sens.
    Merci encore pour ton aide.

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Citation Envoyé par hichemnho Voir le message
    mais la disposition en colonne
    Qu'est-ce donc en clair sans décodeur ?
    En tout cas pas un fichier de type csv ‼

    Sinon joindre un fichier texte au format du résultat désiré ainsi que son classeur source en .xls …

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut
    Merci pour votre réponse,

    J'ai joint deux fichiers.
    Ce que je cherche à obtenir c'est le résultat de la macro (nommé exmple_aprés.xls dans le dossier Dossier joints) seulement, au lieu d'avoir l'extension ".xls" le contenu ainsi que la disposition en colonne , je cherche à l'avoir dans un fichier .csv.

    Merci encore pour votre aide.

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Désolé, je ne vois aucune pièce jointe indépendante comme pourtant demandé …

    Comme ce n'est toujours pas clair, je ne peux que souhaiter un "allez courage !" …

    Et dire qu'avec une problématique correctement exposée (claire & exhaustive) au départ,
    la solution serait apparue dès le post #2 !

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut
    J'ai joint un fichier Dossier.rar au niveau du post 5 juste aprés qu'il m'ait été demandé.
    Je le joints de nouveau au niveau de ce message, en rappellant la version d'Excel que j'utilise qui est 2010 et en tentant de reformuler mon problème:
    (Comment sauvegarder dans un fichier portant l'extension ".csv",le résultat d'une macro et une mise en forme des données en colonnes? )
    J'apprécie votre patience et ainsi que le fait que vous voulez m'apporter votre aide.


    Dossier.rar

  13. #13
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par hichemnho Voir le message
    J'ai joint deux fichiers.
    Ce que je cherche à obtenir c'est le résultat de la macro (nommé exmple_aprés.xls dans le dossier Dossier joints) seulement, au lieu d'avoir l'extension ".xls" le contenu ainsi que la disposition en colonne , je cherche à l'avoir dans un fichier .csv.
    La seule différence que je vois entre les deux, c'est le format scientifique des valeurs de la quatrième colonne.

    Ou alors c'est que tu veux conserver dans ton CSV des colonnes comme dans un tableau Excel, ce qui, par nature, est impossible. Par nature, le CSV, ce sont juste des données séparées par des virgules. Ca ne contient pas de format ni de colonnes.

    A moins de transformer les valeurs en texte, et de rajouter des espaces en début en fonction du nombre de caractères. C'est ça que tu souhaites ?

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut
    Oui la difference entre exemple_avant.csv et exemple_apres.xls c 'est le remplacement de l'ecriture scientifique en écriture "standard" ainsi que la mise en forme en colonne de tel maniere à séparer la valeur se trouvant entre le séparteur "," au sein d'une même cellule (dans exemple_avant.csv) par des colonne ou chaque valeur défini une entité d'où le "Att1", "Att2".
    La mise en forme en colonne m'est indispensable pour le traitement que je voudrai faire aprés sur le fichier et il est aussi indispensable pour ce même traitement que l'extension soit en ".csv" pour l'ensembe des fichiers dans le dossier "Dossier".
    Ci-joints un exmple type en terme de contenu(d'un fichier résultant du traitement de la macro) , mise en forme et extension que devraient avoir tout les fichiers du dossier "Dossier".

    Dossier.rar

    Merci encore pour votre précieuse aide.

  15. #15
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    J'ai cru un instant que j'avais compris ton problème mais en regardant ton dernier exemple, je ne comprends plus rien.

    Sérieux, il faudrait que tu en dises plus sur le traitement que tu comptes en faire et sur ce que tu veux exactement.

    La seule différence que je vois entre ton "bon" CSV (ton dernier exemple) et ton "mauvais" CSV (celui de exemple précédent, tu m'arrêtes si je me trompe entre "bon" et "mauvais"), c'est que le premier a comme séparateur des ";" et l'autre des ",".

    Est-ce bien ça ton problème ?

    Effectivement, quand on sauvegarde manuellement, le séparateur du CSV est un ";" mais quand on sauvegarde en VBA avec l'option FileFormat:=xlCSV (ce qui est l'option qu'Excel propose quand on fait un enregistrement automatique de macro en faisant l'enregistrement manuel), le séparateur est un ",".

    A priori, ça ressemble à un bug.

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut
    D'abord je m'excusepour mon manque de clareté à toutes les personnes qui ont bien voulu donner de leur temps pour m'aider. Merci donc Marc-L, Menhir,mercatog pour leur patience.
    Comme une image vaut mieux qu'un long discours je joints deux captures d'écran montrant le fichier avant traitement et aprés traitement.
    J'ajouterai juste que ce que je voudrai c'est que l'extension du fichier aprés traitement soit en ".csv".

    Images.rar

    Merci à tous pour votre aide et j'éspère que vous pourrez me donner un coup de main pour ce problème.

  17. #17
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Il suffit de changer le Séparateur de listes en virgule dans Personnaliser ce format de Options régionales et linguistiques du Panneau de configuration de ton Windows pour qu'à l'ouverture, le fichier .CSV sera ouvert en colonnes comme tu le souhaite. En tout cas, il est enregistré comme tout le monde le dit en listes séparés par un séparateur (, ou ; qui dépend des réglages du panneau de configuration)

    Ce code suffira
    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
    Sub TRANSFORM()
    Dim FolderName As String, FName As String
    Dim Wbk As Workbook
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    FolderName = "C:\Users\SONY\Desktop\Dossier\"
     
    FName = Dir(FolderName & "*.csv")
    Do While Len(FName)
        Set Wbk = Workbooks.Open(FolderName & FName)
        With Wbk
            With .Worksheets(1)
                LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
                .Range("A1:A" & LastLig).TextToColumns Destination:=.Range("A1"), Comma:=True
                .Range("A1:F" & LastLig).NumberFormat = "General"
                .Range("G1:G" & LastLig) = 0
     
                .Rows(1).Insert
                .Range("A1:G1").Value = Array("Att1", "Att2", "Att3", "Att4", "Att5", "Att6", "Class")
            End With
            .Close True
        End With
        Set Wbk = Nothing
        FName = Dir
    Loop
    End Sub

  18. #18
    Membre averti Avatar de arosec
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 324
    Points
    324
    Par défaut
    Bonsoir,

    Exemple de macro pour exporter manuellement des données d'excel dans un fichier plat (txt, csv...).
    C'est très "bourrin" mais on a l'avantage de pouvoir tout contrôler (le séparateur, le retour à la ligne, on peut modifier des données à la volée...)

    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
     
    Sub exportToCsv()
    Dim csv As TextStream
    Dim r As Long
     
      Set csv = CreateObject("Scripting.FileSystemObject"). _
                CreateTextFile("c:\acc_00002.csv", True, False)
     
      r = 1
      With ThisWorkbook.Worksheets("acc_00002")
        While .Cells(r, 1) > ""
          csv.WriteLine .Cells(r, 1) & _
                  ";" & .Cells(r, 2) & _
                  ";" & .Cells(r, 3) & _
                  ";" & .Cells(r, 4) & _
                  ";" & .Cells(r, 5) & _
                  ";" & .Cells(r, 6) & _
                  ";" & .Cells(r, 7)
          r = r + 1
        Wend
      End With
     
      csv.Close
      Set csv = Nothing
     
    End Sub
    Cdlt,

  19. #19
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 86
    Points : 61
    Points
    61
    Par défaut
    Merci arosec mais la macro ça ne fait pas exactement ce que je cherche à faire , j'espere qu'avec les captures d'ecrans que j'ai joints au post precedent je pourrai avoir de l'aide?
    Merci pour votre temps et votre attention.

  20. #20
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par hichemnho Voir le message
    Merci arosec mais la macro ça ne fait pas exactement ce que je cherche à faire
    Si tu prenais la peine de décrire clairement et en détail ce que cette macro ne fait pas comme tu souhaites, ça ne serait pas mieux ?
    Je te jure que c'est épuisant de devoir te tirer les vers du nez.

    Je pense que ton problème viens du fait que Excel a des paramètres français (";" comme séparateur de données dans le CSV, "," comme séparateur de décimales) et que VBA a des paramètres anglo-saxons ("," comme séparateur de données, "." comme séparateur de décimales).
    Est-ce que tu as testé ce que t'as proposé Mercatog ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/05/2004, 12h55

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