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 :

Transfert de données d'un fichier xlsx à csv [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 17
    Par défaut Transfert de données d'un fichier xlsx à csv
    Bonjour à tous,

    J'ai un petit problème sur une macro que je suis entrain de réaliser.
    Pour schématiser :
    - La macro ouvre un fichier excel (.xlsx)
    - Copie une plage de données
    - Ouvre un fichier (.csv)
    - colle la plage de données en valeur
    - Enregistre le fichier (.csv) J'ai des messages d'erreurs à cette étape
    - Boucle sur tous les fichiers .xlsx

    Elle fonctionne très bien mais j'ai un problème lié au format de mes fichiers à l'enregistrement.

    Je m'explique, voici ce que je vois quand j'ouvre un fichier .CSV à partir d'Excel :
    Nom : CSV1.JPG
Affichages : 255
Taille : 29,9 Ko

    Et voici ce que je vois quand j'ouvre le même fichier (un .CSV), mais à partir de VBA,
    Nom : CSV2.JPG
Affichages : 257
Taille : 30,4 Ko

    C'est le premier problème, j'ai l'impression que VBA me supprime la mise en forme initiale des données et "scinde" toutes les données (en colonnes) dans une même ligne.

    Quand je lance ma macro :
    - Mes données se copient correctement
    - La mise en forme est conforme car liée au range de la macro
    - Par contre à l'enregistrement, je perd la mise en forme et le fichier devient similaire à la deuxième capture d'écran. J'ai également des messages d'erreurs lors de l'enregistrement, mais le fichier s'est pourtant correctement enregistré.

    Quand je déroule les étapes de la macro une par une, lorsqu'elle ouvre le fichier .CSV, la mise en forme est conforme à la première capture d'écran (pourtant quand je souhaite juste ouvrir un fichier .CSV sans passer par l’exécution étape par étape j'ai la mise en forme de la deuxième impression écran), exactement pareil quand je colle mes valeurs, et après l'enregistrement, j'obtiens toujours la mise en forme de la deuxième impression écran.

    J'espère avoir été compréhensible.

    Quelqu'un est-il en mesure de me dire si ce que je souhaite faire est possible avec ces différents types de fichiers ?

    Mon code (qui fonctionne) :
    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
    37
    38
    39
    40
    ub Automatisation()
     
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim Newwb As Workbook
    Dim Newws As Worksheet
    Dim DerLigne As Long
    Dim Chemin As String, Fichier As String, Chemin_F As String, Chemin_V As String, Chemin_F_V As String, Name As String
     
    Application.ScreenUpdating = False
     
    Chemin = "CHEMIN\" 'Repertoire des extractions en.xlsx
    Fichier = "0100.xlsx" 'Conserne tous les fichiers en /
     
    Set wb = Workbooks.Open(Chemin & Fichier)
    Set ws = wb.Worksheets("CMBU_BUDGET")
     
    DerLigne = ws.Range("G" & Rows.Count).End(xlUp).Row 'Defini le numéro de la dernière ligne renseignée en colonne "G"
    ws.Range("A1:" & "G" & DerLigne).Copy 'Copie toutes les cellules de "A1" à la dernière ligne non vide de la colonne "G"
     
    Name = wb.Name 'Donne le numéro de dossier.xlsx
    Name = Left(Name, InStrRev(Name, ".") - 1) ' donne le numéro de dossier sans le ".xlsx"
     
    'DESTINATION DES FICHIERS A OUVRIR:
    Chemin_F = "CHEMIN\" 'Chemin fixe
    Chemin_V = Name & "\" 'Chemin Variable => Donne la partie variable du Chemin (qui est est nom du classeur sans le .xlsx)
    Chemin_F_V = Chemin_F & Chemin_V 'Donne le chemin définitif
     
    Set Newwb = Workbooks.Open(Chemin_F_V & "CMBU_BUDGET.csv") 'ouvre le fichier de destination.CSV
    Set Newws = Newwb.Worksheets("CMBU_BUDGET") 'Ouvre la feuille CMBU_BUDGET de newwb
     
    Newws.Range("A:G").ClearContents
    ws.Range("A1:" & "G" & DerLigne).Copy 'Copie toutes les cellules de "A1" à la dernière ligne non vide de la colonne "G"
    Newws.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False 'Colle la sélection en valeur à partir de A1
     
    wb.Close savechanges:=False 'Ferme le classeur en n'enregistrant pas les modifications
    Newwb.Save
    Newwb.Close
     
    End Sub
    Merci par avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 17
    Par défaut
    Petit correctif :

    Je précise : je n'ai pas intégré la boucle dans ma macro pour le moment, j'ai juste fait un test sur 1 fichier

    Le collage des valeurs se fait bien (identique à la première impression écran), c'est au moment de l'enregistrement que je perd ma mise en forme, et que j'obtiens la deuxième capture d'écran

    Pour info quand je lance ma macro j'ai deux messages "d'erreurs" liés a l'enregistrement (pourtant le fichier s'est bien enregistré avec le code ci-dessous) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Newwb.Save 'le fichier csv
    Newwb.Close
    la 1ere :
    Nom : Erreur1.JPG
Affichages : 235
Taille : 35,5 Ko
    La 2ème :
    Nom : Erreur2.JPG
Affichages : 247
Taille : 20,0 Ko



    -----------------------------------------------------------
    Autre bizarrerie,
    Quand j'arrête ma macro au collage des valeurs (là ou la mise en forme est toujours ok), si j'enregistre manuellement "sous" et que je choisi un autre répertoire, j'ai le message :
    Nom : CSV4.JPG
Affichages : 216
Taille : 25,3 Ko
    Si je clique sur "oui", le fichier est correctement enregistré et la mise en forme conservée. Par contre quand je veux quitter le fichier, un autre message apparaît :
    Nom : CVS5.JPG
Affichages : 223
Taille : 20,9 Ko
    Là je suis obligé de cliquer sur "non" car sinon j'ai des autres messages d'erreurs qui apparaissent. En cliquant sur "Non" le fichier à tout de même été sauvegardé dans un autre répertoire avec la mise en forme conservée

    Si j'ajoute dans mon macro .saveas, même problème, la mise en forme n'est plus bonne ?? Ca fonctionne uniquement si je ne passe pas par VBA pour l'enregistrement. Or j'ai plus de 70 fichiers à ouvrir & enregistrer

    Quelqu'un peut-il m'aider sur la démarche à suivre pour garder la mise en forme à l'enregistrement ?

    Par avance, merci

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 17
    Par défaut
    Salut à tous,

    Pour info j'ai trouvé la solution, il fallait mettre dans le code : Local:=True à l'ouverture et à l'enregistrement du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set Newwb = Workbooks.Open(Chemin_F_V & "CMBU_BUDGET.csv", Local:=True) 'ouvre le fichier.CSV
    Newwb.SaveAs Filename:=Chemin_F_V & "CMBU_BUDGET.csv", Local:=True 'Ferme le fichier .CSV

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/02/2015, 15h54
  2. Réponses: 7
    Dernier message: 28/10/2012, 20h44
  3. Réponses: 13
    Dernier message: 19/10/2012, 12h48
  4. [PPT-2003] transfert de donné entre deux fichier du meme repertoire
    Par yvespi dans le forum VBA PowerPoint
    Réponses: 8
    Dernier message: 04/05/2010, 22h01
  5. transfert des données d'un fichier text vers un fichier excel sous VB
    Par insane_80 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/09/2006, 13h32

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