none
VBA Excel 2007- FileFormat:=xlCSV RRS feed

  • Question

  • bonjour,

     

    j'ai écris une macro Excel 2007 pour automatiser la génération de fichiers csv. la fin de ma macro est la suivante

     ActiveWorkbook.SaveAs Filename:= _
            "C:\Documents and Settings\Vincent Cor\Mes documents\" & Name _
            , FileFormat:=xlCSV, CreateBackup:=False
       
          ActiveWorkbook.Save
       
        ActiveWindow.Close

    le problème est que le fichier csv généré sort sans séparateur de champ en ; (séparateur virgule à la place) et que l'indicateur de décimale est un point au lieu d'être une virgule

     

    pouvez vous m'aider à corriger le code pour qu'au final le csv généré soit bien un "vrai csv"?*

    merci beaucoup !

    bien cordialement,

    Vincent_C

    samedi 10 avril 2010 10:15

Réponses

  • Bonjour.

    Pour avoir les paramètres régionaux (séparateur ";" et symbole décimal ","), il faut ajouter le paramètre "local" :

    ActiveWorkbook.SaveAs Filename:= _
            "C:\Documents and Settings\Vincent Cor\Mes documents\" & Name _
            , FileFormat:=xlCSV, CreateBackup:=False, Local:=true

    Cordialement.

    Daniel

    samedi 10 avril 2010 10:33
  • Utilise :

    Application.DisplayAlerts = False

    ActiveWorkbook.Save

    ActiveWindow.Close

    Application.DisplayAlerts = True

    Daniel

     

    lundi 12 avril 2010 09:53
  • Une dernière possibilité. Va dans :

    Bouton Office, Options Excel, Options avancées, Options d'édition et vérifie que "Utiliser les séparateurs système" est bien coché.

    Cordialement.

    Daniel

    mardi 13 avril 2010 18:08
  • Bonjour.

    Ce ne me semble pas normal. Est-ce que tu as la possibilié de tester la macro sur un autre ordinateur ? Sinon, tu devrais vérifier si tu as appliqué tous les correctifs, puis si c'est le cas, effectuer une réparation.

    Pour te dépanner, tu peux créer le fichier à partir de la feuille active avec la macro suivante :

    Sub CreerCSV()

    Dim Enrgt As String

    Dim DerLigne As Long

    Close #1

    Open "e:\donnees\daniel\mpfe\test3.csv" For Output As #1

    DerLigne = Cells.Find("*", [IV65536], , , xlByRows, xlPrevious).Row

    For i = 1 To DerLigne

        Enrgt = ""

        For j = 1 To Cells(i, 256).End(xlToLeft).Column

     

            Enrgt = Enrgt & ";" & Cells(i, j)

        Next j

        Enrgt = Right(Enrgt, Len(Enrgt) - 1)

        Print #1, Enrgt

    Next

    Close #1

    End Sub


    Cordialement.

    Daniel

     

    mercredi 14 avril 2010 11:20

