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 :

Conserver les zéros devant un nombre lors de l'export d'une feuille Excel en csv


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Comptable
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Conserver les zéros devant un nombre lors de l'export d'une feuille Excel en csv
    Bonjour,

    Je débute en VBA et je dois exporter une feuille Excel "Dossier_EUR" du fichier "ARCHIDOSS" dans un fichier CSV (qui sera importé dans une application).
    Dans la colonne A de cette feuille Excel figurent des nombres sur 11 caractères dont certains commencent par "0" ou "00",..., cette colonne est bien au format texte. Or lorsque je crée mon fichier CSV ces 0 ne sont pas conservés.

    La macro que j'utilise est la suivante :

    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
    Sub Export_Dossier()
     
     
     
    Dim fso As New FileSystemObject
    Dim MonFichier As TextStream
     
     
        DateA = Workbooks("ARCHIDOS.xlsm").Sheets("MENU").Cells(8, 5).Value
        DateM = Workbooks("ARCHIDOS.xlsm").Sheets("MENU").Cells(8, 4).Value
        Ref = Workbooks("ARCHIDOS.xlsm").Sheets("MENU").Cells(8, 3).Value
     
    Set MonFichier = fso.CreateTextFile("R:\Dossier _" & DateA & "_" & DateM & "_" & Ref & ".csv")
     
    i = 16
    While Sheets("Dossier_EUR").Cells(i, 2).Value <> ""
        MonFichier.WriteLine Sheets("Dossier_EUR").Cells(i, 2).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 3).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 4).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 5).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 6).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 7).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 8).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 9).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 10).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 11).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 12).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 13).Value
        i = i + 1
    Wend
     
     
    MonFichier.Close
     
    End Sub

    J'ai essayé de rajouter ce bout de macro après le "Wend":
    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 xCell As Range
    Dim Plage As Range
    Dim x As String
    Dim y As Byte
    Dim z As String
     
    Set Plage = Range("A2:A" & Cells(Rows.Count, "a").End(xlUp).Row)
    Plage.NumberFormat = "@"
     
    For Each xCell In Plage
     
        If Len(xCell.Value) < 11 Then
            x = xCell.Value
            y = 11 - Len(xCell.Value)
            z = Application.WorksheetFunction.Rept("0", y)
            xCell.Value = z & x
        End If
     
    Next xCell
    Mais cela ne fonctionne pas.

    Pourriez-vous m'aider s'il vous plait ?

    Merci.

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonjour
    essayer avec le format personnalisé "0000" si tu doit avoir 4 chiffre
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour,
    J'utilise une mise au format des cellules, puis dans un deuxième temps cells.Text et non pas cells.Value pour enregistrer en CSV le contenu (visible à l'écran) de la cellule et non pas sa valeur.
    Attention, la largeur de la cellule ne doit pas être tronquée sans quoi il est enregistré des ##, comme la représentation à l'écran.

    Bonne programmation.

  4. #4
    Candidat au Club
    Femme Profil pro
    Comptable
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Je vous remercie pour votre aide.

    J'ai essayé de faire une mise au format des cellules du fichier Excel d'origine en ajoutant :

    Sheets("Dossier_EUR").Column("A:A").FormatNumber = "@" dans la macro
    Puis en mettant.Text au lieu de .Value au niveau de l'écriture de la première colonne dans le fichier CSV

    soit :

    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
    Sub Export_Dossier()
     
     
     
    Dim fso As New FileSystemObject
    Dim MonFichier As TextStream
     
     
        DateA = Workbooks("ARCHIDOS.xlsm").Sheets("MENU").Cells(8, 5).Value
        DateM = Workbooks("ARCHIDOS.xlsm").Sheets("MENU").Cells(8, 4).Value
        Ref = Workbooks("ARCHIDOS.xlsm").Sheets("MENU").Cells(8, 3).Value
     
     
    Sheets("Dossier_EUR").Column("A:A").FormatNumber = "@"
     
    Set MonFichier = fso.CreateTextFile("R:\Dossier _" & DateA & "_" & DateM & "_" & Ref & ".csv")
     
    i = 16
    While Sheets("Dossier_EUR").Cells(i, 2).Value <> ""
        MonFichier.WriteLine Sheets("Dossier_EUR").Cells(i, 2).Text & _
        (";") & Sheets("Dossier_EUR").Cells(i, 3).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 4).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 5).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 6).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 7).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 8).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 9).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 10).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 11).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 12).Value & _
        (";") & Sheets("Dossier_EUR").Cells(i, 13).Value
        i = i + 1
    Wend
     
     
    MonFichier.Close
    Mais cela ne fonctionne pas.

    Petite précision : le format de la première colonne est sur 11 caractères.

    Je vous remercie pour votre aide.

    End Sub

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    re
    essaye avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Dossier_EUR").Column("A:A").NumberFormat = "00000000000"
    attention :

    .NumberFormat
    et non pas

    .FormatNumber
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/10/2017, 22h23
  2. Réponses: 1
    Dernier message: 19/01/2015, 21h59
  3. Réponses: 7
    Dernier message: 10/06/2013, 15h32
  4. Formater chiffres à 6 nombres en conservant les zéros devant
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/06/2011, 09h02
  5. Pb lors de la fermeture d'une feuille excel
    Par justin92330 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2008, 12h01

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