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 :

[VBA Excel]Interroger une base access depuis Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 9
    Points
    9
    Par défaut [VBA Excel]Interroger une base access depuis Excel
    Hello,

    J'ai un code VBA pour disons copier une colonne de ma base de donnée bd1.mdb dans un ficher Excel ouvert.

    Le souc, c'est que ça ne fonctionne pas et je ne comprends pas mon erreur. De manière générale, comment aller puiser dans Access depuis Excel?

    Merci

    voilà le code:

    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
     Private Sub Workbook_Open()
     
    Const ML_PATH = "path to bd1"
    Const ML_QUERY = "sql query"
     
    Call LancementRequêteAccess
    End Sub
     
    Function LancementRequêteAccess()
    'variable objet affectée à l'application Access
    Dim oAccesS As Access.Application
    'variable pour la base de donnée
    Dim db As DAO.Database
    'variable objet requête
    Dim qdf As QueryDef
    'variable objet recordset
    Dim rst As DAO.Recordset
     
    'creation d'une instance Access par automation
    Set oAccesS = CreateObject("Access.Application")
    'chargement de la BDD
    oAccesS.OpenCurrentDatabase ML_PATH
    'affectation d'une référence à la BDD
    Set db = oAccesS.CurrentDb
    'affectation d'une référence à la requête
    Set qdf = db.QueryDefs(ML_QUERY)
    'lancement de la requête et création du jeu d'enregistrements
    Set rst = qdf.OpenRecordset(dbOpenSnapshot)
    'écriture du jeu d'enregistrement à partir de la cellule A1
    'de la feuille "Feuil1"
    Worksheets("Feuil3").Range("A1").CopyFromRecordset rst
    'libération de la mémoire
    Set rst = Nothing
    Set db = Nothing
    End Function

  2. #2
    Invité
    Invité(e)
    Par défaut


    Une constante ne se met jamais dans une procédure !
    J'ai testé ça chez moi et ça fonctionne parfaitement

    Dans un Module1
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Option Explicit
    Const ML_PATH = "C:\ESSAI\MaBase_don.mdb"
    Const ML_QUERY = "Rqt ListeDesCommandes"
     
    Sub Test()
    Call LancementRequêteAccess
    End Sub
     
    Function LancementRequêteAccess()
    On Error GoTo Err_Function
    'variable objet affectée à l'application Access
    Dim oAccesS As Access.Application
    'variable pour la base de donnée
    Dim db As DAO.Database
    'variable objet requête
    Dim qdf As QueryDef
    'variable objet recordset
    Dim rst As DAO.Recordset
     
    'creation d'une instance Access par automation
    Set oAccesS = CreateObject("Access.Application")
    'chargement de la BDD
    oAccesS.OpenCurrentDatabase ML_PATH
    'affectation d'une référence à la BDD
    Set db = oAccesS.CurrentDb
    'affectation d'une référence à la requête
    Set qdf = db.QueryDefs(ML_QUERY)
    'lancement de la requête et création du jeu d'enregistrements
    Set rst = qdf.OpenRecordset(dbOpenSnapshot)
    'écriture du jeu d'enregistrement à partir de la cellule A1
    'de la feuille "Feuil1"
    Worksheets("Feuil1").Range("A1").CopyFromRecordset rst
    'libération de la mémoire
    Exit_Err:
    rst.Close: qdf.Close: db.Close
    oAccesS.CloseCurrentDatabase
    Set rst = Nothing
    Set qdf = Nothing
    Set db = Nothing
    Set oAccesS = Nothing
    Exit Function
     
    Err_Function:
      MsgBox "Une erreur est survenue, fermeture de la base"
      Resume Exit_Err
    End Function
    Il faut penser à bien fermer tous les objets ouverts, et les mettres ensuite à NOTHING

    Voilà

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Hello,

    merci pour la réponse. En effet, j'avais viré les constantes, erreur bête.

    Par contre j'ai une question pas moins bête au sujet de

    Const ML_QUERY = "Rqt ListeDesCommandes"

    Qu'entends-tu par "Rqt ListeDesCommandes", des commandes SQL? Le programme bug à ce niveau là, tu peux me donner un exemple merci

    Steph

  4. #4
    Invité
    Invité(e)
    Par défaut
    Par contre j'ai une question pas moins bête au sujet de
    Const ML_QUERY = "Rqt ListeDesCommandes"
    Qu'entends-tu par "Rqt ListeDesCommandes", des commandes SQL? Le programme bug à ce niveau là, tu peux me donner un exemple merci
    Excuse, il faut que tu mettes à cet endroit le nom de ta requête dans ta base à toi !

    Dans ma base, c'est "Rqt ListeDesCommandes", certainement pas dans la tienne

    Désolé

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 9
    Points
    9
    Par défaut


    youhouhou ça merche merci

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut
    Ce code fait-il appel à une bibliothèque précise ??? Il me rejette toutes les déclarations DIM de la BDD !!!

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Oui, il faut ajouter la référence DAO.

    En revanche, je vois pas pourquoi il serait nécessaire d'ouvrir Access.
    L'ouverture DAO suffit pour traiter un recordset a priori.

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut
    Merci, mais comment tu fait pour l'ajouter ???

    (C'est du tout nouveau pour moi le DAO)

    Merci

  9. #9
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Tu vas dans le module de code.

    Puis menu : Outils > Références

    Puis tu vas cocher dans la liste : Microsoft DAO 3.6

    Dans le code suivant, on voit qu'il n'est pas nécessaire d'ouvrir un objet Access :
    http://www.developpez.net/forums/sho...d.php?t=269383

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel 2003-2007] requêtes SQL vers une base access depuis Excel
    Par .Spirit dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/10/2010, 17h03
  2. Réponses: 1
    Dernier message: 08/10/2010, 16h38
  3. [Source][VBA-E] Remplir une zone de liste Excel par une requête Access
    Par cafeine dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/01/2007, 13h26
  4. [VBA-E] Requetes depuis Excel sur une Base Access sécurisée
    Par DhiSan dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/05/2006, 18h44
  5. Impossible d'ouvrir une base Access depuis Excel
    Par vciofolo dans le forum Access
    Réponses: 8
    Dernier message: 14/12/2005, 12h09

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