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 :

Importation de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    sql
    sql est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut Importation de données
    Bonjour,

    Je souhaite créer un macro afin d'importer les données provenant d'un fichier .xls ou .csv. Pour ce faire j'ai lancé l'enregistreur de macro et j'ai obtenu le code d'import de fichier:

    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 Macro1()
     
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
    "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password=" """;User ID=Admin;Data Source=C:\Documents and Settings\Eric\Bureau\données brutes.xls;" _
    , _
    "Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database " _
    , _
    "Password="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk" _
    , _
    " Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet O" _
    , _
    "LEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" _
    ), Destination:=Range("A1"))
    .CommandType = xlCmdTable
    .CommandText = Array("Feuil1$")
    .Name = "données brutes"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = True
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .SourceDataFile = _
    "C:\Documents and Settings\Eric\Bureau\données brutes.xls"
    .Refresh BackgroundQuery:=False
    End With
    End Sub
    Maintenant je souhaite modifier ce code pour pouvoir sélectionner le fichier à importer via une boîte de dialogue. Pour ce faire j'ai modifié le code de la manière 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 Macro1()
     
    fileToOpen = Application.GetOpenFilename()
     
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
    "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password=" """;User ID=Admin;Data Source=fileToOpen ;" _
    , _
    "Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database " _
    , _
    "Password="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk" _
    , _
    " Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet O" _
    , _
    "LEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" _
    ), Destination:=Range("A1"))
    .CommandType = xlCmdTable
    .CommandText = Array("Feuil1$")
    .Name = "données brutes"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = True
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .SourceDataFile = _
    fileToOpen
    .Refresh BackgroundQuery:=False
    End With
    End Sub
    La boîte de dialogue s'affiche bien mais une fois le fichier sélectionné j'ai un message d'erreur qui apparaît:

    Erreur d'exécution '1004':
    Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet "Feuil1$". Assurez-vous que l'objet existe et que vous avez bien saisi son nom et son chemin d'accès.

    Je ne comprend pas parce que les feuilles de mes fichiers portent le même nom, soit Feui1, Feuil2, etc.
    Et chose encore plus bizarre, si je modifie le chemin manuellement dans le code, ça marche sans problèmes.

    Je vous remercie de bien vouloir m'éclairer sur ce point. :)

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Peut-être ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Destination:=Sheets("NomDeLaFeuille").Range("A1"))
    Mais comme tu viens d'ouvrir un classeur..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fileToOpen = Application.GetOpenFilename()
    'Extraire le nom du fichier
    dim TB
    TB = split(FileToOpen,"\")
    NomFichier = TB(Ubound(TB))
     Destination:=WorkBook(NomFichier).Sheets("NomDeLaFeuille").Range("A1"))

    A+

  3. #3
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Par défaut La veritable utilite de cette fonction est ......
    Bonjour,


    Cette fonction est juste destiné à obtenit un nom de fichier avec son chemin complet

    "Cette méthode affiche la boîte de dialogue standard Ouvrir et lit un nom de fichier tapé par l'utilisateur sans réellement ouvrir les fichiers."

    Donc dans le code le fichier n'est pas ouvert d'ou ce fameux message.

    Résolution du probleme ....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fileToOpen = Application.GetOpenFilename()
    Set Wrk=Workbooks.Open fileToOpen
     
    Wrk.Worksheet(1).activate
     
    et ton code

    Voila toput simplement ......


    Pensez à activer merci pour les contributeurs

  4. #4
    sql
    sql est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 5
    Par défaut
    Salut,

    Merci pour tes explications!

    Cela dit, le code Set Wrk=Workbooks.Open fileToOpen s'affiche en rouge et ne marche pas.

    Bon, j'ai réussi à trouver sur un site un code un peu moins barbare qui me permet d'importer mes données.

    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
    Sub importfichier()
    Dim S_wk As Workbook, D_wk As Workbook, pc$
    Set D_wk = ThisWorkbook
    Application.ScreenUpdating = False
    FICHIER = Application.GetOpenFilename("Fichier EXCEL (*.xls), *.xls")
        If FICHIER <> False Then
        Set S_wk = Workbooks.Open(FICHIER)
     
        With S_wk
            With .ActiveSheet.UsedRange
                pc = .Cells(1, 1).Address
                .Copy
            End With
            Set D_wk = ThisWorkbook
            D_wk.ActiveSheet.Range(pc).PasteSpecial xlValues
    Application.CutCopyMode = False
            .Close False
        End With
        End If
        D_wk.ActiveSheet.Range("A1").Select
    Application.ScreenUpdating = True
    End Sub
    Si tu pouvais juste m'expliquer pourquoi ta formule ne fonctionne pas, je suis preneur!

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Le code a du être tapé a main levé et les () ont été oubliées c'est tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Wrk = Workbooks.Open(fileToOpen)
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Par défaut
    Bonjour forum

    Effectivement j'ai tapé directe dans le message sans l'assistant du script vba on perd l'aide d'aide à la syntaxe ou j ai omis les parentheses merci à Qwazerty pour la correction ....

    Pour le principal est d'expliquer le pourquoi de l'erreur "Erreur d'exécution '1004':" était à mes yeux le plus important !




Discussions similaires

  1. Importer des données grace a des *.cvs dans MySQL
    Par Mic0001 dans le forum Installation
    Réponses: 3
    Dernier message: 05/01/2005, 20h26
  2. [CR]Importer des données d'une feuille excel
    Par rolan dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/12/2004, 23h32
  3. Réponses: 3
    Dernier message: 13/12/2004, 14h54
  4. Importer des données dans sql server avec DELPHI ???
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2004, 18h22
  5. Importation de données postgresql
    Par ythierrin dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/10/2003, 23h18

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