Toutes les réponses

  • Bonjour.

    Pour avoir les paramètres régionaux (séparateur ";" et symbole décimal ","), il faut ajouter le paramètre "local" :

    ActiveWorkbook.SaveAs Filename:= _
            "C:\Documents and Settings\Vincent Cor\Mes documents\" & Name _
            , FileFormat:=xlCSV, CreateBackup:=False, Local:=true

    Cordialement.

    Daniel

    samedi 10 avril 2010 10:33
  • Bonjour Daniel,

     

    Merci de votre message. j'ai modifié la macro en conséquence, mais si je laisse les instructions suivantes :

      ActiveWorkbook.Save
       
      ActiveWindow.Close

    les paramètres séparateur"," et symbole décimal "." restent

    Comment faire, SVP ?

    Merci d'avance.

    Bien cordialement,

    Vincent_C

    lundi 12 avril 2010 06:35
  • Bonjour Vincent.

    Est-ce que tu peux modifier les paramètres locaux correspondants dans le panneau de configuration ?

    Cordialement.

    Daniel

    lundi 12 avril 2010 08:59
  • Bonjour Daniel,

    les paramètres locaux sont bien modifiés en séparateur ";" et symbole décimal ","

    lorsque je fais tourner la macro dans les instructions :

      ActiveWorkbook.Save
       
      ActiveWindow.Close

    à la fin, pour fermer le csv, excel me demande confirmation de l'enregistrement et ensuite je clique sur oui pour conserver le format. Si j'ouvre le csv ensuite le format est bon.

    j'aimerais mettre à la fin de la macrà les instructions :

      ActiveWorkbook.Save
       
      ActiveWindow.Close

    pour avoir moins de manipulation à faire, tout en ayant le format souhaité

    Est ce que c'est possible ou faut il absolument passer par l'étape d'enregistrement et de confirmation de la conservation du format, manuellement?

    encore, merci.

    Bien cordialement,

    Vincent

    lundi 12 avril 2010 09:36
  • Utilise :

    Application.DisplayAlerts = False

    ActiveWorkbook.Save

    ActiveWindow.Close

    Application.DisplayAlerts = True

    Daniel

     

    lundi 12 avril 2010 09:53
  • Bonjour,

     

    Merci Daniel pour les conseils ! Vincent, avez-vous résolu votre problème a partir des informations de Daniel ?

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/ff4910bf-dca4-4664-b01e-b58bd860a643
    mardi 13 avril 2010 11:00
  • bonsoir à tous, merci à vous.

    Non en fait, j'ai toujours le même problème qu'hier (voir mon message de 9h36). si je pouvais illustrer avec des imprim écran ce serait peut être plus explicite.

    s'il n'y a pas d'autre possibilité, je peux toujours enregistrer manuellement.

    Merci encore.

    Bien cordialement,

    Vincent

    mardi 13 avril 2010 16:26
  • Tu as le même problème en ajoutant les deux lignes que j'ai mentionnées ? Ici, ce code fonctionne.

    Daniel

    mardi 13 avril 2010 17:00
  • bonsoir,

    le code fonctionne mais le résultat au niveau du csv est toujours le même : les paramètres séparateur"," et symbole décimal "." restent, alors que mes paramètres locaux sont bien modifiés en séparateur ";" et symbole décimal ","

    Bien cordialement,

    Vincent

     

    mardi 13 avril 2010 17:29
  • Une dernière possibilité. Va dans :

    Bouton Office, Options Excel, Options avancées, Options d'édition et vérifie que "Utiliser les séparateurs système" est bien coché.

    Cordialement.

    Daniel

    mardi 13 avril 2010 18:08
  • bonjour,

    "Utiliser les séparateurs système" est bien coché. les séparateurs qui apparaissent dessous sont séparateur de décimales et séparateur de milliers. la notion de séparateur au sens séparateur csv ; n'apparait pas à cet endroit

    Merci encore et bonne journée.

    Bien cordialement,

    Vincent_C

     

    mercredi 14 avril 2010 06:09
  • Bonjour.

    Ce ne me semble pas normal. Est-ce que tu as la possibilié de tester la macro sur un autre ordinateur ? Sinon, tu devrais vérifier si tu as appliqué tous les correctifs, puis si c'est le cas, effectuer une réparation.

    Pour te dépanner, tu peux créer le fichier à partir de la feuille active avec la macro suivante :

    Sub CreerCSV()

    Dim Enrgt As String

    Dim DerLigne As Long

    Close #1

    Open "e:\donnees\daniel\mpfe\test3.csv" For Output As #1

    DerLigne = Cells.Find("*", [IV65536], , , xlByRows, xlPrevious).Row

    For i = 1 To DerLigne

        Enrgt = ""

        For j = 1 To Cells(i, 256).End(xlToLeft).Column

     

            Enrgt = Enrgt & ";" & Cells(i, j)

        Next j

        Enrgt = Right(Enrgt, Len(Enrgt) - 1)

        Print #1, Enrgt

    Next

    Close #1

    End Sub


    Cordialement.

    Daniel

     

    mercredi 14 avril 2010 11:20
  • Bonjour

    regarde si l'une ou l'autre des macros de cette page peut te rendre service (je n'ai pas lu toutes les réponses de Daniel en détail, cela fait peut être doublon).

    http://www.excelabo.net/trucs/csv

     


    Misange - www.excelabo.net
    lundi 19 avril 2010 16:57