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 :

Importer les données d'un fichier .csv vers une feuille XL


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2011
    Messages : 31
    Points : 4
    Points
    4
    Par défaut Importer les données d'un fichier .csv vers une feuille XL
    Bonjour,

    J'utilise le code ci dessous pour importer des données d'un fichier XL vers mon classeur XL. cependant, je cherche à faire la même chose sur des données text (.cvs)

    Objectif : récupérer certaines colonnes d'un fichier csv vers mon classeur XL

    Pourriez vous SVP m'aider à adapter ce code?
    Merci d'avance,

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub import()
     
    Annee = UserForm1.ComboBox1
     
    Reponse = MsgBox("Voulez vous charger les données du fichier  pour l'année " & Annee & "?", vbQuestion + vbYesNo)
    If Reponse = vbYes Then
    Dim Cn As ADODB.Connection
    Dim oCat As ADOX.Catalog
    Dim Fichier As Variant
    Dim Feuille As ADOX.Table
     
    Dim Rst As ADODB.Recordset
    Dim texte_SQL As String
    Dim Ar() As String, i As Long
     
        Fichier = Application.GetOpenFilename("Fichier Excel, *.csv;*.xlsx")
        If Fichier = False Then Exit Sub
     
        Set Cn = New ADODB.Connection
        Set oCat = New ADOX.Catalog
     
        'Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & ";Extended Properties=Excel 8.0;"
       With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
     
        Set oCat.ActiveConnection = Cn
        For Each Feuille In oCat.Tables
            i = i + 1
            ReDim Preserve Ar(i)
            Ar(i) = Feuille.Name
        Next Feuille
     
        texte_SQL = "SELECT Annee,Semaine,Structure_Utilisateu FROM [" & Ar(1) & "]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
       Feuil3.Range("CM4").CopyFromRecordset Rst
     
        Set Feuille = Nothing
        Set oCat = Nothing
        Cn.Close
        Set Cn = Nothing
     MsgBox "Données importées"
     
    Else
     MsgBox "Vous n'avez exporté aucun fichier"
    End If
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    plein d'exemples sur ce forum,


    Tu peux aussi utiliser l'Enregistreur de macros pour ouvrir ton fichier .csv donnant ainsi une base de code …

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2011
    Messages : 31
    Points : 4
    Points
    4
    Par défaut
    Bonjour Marc-L,

    j'ai cherché dans ce forum, je n'arrive pas toujours à adapter ce code par rapport un import automatisé des données (.cvs)

    En suivant l'import classique sous excel, il n'y a pas de possibilité de sectionner les colonnes à importer. J'ai un fichier de 100MO et ça prend bcp e temps pour importer toutes le colonnes

    Cdt,

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    J'espère qu'un autre intervenant maitrisant la connection ADO pourra te répondre ...

    J'importe un fichier externe en mémoire afin de le retraiter rapidement mais vu la taille du tien …
    Cela pourrait se transformer en pseudo file mapping, bref une lecture par bloc (mais gros) …

    Sinon il y a la méthode classique de lecture séquentielle ligne par ligne mais cela risque aussi de ramer !

    Il me faudrait aussi un extrait du fichier en pièce jointe pour vérifier sa structure et connaitre quelles sont les données à importer …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Je ne suis pas spécialiste. Mais le code suivant 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
    Sub ExtraireDonneesCSV()
    Dim CN As ADODB.Connection
    Dim Rst As ADODB.Recordset
     
    Set CN = New ADODB.Connection
    Set Rst = New ADODB.Recordset
     
    Dim Chemin As String
    Dim NomFichier As String
    Dim Ligne As Integer
     
    Chemin = "C:\"
    NomFichier = "Fichier2.csv"
     
    CN.Provider = "Microsoft.Jet.OLEDB.4.0"
    CN.ConnectionString = "Data Source=" & Chemin & ";" & "Extended Properties=""text;HDR=Yes;FMT=Delimited;"""
     
    CN.Open
     
    Rst.Open "SELECT Famille, Prenom, Age FROM [" & NomFichier & "] WHERE Age > 30", CN
     
    Rst.MoveFirst
    Ligne = 1
    Worksheets("Feuil1").Cells(Ligne, 5).CopyFromRecordset Rst
     
    Rst.Close
    CN.Close
     
    Set Rst = Nothing
    Set CN = Nothing
    End Sub
    Cordialement

    Docmarti.

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Ton premier problème : Ton code cherche des fichiers xlsx, donc Excel 2007 et plus. Or à partir de Excel 2007, on ne peut plus utiliser le moteur Jet. Il faut utiliser le moteur ACE.

    Tu peux jeter un œil sur cet article. Tu vas voir la chaîne de connexion avec le moteur ACE au bas de la page. Le moteur ACE doit être disponible en téléchargement sur le site de Microsoft.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. [XL-2007] Importer les données d'un fichier .csv vers une feuille XL
    Par aminee1666 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/04/2013, 09h10
  2. Réponses: 1
    Dernier message: 09/01/2012, 14h49
  3. Réponses: 3
    Dernier message: 20/08/2010, 21h48
  4. importer les données d'un fichier excel vers oracle 10g
    Par sarita_ima dans le forum Documents
    Réponses: 2
    Dernier message: 04/09/2009, 13h52
  5. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59

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