Macro d'importation données Access vers Excel (DAO object) [Résolu]

Messages postés
42
Date d'inscription
mardi 24 mai 2011
Dernière intervention
12 juin 2012
- 22 juil. 2011 à 09:09 - Dernière réponse :
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Dernière intervention
12 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


Meilleur salutation



Vorens
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Dernière intervention
12 juin 2012
- 25 juil. 2011 à 08:00
3
Merci
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




Cordialement

Merci Vorens 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Vorens
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Dernière intervention
30 octobre 2013
- 22 juil. 2011 à 14:43
0
Merci
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
Commenter la réponse de 4u4me4us

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.