Excel VBA Importation données

Fermé
SQL - 23 mai 2009 à 23:18
yg_be Messages postés 22763 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mai 2024 - 24 mai 2009 à 11:03
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:


--------------------------------------------

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. Pour ce faire j'ai modifié le code de la manière suivante:



----------------------------------------------------------------------

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. :)
A voir également:

1 réponse

yg_be Messages postés 22763 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mai 2024 1 480
24 mai 2009 à 11:03
Moi je suggère :
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password=" """;User ID=Admin;Data Source="+fileToOpen+" ;"
2