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] Problème pour enregistrer en csv (; et non ,) par macro


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [VBA-E] Problème pour enregistrer en csv (; et non ,) par macro
    Bonjours,
    Je me permet de solliciter vos compétences en VBA.

    Je travail sous office 2000

    Si enregistre une feuille Excel en csv (en utilisant la méthode normal ( Fichier , enregistrer sous ….) j'obtiens bien un fichier du style 12;56;45 .

    Avec l'enregistreur de macro j'ai sauvé cette méthode sous le non de macro 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 10/12/2005 par user
    '
     
    '
        ActiveWorkbook.SaveAs Filename:= _
            "C:\Documents and Settings\user\Mes documents\Essai\Classeur2.csv", FileFormat _
            :=xlCSV, CreateBackup:=False
    End Sub
    A présent si j'utilise cette macro 1 je n'ai pas de ; (point virgule) mais de , ( virgule) 12,56,45.

    Connaissez-vous la raison et existe t-il une solution à ce problème :

    Merci d'avance

    Je te prie de m'excuser pour mon orthographe

    Bounette

  2. #2
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, le problème est connu : l'anglais ne reconnaît pas le point virgule qu'il sait pourtant traduire "semicolon"
    Pour faire ce que tu veux, tu dois créer ton fichier comme un fichier texte (avec extension csv)
    Je regarde si j'ai le code mais ce sujet a été moulte fois traité sur le forum, tu devrais pouvoir le retrouver en faisant une recherche

    Tu dis si tu trouves

    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 99
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Le problème est que quand tu passes par vba, il enregistre en format anglais pour le csv => , et non pas ; et "" autour des champs texte.

    J'ai fait une procédure qui converti un fichier csv en xls :

    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
    Sub Main()
     
    Dim derniere_ligne As Integer
    Dim derniere_colonne As Integer
    Dim i As Integer
    Dim j As Integer
    Dim sortie As String
     
    ActiveSheet.Range("A1").Select
     
    derniere_ligne = ActiveCell.SpecialCells(xlLastCell).Row
    derniere_colonne = ActiveCell.SpecialCells(xlLastCell).Column
     
    Cells(1, 1).Select
     
    Open g_fichier_csv For Output As #1
    For i = 1 To derniere_ligne
        sortie = ""
        For j = 1 To derniere_colonne - 1
            'Cells(i, tblColonne(j).NumberFormat = "yyyy-mm-dd"
            'MsgBox Cells(i, j).Format, vbInformation, "TUTU"
            sortie = sortie & Cells(i, j).Text & ";"
        Next j
        sortie = sortie & Cells(i, j + 1).Text
        Print #1, sortie
    Next i
    Close #1
    Application.ScreenUpdating = True
     
    End Sub
    il te reste plus qu'a l'adapter pour ta situation.

  4. #4
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai trouvé + vite que je ne pensais

    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
    Sub CréerFichierCSV()
    Dim i, 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 "p:\MonFichier.csv" For Output As #1
        For i = 1 To DernièreLigne
            For j = 1 To DernièreColonne - 1
                Print #1, Cells(i, j).Formula + ";";  'sépare tes données par ;
            Next j
            Print #1, Cells(i, j + 1).Formula         'Fin de ligne
        Next i
        Close #1
    End Sub
    Certains préfère ajouter une colonne vide et enlèvent - 1 à " For j = 1 To DernièreColonne - 1"

    Tu fais comme tu veux

    A+

    PS - Les trucs avec ***** : Valable seulement avec une plage de données cohérente - pas de ligne ni colonne entièrement vides dans ta plage

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Merci
    Merci à tous,

    Je vais me mettre au travail pour l'adapter à mon travail

    A+

  6. #6
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Hello!
    Oui, je me souviens qu'on a donné plusieurs fois le code de création d'un csv avec le bon séparateur. Et pour être complet, il me semble bienque quelqu'un avait aussi proposé de parcourir le fichier csv "mauvais" ligne par ligne, et de transformer à ce moment là les "," en ";"
    Mais à ce niveau là, le choix relève presque de la philosophie...
    Et à quelques jours de Noël, je ne peux plus être philosophe...

Discussions similaires

  1. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  2. [VBA-E] Problème pour coder une boucle
    Par lord-asriel dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/03/2007, 10h10
  3. Réponses: 4
    Dernier message: 14/02/2007, 11h44
  4. Réponses: 1
    Dernier message: 21/02/2006, 15h46
  5. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27

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