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

VBA Access Discussion :

Requête Select depuis VBA


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 38
    Points : 32
    Points
    32
    Par défaut Requête Select depuis VBA
    Bonjour,

    J'ai une requête de type SELECT dans un fichier EXCEL, et je souhaiterai savoir s'il est possible de lancer la requête depuis un code VBA. Les tables nécessaires sont ouvertes dans ACCESS, mais impossible de trouver comment faire.

    Je ne maîtrise pas encore OpenQuery je sais pas du tout si c'est le chemin à prendre.

    Merci d'avance pour toute réponse.

  2. #2
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut
    Salut a Toi et a Tous,

    Ton expose n'est pas clair :
    Tes donnees sont où ? dans des tables Access ou dans des feuilles Excel ?
    Tu as construit ta requete dans Excel et tu veux l'exploiter dans du Vba Excel ? ou bien tu l'as construit avec Excel et tu veux la lancer depuis Access ?

    Bref, peux-tu decrire un peu plus (ou mieux) ?
    voir meme mettre ta requete dans ton post ?

    A plus
    Caramel13

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 38
    Points : 32
    Points
    32
    Par défaut
    Bonjour Caramel13,

    Désolé effectivement j'ai écris mon message un peu vite, donc peu clairement...

    Je m'exprime plus clairement.
    J'ai 4 tables dans Access, DATA, 20130630, 20130930, et 20131231, qui proviennent de classeurs Excel, tous dans un même répertoire.
    J'ai une requête SQL qui se trouve dans la cellule d'un autre fichier Excel.
    Je souhaiterais par un code VBA dans Access, lancer la requête depuis Access.

    Voici la requête en question :
    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
     
    SELECT DISTINCT DATA.CATIAS,
                             DATA.INSTR, 
                             DATA.BILAN, 
                             DATA.REFCOUV, 
                             DATA.REFFRONT, 
                             [20130630].DTARR,
                             [20130630].NOMINAL_ARRETE_EUR,
                             [20130930].DTARR,
                             [20130930].NOMINAL_ARRETE_EUR,
                             [20131231].DTARR,
                             [20131231].NOMINAL_ARRETE_EUR 
    FROM (( DATA LEFT JOIN 20130630 ON DATA.REFFRONT=[20130630].REFFRONT)
                        LEFT JOIN 20130930 ON DATA.REFFRONT=[20130930].REFFRONT)
                        LEFT JOIN 20131231 ON DATA.REFFRONT=[20131231].REFFRONT 
    ORDER BY DATA.REFFRONT;
    Mais je précise bien que je ne veux pas avoir à copier ma requête dans la procédure VBA. Je souhaite que mon code aille la chercher dans la cellule. (Car la requête peut changer, j'ai un autre code qui la génère dans la cellule en question).

    Mais du coup j'ai lu que c'était un peu galère de lancer des requête SELECT depuis VBA Access, et vu que je suis un peu newbie je suis en panne sèche...

    Merci encore pour vos réponses en tout cas!

  4. #4
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut
    Bonjour jsl

    Si j'ai bien compris :
    a) tu as des donnees dans des classeurs Excel,
    b) que tu transportes dans des tables d'une base Access
    c) tu as une appli separee qui calcule dans un autre classeur Excel, la syntaxe d'une requete SQL, que tu ranges dans une cellule Excel (donc, dont le contenu varie en fonction de ?) mais qui, finallement, n'est que du texte.
    d) tu voudrais depuis Access acceder a cette cellule, pour en capturer le contenu et executer ce contenu comme etant une requete SQL pour traiter les donnees qui sont dans tes tables Access.

    Voui ou not Voui ?

    Bon, comme ca ,a froid, pourquoi prendre un billet pour Rome via Marseille par Tgv, le bateau vers la Corse, la traversee de la Corse a pied puis un pedalo jusqu'a Rome et revenir a Paris en avion >>> pour aller de "Nation" a "Etaile", ou de Lille a Roubaix ?
    Mais c'est ton probleme, donc je n'en dirais pas plus.

    Pour executer une requete SQL, dans Access, dont on connait le texte, c'est pas dur :

    Si c'est pour faire/traiter un recordset :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim MaChaineSql as string
    MaChaineSql = "Select distinct data.catias, ..... blablabla ... order by data.xxx"
    dim rs as recordset
    set rs = currentdb.openrecordset(MaChaineSql)
     
    while not rs.eof
         ' je traite mes enregistrements contenus dans rs, j'en fais des cocottes en papier
    rs.movenext
    wend
    Si c'est pour generer automatiquement une table dans Access, que l'on veut conserver
    on va utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dccmd.runsql MaChaineSql
    info a suivre = extrait de la doc Access (touche F1 sur le mot-cle RunSql apres avoir cree un bout de code Vba Access copie de l'exemple ci-dessous et action sur le petit bouton AfficherTout en haut juste en dessous du titre pour voir les details caches)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' Public Sub DoSQL()
    '
    '     Dim SQL As String
    '    
    '     SQL = "UPDATE Employees " & _
    '           "SET Employees.Title = 'Regional Sales Manager' " & _
    '           "WHERE Employees.Title = 'Sales Manager'"
    ' 
    '     DoCmd.RunSQL SQL
    '    
    ' End Sub
    mais il faudra completer ta requete SQL par un INTO qui va sauver le resultat dans une table

    Tout cela pour l'execution de la requete SQL dans Access.

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

    Mais auparavant, il faut recuperer dans la feuille Excel du classeur Excel, le contenu de la cellule que ton autre module aura genere, et cela dynamiquement et je suppose en evitant un copier-coller a la main !!!!

    Et la, c'est juste un tout petit plus chaud ...
    mais cela ne fait pas l'objet de ta question ;+))
    donc fera l'objet d'une autre reponse .... parce que le devoir m'appelle :+((

    en gros, il faut ouvrir le classeur Excel depuis Access, viser la feuille, viser la cellule, capturer le contenu et le copier dans MaChaineSql.
    Ca se fait.

    A la prochaine
    Caramel13

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Voici une fonction pour récupérer ta chaine SQL.
    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
    function fgetMaChaineSql(strpath as string, strFeuille as string, l as long, c as long) as string 
     
              Dim oExcel As Object         ' l'application (évite l'erreur 462)
              Dim oFeuille As Object       ' la feuille
              Dim oWork As Object          ' le workbook
     
     
     
           Set oExcel = CreateObject("Excel.Application")
     
           Set oWork = oExcel.Workbooks.Open(strPath)    ' ouvre le fichier
     
           Set oFeuille = oWork.Sheets(strFeuille)     ' active la feuille
     
           fgetMaChaineSql= oFeuille.Cells(l, c).value          'copie la valeur
     
           oExcel.Visible = True
           oExcel.Quit
     
           Set oFeuille = Nothing ' ferme l'objet xls
           Set oWork = Nothing
           Set oExcel = Nothing
    Exitsub:
          On Error GoTo 0
          Exit Function
    end function
    Pour créer un objet requête :
    tu vas chercher la requete dans le fichier "fichier.xls",la feuille "Feuil1", ligne 1 colonne 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    currentdb.CreateQueryDef("requete_1",fgetMaChaineSql("c:\fichier.xls","feuil1",1,1)
    currentdb.QueryDefs.Refresh
    Sans pédalo et sans voyager...

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/01/2013, 20h10
  2. [AC-2007] Requête SELECT en VBA
    Par morinxav dans le forum VBA Access
    Réponses: 14
    Dernier message: 10/04/2012, 10h07
  3. [Toutes versions] Affichage résultat requête Select depuis code VB
    Par gronimo21000 dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/09/2011, 15h26
  4. [AC-2000] Appeler requête enregistrée depuis vba
    Par Flo90 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/04/2009, 14h16
  5. Requête paramétrée depuis VBA
    Par efvsql dans le forum Microsoft BI
    Réponses: 0
    Dernier message: 25/08/2008, 20h24

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