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 :

[VBA-E] enregistrement csv


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut [VBA-E] enregistrement csv
    bonjour à tous

    J'aiun bout de code qui me permet de sauvegarder une page d'un fichier excel sous un format csv.

    Mais le fichier est bien enregistrer avec une extension csv parcontre le format du fichier est apparemment rester sous un format xls et non csv.

    Quelque chose doit manquer dans mon code.

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim NomFichier As Variant
     
    NomFichier = Application.GetSaveAsFilename("aze.csv", fileFilter:="Fichier (*.csv), *.csv")
     
    If NomFichier <> False Then
            ActiveWorkbook.SaveAs NomFichier
    Si quelqu'un peut m'aider.

    Merci d'avance

  2. #2
    Membre émérite
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Par défaut
    tu es passé par l'enregistreur de macro?

    Sinon un csv ce n'est rien d'autre qu'un text... Alors avec un peu de code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Open filenamecsv For Output as #1
     
    Close

  3. #3
    Membre éprouvé Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Par défaut
    SaveAs enregistre par défaut au format Excel. Il y a des paramètres à SaveAs, tu as appelé l'aide (il suffit de mettre le curseur sur SaveAs et d'appuyer sur F1 !)

    Le bon code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveAs Filename:=NomFichier, FileFormat:=xlCSV

  4. #4
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    Merci a vous deux mon code est devenu le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim NomFichier As Variant
     
    NomFichier = Application.GetSaveAsFilename("aze.csv", fileFilter:="Fichier (*.csv), *.csv")
     
    If NomFichier <> False Then
            ActiveWorkbook.SaveAs Filename:= _
            NomFichier, _
            FileFormat:=xlCSV
            ActiveWorkbook.Close
    Mais j'ai une autre question qui en decoule, comment je peux repondre oui a la question voulez vous remplacer le fichier existant et non a voulez vous enregistrer le fichier (quand il se ferme puisque je l'enregistre au format csv qu'il me demande si je veux l'enregistrer en xls avant de quitter)

    Si vous avez la reponse merci

  5. #5
    Membre éprouvé Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Par défaut
    Il suffit d'utiliser la fonction DisplayAlert, qui valide ou inhibe tous les messages utilisateur.

    Le code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=NomFichier, FileFormat:=xlCSV
        Application.DisplayAlerts = True

  6. #6
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    merci mgd Sofware tout et tres claire et ça marche impec.

    Cependant j'ai une autre chose que je ne comprend pas c'est que mon fichier csv est sauvegardé avec comme séparateurs des virgules et non des points virgules comme c'est le cas des fichiers csv.

    Comment puis changer cela?

    Merci

  7. #7
    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
    Vesta t'a donné la réponse, pas l'explication, donc, la voici : En Anglais, le point virgule n'existe pas même s'il est traduit (semicolon)
    Avec VBA 97 tout au moins, il n'est pas possible d'enregistrer un csv avec le point virgule comme séparateur par macro (alors que manuellement, c'est possible) On pallie ce problème en créant un fichier texte des données à sauvegarder avec l'extension csv.
    Ce sujet a déjà été traité plusieurs fois sur le forum. Une recherche te permettra sûrement de trouver ça.
    Je regarde de mon côté mais tu devrais jeter un oeil.

    A+
    Tiens, voici l'adresse
    http://www.developpez.net/forums/sho...&highlight=csv
    Lis bien jusqu'au bout

  8. #8
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    J'ai trouvé un de tes code ouskel'nor que j'ai adapté il marche sauf que je ne sais pas pourquoi mon tableau contient 7 colonne et dans mon fichier csv il n'en comporte que 6 il n'integre pas la derniere colonne et je ne comprend pas.

    voici le 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
    Dim x, j, DernièreLigne, DernièreColonne
        Application.ScreenUpdating = False
        ActiveSheet.Range("A1").Select           
        selection.CurrentRegion.Select            
        Set tbl = ActiveCell.CurrentRegion      
        DernièreLigne = tbl.Rows.Count          
        DernièreColonne = tbl.Columns.Count 
        Cells(1, 1).Select
        Open NomFichier For Output As #1
        For x = 1 To DernièreLigne
            For j = 1 To DernièreColonne - 1
                Print #1, Cells(x, j).Formula + ";";  
            Next j
            Print #1, Cells(x, j + 1).Formula        
        Next x
        Close #1                  
            ActiveWorkbook.Close
             Application.DisplayAlerts = True
    un peu d'aide me serait tres utile.
    Merci

  9. #9
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    je viens de trouver quelque chose qui fonctionne j'ai pas compris pour l'instant la suptilité mais apparemment c'etait tout simple, j'ai supprimé le -1 derriere dernierecolonne.

    Merci à tous (encore une fois!)

  10. #10
    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
    Tu as mélangé deux codes. Avec ce code, tu as For i... to DernièreColonne -1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            DernièreColonne = Cells(1, 1).SpecialCells(xlCellTypeBlanks).Column - 1
            'Dernière ligne renseignée
            DernièreLigne = Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row - 1
             'La lecture des cellules commence en A1 dans chaque feuille de calcul
    Si tu veux garder CurrentRegion, supprime le -1 dans "to dernièrecolonne"

    Tu dis

    A+

  11. #11
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    desolé je croyais que c'etait résolu mais j' ai un autre petit soucis en fin de ligne j'ai des point virgule .

    comment puis je terminé ma ligne sans avoir ces points virgules ?

  12. #12
    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
    As-tu bien laissé ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                   '........
                   '........
            Next j
            Print #1, Cells(x, j + 1).Formula
    en sortie de boucle For j ....
    Tu dis

    A+

  13. #13
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    oui j'ai bien ces deux lignes dans mon code.

    le voici en entier direct copier coller:

    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
    Dim x, j, DernièreLigne, DernièreColonne
        Application.ScreenUpdating = False
        ActiveSheet.Range("A1").Select           
        selection.CurrentRegion.Select    
        Set tbl = ActiveCell.CurrentRegion   
        DernièreLigne = tbl.Rows.Count    
        DernièreColonne = tbl.Columns.Count 
        Cells(1, 1).Select
        Open NomFichier For Output As #1
        For x = 1 To DernièreLigne
            For j = 1 To DernièreColonne
                Print #1, Cells(x, j).Formula + ";";  
            Next j
            Print #1, Cells(x, j + 1).Formula      
        Next x
        Close #1
     
            ActiveWorkbook.Close
             Application.DisplayAlerts = True

  14. #14
    Membre éprouvé Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Par défaut
    Puisque le but est de fournir un CSV avec des points virgules, pourquoi ne pas traiter directement icelui après l'export ?
    Voici le code que moi personnellement j'aurais employé
    Attention, il est entendu qu'aucune cellule ne contient de texte à virgule. Par contre il peut y avoir des valeurs décimales à virgule, car celles-ci sont exportées au format anglo-saxon (points). On en profitera pour les remettre au format français (séparateur décimal = virgule)

    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
        '.....  (Demande du nom du fichier CSV --> NomFichier)
     
        Dim NomClasseur$, nFile%, sDummy$
     
        NomClasseur = ThisWorkbook.Path & "\" & ThisWorkbook.Name
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=NomFichier, FileFormat:=xlCSV
        ActiveWorkbook.SaveAs Filename:=NomClasseur, FileFormat:=xlNormal
        Application.DisplayAlerts = True
     
     
        'Lecture du fichier CSV
        nFile = FreeFile()
        Open NomFichier For Binary Access Read Write As #nFile  'Ouverture du fichier en binaire
        sDummy = Space$(LOF(nFile))                             'Taille chaine = taille fichier
        Get #nFile, 1, sDummy                                   'Lecture totale du fichier
     
        'Remplacement des virgules par des point-virgules
        sDummy = Replace(sDummy, ",", ";")
     
        'Remplacement des points par des virgules (valeurs décimales)
        sDummy = Replace(sDummy, ".", ",")
     
        'Réécriture du fichier
        Put #nFile, 1, sDummy
     
        'Fermeture fichier
        Close #nFile                                            'Fermeture du fichier
    Autre avantage : Le classeur reprend son nom en "xls" au lieu de garder celui en "csv"

    Ce code a été testé sous Excel 2003.

  15. #15
    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
    Alors tu as une colonne de trop et tu dois mettre to DernièreColonne -1
    S'il alors il te manque une colonne c'est que le dernier ; est un séparateur utile.

    Tu dis

    A+

    Tout dépend de ce que tu veux faire de ton csv, une colonne de plus ajoute un champ vide dans Access mais n'a aucune autre incidence.

  16. #16
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    j'ai dejà tester ce code mgd_software est ce code me genere bien un fichier csv, mais pas avec des points virgules, mais des virgules et le logiciel qui importe les données au format csv n'accepte que les points virgules.

    A moins que je me trompe et que je suis passé à coté de quelque chose ?

  17. #17
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    Si je rajoute -1 deriere to dernierecolonne ouskel'n'or il me manque la derniere colonne de donnée et en plus j'ai toujours un point virgule en fin de ligne.

    je ne sais plus quoi faire.

  18. #18
    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
    Alors le dernier séparateur est un séparateur utile pour définir la dernière colonne.
    Ça pose problème à l'application avec laquelle tu ouvres le csv ?

    A+

  19. #19
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    oui l'application ne veut pas l'ouvrir si il y des point virgule en fin de ligne, je les supprime manuellement et pas de soucis ça passe et d'ailleur excel genere egalement un fichier csv sans point virgule en fin de ligne.

    si tu as une solution our ne plus avoir ce point virgule en fin de ligne je suis preneur.

  20. #20
    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
    Je m'inquiète, tu ne donnes aucun nom à ton fichier.
    MonFichier est une variable, tu dois indiquer le chemin et le nom du fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        nomFichier = "c:\MonFichier.csv"
    et je n'ai pas l'impression, puisque tu as fais un copier/coller, que ce soit le cas
    Auquel cas, c'est toujours le même fichier.csv que tu contrôles sans les modifs réalisées dans ton code

    Tu dis

    A+

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

Discussions similaires

  1. [VBA-E]Enregistrement csv séparateur:";"
    Par Yolak dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2020, 10h56
  2. [VBA-A]Création CSV
    Par Mad X dans le forum VBA Access
    Réponses: 11
    Dernier message: 17/03/2006, 18h40
  3. [VBA] aucun enregistrement dans un recordset
    Par gyzmo5 dans le forum Access
    Réponses: 2
    Dernier message: 07/02/2006, 12h33
  4. [VBA-E] Enregistrer sous un autre format
    Par Bashaq dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/10/2005, 00h33
  5. [VBA-E] enregistrer et fermer en un clic
    Par christouffes dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/01/2005, 19h52

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