Vorens
Messages postés41Date d'inscriptionmardi 24 mai 2011StatutMembreDernière intervention12 juin 2012
-
22 juil. 2011 à 09:09
Vorens
Messages postés41Date d'inscriptionmardi 24 mai 2011StatutMembreDernière intervention12 juin 2012
-
25 juil. 2011 à 08:00
Bonjour à tous,
Je cherche à importer des données d'une base Access vers Excel de façon automatique via une macro. Après de longue recherche, j'ai vu qu'il fallait activer les paramêtre ADO dans le projet VBA.
Il en résulte le code suivant:
Sub CopyFromRecordset_DAO()
Dim Db1 As Database
Dim Rs1 As Recordset
' Ouverture de la base de données
Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & "\StationData.mdb")
' Ouverture de la table Factures
' Un objet Recordset représente les enregistrements d'une table
Set Rs1 = Db1.OpenRecordset(Name:="Donnees", Type:=dbOpenDynaset)
' Effacement des données existantes dans la WorkSheet (sauf les titres)
' et copie des enregistrements
With Worksheets("DonneesData").Range("A2")
With Selection.CurrentRegion
Intersect(.Cells, .Offset(1)).Select
End With
Selection.ClearContents
.CopyFromRecordset Rs1
End With
'Fermeture de la Base de données
Db1.Close
End Sub
Le problème c'est que cela ne fonctionne pas à la ligne
Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & "\StationData.mdb")
Je pence que c'est le ThisWorkbook.Path qui pose problème car effectivement, je n'ai déclarer nul part le chemin d'accet de la mase de donnée
Le chemin est:
K:\Amelioration\donnees\machine\NomDeLaDataBase
Es ce que quelqu'un connait ce type de macro et peux me dire comment modifier le code pour qu'il soit fonctionnel ?
D'avance merci pour votre aide et le temps consacré à ma questions
Vorens
Messages postés41Date d'inscriptionmardi 24 mai 2011StatutMembreDernière intervention12 juin 2012 25 juil. 2011 à 08:00
Re,
J'avais finalement trouvé comment faire par moi même mais je te remercie quand même pour la réponse.
Voici ma solution:
NomFichier = "StationData"
FichierFini = CheminAcce & NomFichier & ".mdb"
Sheets("Importation").Activate
Dim Db1 As Database
Dim Rs1 As Recordset
' Ouverture de la base de données
Set Db1 = DBEngine.OpenDatabase(FichierFini)
' Ouverture de la table Factures
' Un objet Recordset représente les enregistrements d'une table
Set Rs1 = Db1.OpenRecordset(Name:="Donnees", Type:=dbOpenDynaset)
' Effacement des données existantes dans la WorkSheet (sauf les titres)
' et copie des enregistrements
With Worksheets("Importation").Range("A2")
'With Selection.CurrentRegion
' Intersect(.Cells, .Offset(1)).Select
'End With
Selection.ClearContents
.CopyFromRecordset Rs1
End With
'Fermeture de la Base de données
Db1.Close
4u4me4us
Messages postés780Date d'inscriptionlundi 22 janvier 2007StatutMembreDernière intervention30 octobre 20133 22 juil. 2011 à 14:43
Je pense que ton analyse du problème est la bonne.
je te propose le code suivant que tu devras adapter.
Set Db = OpenDatabase("K:\Amelioration\donnees\machine\StationData.mdb",False, False)
Set table = Db.OpenRecordset("SELECT * FROM MA_TABLE")
Remarque:
Il y a un des deux false que tu peux remplacer par dbOpenDynaset mais c plus le quelle . Si tu laisse false false alors l'ouverture serra par défaut ... je me souvient plus et je ne sais pas si cela t'arrange. Mais comme cela le code fonctionne.
N'oublie pas de finir ton cade par
table.close
set table = nothing
Db.close
set Db = nothing