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 :

utilisation requete Acces via vba Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Par défaut utilisation requete Acces via vba Excel
    Bonjour,

    A partir d'une macro sur Excel, je cherche à lancer une requête nommée "test" que j'ai faite sur Access.

    Ma Macro est la suivante :

    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
     
    Dim objAccess As New Access.Application
     
    'ouvre la base de données
    Dim CheminDB As String
    CheminDB = ActiveWorkbook.Path & "\BDD Mallettes.accdb"
    objAccess.OpenCurrentDatabase CheminDB
     
    'Pour rendre le tout visible à l'utilisateur
    objAccess.Visible = True
     
     
    'Lance les requetes pour isoler la mallette
    Dim qdf As DAO.QueryDef
    Dim rcs As DAO.Recordset
     
    Set qdf = Nothing
    'Référence à la requête
    Set qdf = CurrentDb.QueryDefs("test")
    valeur = "352C4T1"
     
    qdf.Parameters("Entrer reference :") = valeur
    qdf.Execute
    Set qdf = Nothing
    Mon fichier Access s'ouvre cependant j'ai un bug de : Set qdf = CurrentDb.QueryDefs("test")La particularité de ma requête est que je demande à l'utilisateur de rentrer une requête au moment où on la lance...est-ce à cause de ça?

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    CurrentDb ne référence pas la BDD que tu viens d'ouvrir avec OpenCurrentDatabase .

    Cordialement,

  3. #3
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    Cette partie me parait curieuse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf.Parameters("Entrer reference :")
    Le nom de ton paramètre est vraiment bizarre....

  4. #4

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    voila comment exécuter une requête paramétrée sur une base Access.
    Cette procédure utilise l'ancienne base de données Comptoir.accdb, que microsoft
    fournissait avec Access.
    NB: "[Ventes par représentant par pays]" est une procédure stockée dans la
    base de données Comptoir.accdb.
    A adapter.
    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
    47
    48
    49
    50
    51
    52
    53
     
    Sub testdb()
     
        Dim cnn As ADODB.Connection
        Dim cmd As ADODB.Command
        Dim prm As ADODB.Parameter
        Dim rs As ADODB.Recordset
        Dim CheminDB As String
     
        CheminDB = "C:\Comptoir.accdb"
     
        ' instancier les objets
        Set cnn = New ADODB.Connection
        Set cmd = New ADODB.Command
     
        ' la connexion
        With cnn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .Open CheminDB
        End With
     
        ' la commande
        With cmd
            .ActiveConnection = cnn
            .CommandText = "[Ventes par représentant par pays]" ' une requête paramétrée
            .CommandType = adCmdStoredProc
     
            ' on spécifie 2 paramètres
            .Parameters.Append cmd.CreateParameter("[Date début]", adDate, adParamInput)
            .Parameters("[Date début]") = #1/1/1996# ' valeur pour le param 1
     
            .Parameters.Append cmd.CreateParameter("[Date fin]", adDate, adParamInput)
            .Parameters("[Date fin]") = #1/1/1997# ' valeur pour le param 2
        End With
     
        Set rs = New ADODB.Recordset
        ' exécution
        rs.Open cmd
     
        Do Until rs.EOF
            Debug.Print rs.Fields("Pays").Value
            rs.MoveNext
        Loop
     
        rs.Close
        cnn.Close
     
        Set cmd = Nothing
        Set rs = Nothing
        Set prm = Nothing
        Set cnn = Nothing
     
    End Sub

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Par défaut
    merci pour vos réponses

    cerede2000, "Entrer référence :" c'est ce qui est marqué dans la fenêtre qui s'ouvre lorsque l'on lance la requête afin qu'on entre la référence pour laquelle on veut des informations

    Philippe pour le code que tu m'as donné en exemple, les paramètres représentent la valeurs pour lesquelles ou fait la requête?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Si tu utilise CreatObject pas besoin de références
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim Conn As Object 
    Dim mrs As Object 
     set Conn=CreatObjecr("ADODB.Connection")
    Dim sconnect As String
     
    resu = 0
    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Baptiste\Documents\BD_LACHATSA.accdb;Persist Security Info=False;"
     
    Conn.Open sconnect
     
     sSQLSting = "SELECT * From [tb_principale] ;"
    Set mrs=CreaObject("ADODB.Recordset")
     mrs.Open sSQLSting, Conn

  8. #8
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    @laeq92 : le texte Entrer la reference est là pour indiquer ce que saisir l'utilisateur, mais ce n'est en aucun cas le nom du paramètre dans la requête, c'est la que tu fais erreur et c'est ce qui te pose soucis.....

    Peux tu coller ta requête en SQL ?

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Par défaut
    rdurupt : avec ton code j'ai une erreur d'éxecution sur "mrs.Open sSQLSting, Conn" je suppose que c'est encore une fois un problème dû à la reference que ma requete demande pour lancer sa recherche mais je n'arrive pas à insérer une référence sans avoir un autre message d'erreur qui apparait...

    cerede2000 : voici la requete en SQL

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Mallette.Référence, Mallette.Désignation, Mallette.Type, CMS.Référence, CMS.Désignation, liaison_Mallette_CMS.Quantité, liaison_Mallette_CMS.Emplacement
    FROM Mallette INNER JOIN ((CMS INNER JOIN Liaiso_Rangement_CMS ON CMS.Id_CMS = Liaiso_Rangement_CMS.Id_CMS) INNER JOIN liaison_Mallette_CMS ON CMS.Id_CMS = liaison_Mallette_CMS.Id_CMS) ON Mallette.Id_Mallette = liaison_Mallette_CMS.Id_Mallette
    WHERE (((Mallette.Référence)=[reference]));

    et le code comme je pensais le faire

    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
        Dim cnn As ADODB.Connection
        Dim cmd As ADODB.Command
        Dim prm As ADODB.Parameter
        Dim rs As ADODB.Recordset
        Dim CheminDB As String
     
        CheminDB = "D:\BDD\BDD Mallettes.accdb"
     
        ' instancier les objets
        Set cnn = New ADODB.Connection
        Set cmd = New ADODB.Command
     
        ' la connexion
        With cnn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .Open CheminDB
        End With
     
        ' la commande
        With cmd
            .ActiveConnection = cnn
            .CommandText = "[requete]" ' une requête paramétrée
            .CommandType = adCmdStoredProc
     
            ' on spécifie 2 paramètres
            .Parameters.Append cmd.CreateParameter("[reference]", adString, adParamInput)
            .Parameters("[reference]") = "320C-230-N0-M1" ' valeur pour le param 1
     
        End With
     
        Set rs = New ADODB.Recordset
        ' exécution
        rs.Open cmd
     
        Do Until rs.EOF
            Debug.Print rs.Fields("320C-230-N0-M1").Value
            rs.MoveNext
        Loop
     
        rs.Close
        cnn.Close
     
        Set cmd = Nothing
        Set rs = Nothing
        Set prm = Nothing
        Set cnn = Nothing

  10. #10
    Invité
    Invité(e)
    Par défaut
    bonjour utilise creatobject et tu n'auras plus de problème de références!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Conn As Object 
    Dim mrs As Object 
     set Conn=CreatObjecr("ADODB.Connection")
    Dim sconnect As String
     
    resu = 0
    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Baptiste\Documents\BD_LACHATSA.accdb;Persist Security Info=False;"
     
    Conn.Open sconnect
     
     sSQLSting = "SELECT * From [tb_principale] ;"
    Set mrs=CreaObject("ADODB.Recordset")
     mrs.Open sSQLSting, Conn

  11. #11
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    @laeq92 : Ah ben voila !!!!
    Tu as compris
    En effet le paramètre de ta requête s'appel [reference] et pas "Entrer reference :"
    Donc normalement avec tout ça, ça devrais fonctionner

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Par défaut
    rdurupt : quand j'utilise createobject j'ai une erreur à la ligne mrs.Open sSQLQtring, Conn du type "Aucune valeur donnée pour un ou plusieurs des paramètres requis". C'est pour ça que je cherche à rajouter ma référence "320C-230-N0-M1" quelque part parce que j'ai fait ma requete de telle sorte à ce qu'elle me demande la référence pour laquelle on veut l'éxectuer, je sais pas si je me suis bien expliquée...

    cerede2000 : visiblement non, je n'ai toujours pas compris parce que ça ne marche pas!
    J'ai un problème au CreateParameter...et c'est autant le cas quand je mets "[reference]" que quand je mets "320C-230-N0-M1". Je pense que c'est encore ce fameux problème de ma référence que je dois entrer comme sur l'image

    Nom : requete.png
Affichages : 693
Taille : 11,8 Ko

  13. #13
    Invité
    Invité(e)
    Par défaut
    Désolé on pouvait tourner en rond longtemps (erreur de syntaxe) je compte sur mes collègues pour me taper sur les doigts pour me le rappeler!
    createobject createobject createobject j'espère que ça suffira pour me le gravé dans la caboche!

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Requetes acces lancées depuis Excel avec variables
    Par jackfred dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2007, 15h37
  2. Requete sql via vba
    Par Echizen1 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 10/12/2006, 16h13
  3. Sécurisation sources/code d'accès appli VBA Excel
    Par Pat_TOTO dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/09/2006, 17h39
  4. [VBA] [ACCESS] Accès à une requete Access via VBA
    Par Yanmeunier dans le forum Access
    Réponses: 3
    Dernier message: 16/03/2006, 11h48
  5. Manipulation du carnet d'adresse outlook via VBA Excel?
    Par Dragon Tours dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/11/2005, 12h16

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