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 :

Importer une requete dans Excel via VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut Importer une requete dans Excel via VBA
    Bonsoir,

    J'espere ne pas m'être planté de forum...

    Voilà mon probleme:
    j'ai une base access, qui contient un certains nombre de table, et dans laquelle j'ai créé une requete assez tordu (avec des bonnes grosses jointures de cochons).
    Je cherche à appeler cette requete depuis une feuille Excel, via une macro (lancé depuis Excel) qui me remplirait mon classeur excel.
    Comment faire?

    J'ai chercher un peu sur le net, j'ai trouvé ce bout de code:

    Ce programme permet de récupérer les données d'une table Access
    par l'intermédiare d'une requête et de les copier dans une feuille Excel.

    Définition des éléments utilisés :
    Nom de la base de données --> Commandes.mdb
    Table possédant les données à récupérer dans Excel --> Factures
    Champs de la table Factures --> NoFacture, Client, Date et Solde
    Nom de la requête --> Factures pour un client
    Code SQL --> SELECT Factures.Nofacture, Factures.Client, Factures.Date, Factures.Solde FROM Factures
    WHERE (((Factures.Client) Like "ALLEE DES VINS"));
    Feuille de calcul Excel recevant les données de la table; --> DonnéesDataBase

    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
     
    Sub CopyFromRecordset_DAO()
     
         Dim Db1 As Database
     
         Dim Rs1 As Recordset
     
         ' Ouverture de la base de données
     
         Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & "\Commandes.mdb" )
     
         ' Ouverture de la table Factures
     
         ' Un objet Recordset représente les enregistrements d'une table
     
         Set Rs1 = Db1.OpenRecordset( Name := "Factures pour un client" , Type :=dbOpenSnapshot)
     
         ' Effacement des données existantes dans la WorkSheet (sauf les titres)
     
         ' et copie des enregistrements
     
         With Worksheets( "DonnéesDataBase" ).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
    Comme j'y connais rien en VBA (et oui désolé), j'ai copié, collé et adapté (quand même) ce code, mais j'ai un plantage à l'execution, "Type non défini par l'utilisateur"....

    Merci d'avance d'éclairer ma (sombre) lanterne

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Bonsoir
    peut être que tu devrais cocher la référence
    Microsoft DAO 3.6 Object Library
    Outils > Référence - faire défiler la liste et coche la référence indiquée

    Bonne soirée

    Abed_H

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pour information, d'autres méthodes : http://cafeine.developpez.com/access/tutoriel/excel/

    Starec

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    ok...merci pour ces 1eres réponses...

    J'ai néanmoins quelque soucis quand à l'appel de la base Access...Lors de l'execution de la macro, Excel dit ne pas trouver la base...

    Je suppute que cela vient de la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & "\Commandes.mdb" )
    Comment faire si ma base à pour chemin:
    C:\Dossier Contenant la Base\MaBase.mdb ???

    D'avance merci

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    Oh la la, quelle galère....J'y connais vraiment rien en VBA...

    En fait, l'idée serait d'ouvrir une base de données, et d'y lancer une requete SQL....

  6. #6
    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
    Hello,

    le code est assez compact et ne gère pas les erreurs, mais ça donne une bonne trame

    NB : IL FAUT AJOUTER LA REFERENCE MICROSOFT DAO 3.6

    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
    Sub PasteAccessQuery(ByVal dbPath As String, ByVal qryName As String, ByVal r As Range)
     
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
     
        Set db = DAO.OpenDatabase(dbPath, False, False)
        Set rs = db.OpenRecordset(qryName, DAO.dbOpenSnapshot)
     
        r.CopyFromRecordset rs
     
        rs.Close
        db.Close
        Set rs = Nothing
        Set db = Nothing
     
    End Sub
    Utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PasteAccessQuery "C:\Mabase.mdb", "marequete", range("A2")
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    Merci Cafeine, j'essaie de suite!

    [EDIT]

    Euh il y a quelque chose que je n'ai pas du comprendre, la ligne INSTRUCTION va où? Dans le code VBA? Si oui, où par rapport au code que tu as ecris au dessus?

  8. #8
    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
    la ligne utilisation est ce qui déclenche la macro (un exemple) ... mais tu ne dis nulle part comment tu veux déclencher l'import.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par cafeine Voir le message
    la ligne utilisation est ce qui déclenche la macro (un exemple) ... mais tu ne dis nulle part comment tu veux déclencher l'import.
    Ah oui certes! Désolé...Difficile d'être précis quand on y connait rien!

    L'idée sera de déclencher l'import via une macro (donc depuis la feuille Excel, puis ALT+F8)

    Petite précision: la requete sous access est conditionnée par 2 donnée demandées à l'utilisateur qui lance la requete...Cela ne va t il pas poser un probleme lors de son lancement depuis la macro Excel (si cela est seulement possible)?...

  10. #10
    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
    Si, ça va poser de gros problèmes ...
    il va falloir passer par des paramètres .Parameters en DAO

    Regarde sur le forum Access pour plus d'infos.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    J'ai fait une recherche avec PARAMETERS dans la partie de forum que tu m'indiques...Il y a pleins de réponses...Va falloir faire le tri...Surtout que j'ai du mal à joindre tout les bouts de réponses que je lis...

    Si quelqu'un a quelques liens particulierement interessant, je suis preneur...

    [EDIT] Bon j'ai vu ca, je vais essayer

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    Ok, petite question subsidiaire:

    est il possible d'avoir 2 paramètres?
    Dans mon cas, j'ai précédé le code SQL de ma requete par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PARAMETERS Semaine text;
    ce qui fait que l'execution de la requete entraine une saisie de l'utilisateur pour "Semaine"...Et je souhaiterai avoir 2 parametres de saisies, et je ne vois pas comment faire (ni ne trouve :s)

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    Bonsoir,

    Mon problème a été resolu ici

    Merci à ceux qui m'ont aidé...

    @+

    ted

Discussions similaires

  1. [AC-2003] erreur 3190 en exportant une requete vers excel via DoCmd
    Par dg6969 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 17/06/2014, 12h51
  2. [Toutes versions] Importation Planning Project dans Excel par VBA
    Par Sebung dans le forum Project
    Réponses: 2
    Dernier message: 05/03/2012, 15h30
  3. copier le resultat d'une requete dans Excel
    Par asterpc dans le forum VBA Access
    Réponses: 7
    Dernier message: 15/11/2007, 15h04
  4. Rechercher une valeur dans excel avec VBA
    Par kebab666 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/06/2007, 10h00
  5. problème de date dans excel via vba.
    Par Bourezak dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/12/2006, 13h39

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