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 :

Import puis formatage données CSV


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Septembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Septembre 2011
    Messages : 3
    Par défaut Import puis formatage données CSV
    Bonjour,

    D'avance, merci de votre aide car je sèche littéralement...

    Voila, j'ai réussi grâce aux sujets antérieurement postés sur le forum à générer un fichier CSV à partir d'un fichier Texte contenant des données contiguës.

    Voici le code que j'ai pu adapter :

    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
    Sub Importer()
     
        Dim I As Long
        Dim LigneLue As String, LigneÉcrite As String
        Dim TabloIntervalle
     
        'tableau qui donne le numéro de départ des sections et leurs longueurs
        TabloIntervalle = Array(1, 10, 11, 5, 16, 6, 22, 15, 38, 28)
     
        'si le fichier existe, on le supprime
        If Dir("Q:\Documents\PRO\STATS DP\resultat.csv") <> "" Then Kill "Q:\Documents\PRO\STATS DP\resultat.csv"
     
        'Crée le fichier à écrire
        Open "Q:\Documents\PRO\STATS DP\resultat.csv" For Append As #1
        'lecture du fichier original
        Open "Q:\Documents\PRO\STATS DP\JOUNPROD_STAT_TEST.txt" For Input As #2
        Do Until EOF(2)
            LigneÉcrite = ""
     
            'lecture ligne par ligne
            Line Input #2, LigneLue
            For I = 0 To UBound(TabloIntervalle) - 1 Step 2
                LigneÉcrite = LigneÉcrite & Mid(LigneLue, TabloIntervalle(I), TabloIntervalle(I + 1)) & ";"
            Next
     
            'écriture de chaque ligne transformée
            Print #1, LigneÉcrite
        Loop
     
        Close #1
        Close #2
     
    End Sub
    À présent, je dois copier les colonnes (sans titre) du fichier .CSV généré pour les coller dans mon tableau courant. Je souhaitais donc développer une petite macro (grâce notamment à l'enregistreur de macros car je suis débutant) sauf que le résultat n'est pas au rendez-vous car toutes les données issues de mes différentes colonnes (issues je le rappelle du fichier CSV) atterrissent dans une seule et unique colonne de mon fichier courant.

    Pis encore, l'exécution de cette macro entraîne la modification de mon fichier source...(CF pièces jointes).

    Dans l'idéal voici ce que je souhaiterais :

    1/ Invitation à sélectionner le fichier CSV dont je souhaite extraire les colonnes (A à E);
    2/ Extraction des colonnes comportant des données ou pas (copier cellules vides aussi) ;
    3/ Coller les colonnes dans mon fichier courant "ZA-STATS.xlsm" à partir de la cellule J2 et que chaque donnée séparée par un point virgule se range automatiquement dans les colonnes ad hoc ;
    4/ Fermeture du fichier CSV source sans enregistrer

    Voila je vous remercie d'avance de votre aide.

    Linuxien
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par linuxien2001 Voir le message
    (CF pièces jointes)
    De nombreux participants actifs de ce forum (dont moi-même) n'ouvrent pas les fichiers joints.
    Lire ça : https://www.developpez.net/forums/d8...s-discussions/

    Je souhaitais donc développer une petite macro (grâce notamment à l'enregistreur de macros car je suis débutant) sauf que le résultat n'est pas au rendez-vous car toutes les données issues de mes différentes colonnes (issues je le rappelle du fichier CSV) atterrissent dans une seule et unique colonne de mon fichier courant.
    Sans doute parce que tu as utilisé la méthode Workbooks.Open pour ouvrir ton fichier.
    Il est préférable d'utiliser la méthode Workbooks.OpenText qui permet de mieux contrôler les délimiteurs et la nature des colonnes.
    Lire ceci : https://docs.microsoft.com/fr-FR/off...books.opentext

    Pis encore, l'exécution de cette macro entraîne la modification de mon fichier source...
    Sans doute parce que tu fais un Save de ton fichier après ouverture alors que tu devrais faire un SaveAs pour lui spécifier le nouveau format et en faire un XLSX (ou autre format Excel).
    Lire ceci : https://docs.microsoft.com/fr-FR/off...orkbook.saveas

    1/ Invitation à sélectionner le fichier CSV dont je souhaite extraire les colonnes (A à E);
    Utilise la méthode GetOpenFileName
    https://docs.microsoft.com/fr-FR/off...etopenfilename
    Attention : cette méthode permet de sélectionner un fichier mais elle ne l'ouvre pas. Pour ouvrir le fichier sélectionné, il faut ajouter un Open ou OpenText derrière.

    2/ Extraction des colonnes comportant des données ou pas (copier cellules vides aussi) ;
    Il serait plus simple d'ouvrir ton fichier avec un OpenText puis de supprimer les colonnes que tu ne veux pas conserver avec un Delete sur les références Column concernées.

  3. #3
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Lorsqu'il s'agit d'importer des csv, exporter csv.
    Avec Office 2016, il faudrait peut-être envisager le power query, celui ci offre une multitude d'outils bien compliquer à mettre en œuvre avec du code Vba, et est très facile à prendre en main.

    Bat

Discussions similaires

  1. Code JAVA pour import données CSV
    Par tim_m dans le forum Langage
    Réponses: 11
    Dernier message: 16/11/2009, 11h55
  2. importation données csv
    Par chti_kiki dans le forum 1&1
    Réponses: 0
    Dernier message: 24/06/2009, 15h52
  3. [MySQL] Importation données csv dans mysql
    Par krfa1 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/11/2008, 09h36
  4. [MySQL] Importation données csv vers mysql via php
    Par ariel257 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/06/2008, 16h56
  5. [MySQL] importer des données .csv dans BDD MySql
    Par priscillia dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/06/2007, 09h40

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