Import d'une base ACCESS

nikkss

XLDnaute Nouveau
Bonjour le forum,

J'ai un petit soucis avec une macro d'import de base de données ACCESS sous excel.
Voici mon code:

Code:
Sub Macro2()
Dim MonFichier As String

MonFichier = Application.GetOpenFilename()

    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=MonFichier;" _
        , _
        "Mode=Share; Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Databas" _
        , _
        "e Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bul" _
        , _
        "k Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet " _
        , _
        "OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Co" _
        , _
        "mplex Data=False;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Vali" _
        , "dation=False"), Destination:=Range("$A$3")).QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array("RailEventMessage")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = MonFichier
        .ListObject.DisplayName = "Tableau__997"
        '.Refresh BackgroundQuery:=False
    End With
End Sub

Si je lance la macro sans mon ajout de la fonction "GetOpenFileName" cela fonctionne. Sinon rien..

Merci pour votre aide.

Nikkss.
 
G

Guest

Guest
Re : Import d'une base ACCESS

bonjour,


Si la variable MonFichier contient bien quelque chose, changer cette partie:

Code:
 "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=MonFichier;" _

Pour celle-ci:
Code:
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" & MonFichier & ";" _

Attention: ne pas oublier l'underscore (_) en bout de ligne, précédé d'un espace.
la place des guillemets est importante.
A+
 

nikkss

XLDnaute Nouveau
Re : Import d'une base ACCESS

Salut Hasco,
Merci pour ta réponse.
Effectivement il fallait écrire ça de la sorte.
Cependant, j'ai toujours un message d'erreur sur la ligne:
.Refresh BackgroundQuery:=False

--> Echec lors de l'initialisation de la source de données.
Ce qui est surprenant, c'est que lorsque je fais la macro automatique (avec l'enregistreur de macro), le code est identique et fonctionne en éxécution ou en pas à pas (par contre pas de getopenfilename).

Je sèche..:(
 
G

Guest

Guest
Re : Import d'une base ACCESS

Bonjour,

Tant mieux! Le but du forum étant le partage, serais-tu assez gentil pour faire profiter tout le monde de la solution trouvée, appliquée à ton problème.

A+
 

nikkss

XLDnaute Nouveau
Re : Import d'une base ACCESS

Bien sur. Voici donc mon code:
Sub Bouton1_Cliquer()
Dim MonFichier As String

MonFichier = Application.GetOpenFilename()

sqlChaine = "select * VotreTable"
ChaineConn = "ODBC;DSN=MS Access Database;DBQ=" & MonFichier
ActiveSheet.QueryTables.Add(Connection:=ChaineConn, Destination:=Range("$A$4"), Sql:=sqlChaine).Refresh

End Sub

@ plus!
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG