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

Access Discussion :

Affecter résultat requête à une variable


Sujet :

Access

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur supply chain
    Inscrit en
    Mai 2015
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur supply chain
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 125
    Points : 59
    Points
    59
    Par défaut Affecter résultat requête à une variable
    Bonjour à tous!

    Je sollicite votre aide car je n'ai pas trouvé de réponse sur le forum....
    Alors voilà, j'ai besoin d'affecter le résultat d'une requête sélection à une variable dans mon code VBA afin de procéder à des calculs. J'ai essayé de le faire avec Dlookup mais ça ne marche pas.
    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
    Private Sub Btn_requete_Click()
    vol_total.Value = DLookup("[Expr2]", "[Rq_volume_total]")
    metrage = 0
    hauteur.Value = hauteur_utile.Value
    If opt_camion = 1 Then
    metrage = vol_total / (2.4 * hauteur.Value)
     
    ElseIf opt_remorque = 5 Then
    metrage = vol_total / (2.4 * hauteur.Value)
     
    ElseIf opt_conteneur_dry = 2 Then
    metrage = vol_total / (2.2 * hauteur.Value)
     
    ElseIf opt_conteneur_hc = 3 Then
    metrage = vol_total / (2.2 * hauteur.Value)
     
    ElseIf opt_conteneur_vingt = 4 Then
    metrage = vol_total / (2.2 * hauteur.Value)
    End If
    End Sub
    Et le message d'erreur : "Erreur d'exécution 3008 : La table "Feuil1$" est déjà ouverte en mode exclusif par un autre.....et ne peut pas être manipulée par programmation"
    J'ai effectivement une table lié à un fichier excel. Cela peut-il être l'explication?
    Pouvez-vous m'aider?

    Merci...

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Je t'avoue que je ne comprends pas trop l'utilisation du DLookup. En effet, cette fonction ne récupère qu'une valeur et non un enregistrement complet. Ta requête te retourne combien d'enregistrements ?
    Le mieux serait de passer par l'ouverture de ta requête dans RecordSet. Et de traiter ton problème à partir de celui-ci
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Membre du Club
    Femme Profil pro
    Ingénieur supply chain
    Inscrit en
    Mai 2015
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur supply chain
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 125
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Ma requête ne renvoit qu'un seul résultat : une somme ici du total de plusieurs lignes d'une autre requête.

    Nom : Sans titre.png
Affichages : 439
Taille : 9,1 Ko

    J'aimerai dans mon code VBA, récupéré cette valeur Expr2, afin de m'en servir dans des calculs.
    Je n'ai jamais utilisé RecordSet... Peux-tu m'aiguiller?

    Merci

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur Qualité (Microtechnique)
    Inscrit en
    Février 2016
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Qualité (Microtechnique)
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 188
    Points : 265
    Points
    265
    Avant de poser une question avez-vous testé l’enregistreur de macro ?
    http://fauconnier.developpez.com/tut...istreur-macro/
    Merci de passer vos discussion en
    Et sinon un est toujours le bienvenue.

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur supply chain
    Inscrit en
    Mai 2015
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur supply chain
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 125
    Points : 59
    Points
    59
    Par défaut
    Merci pour le lien, pour le moment j'ai tapé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub DAOOpenRecordset()
        Dim db As DAO.Database, rst As DAO.Recordset, fld As DAO.Field
        Dim sSQL As String
        ' Ouverture de la base de données
        Set db = DBEngine.OpenDatabase(".\Volumétrie.accdb")
        sSQL = "Select * From Rq_volume_total "
        ' Ouverture du Recordset
        Set rst = db.OpenRecordset(sSQL, dbOpenForwardOnly, dbReadOnly)
        MsgBox (rst)
        ' Fermeture du Recordset
        rst.Close
    End Sub
    Mais ça ne fonctionne pas. POuvez-vous m'aider à l'écrire pour que je puisse récupérer dans une variable le résultat de ma requête? Merci

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur Qualité (Microtechnique)
    Inscrit en
    Février 2016
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Qualité (Microtechnique)
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 188
    Points : 265
    Points
    265
    Par défaut
    Si je ne me trompe pas, il faut un « ; » à la fin de ton sSQL.
    Set permet d’ouvrir la table.

    Tu dois déjà balayer toutes les lignes de la table avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While not rst.eof  ‘tant que l’on est pas à la fin
    	Msgbox(rst![le nom du champs qui t’interresse]
    	Rst.movenext ‘ passage à la ligne suivante
    Wend
    Avant de poser une question avez-vous testé l’enregistreur de macro ?
    http://fauconnier.developpez.com/tut...istreur-macro/
    Merci de passer vos discussion en
    Et sinon un est toujours le bienvenue.

  7. #7
    Membre du Club
    Femme Profil pro
    Ingénieur supply chain
    Inscrit en
    Mai 2015
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur supply chain
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 125
    Points : 59
    Points
    59
    Par défaut
    Merci Nodens pour ta réponse.
    Mais avec recordSet j'ai réussi à récupérer ma valeur :
    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
    Private Sub Btn_requete_Click()
    
    Dim re As dao.Recordset
    Set re = CurrentDb.OpenRecordset("Rq_volume_total")
    vol_total = (re.Fields("Expr2"))
    metrage = 0
    hauteur = Me![hauteur_utile].Value
    If opt_camion = 1 Then
    metrage = vol_total / (2.4 * hauteur_utile.Value)
    
    ElseIf opt_remorque = 5 Then
    metrage = vol_total / (2.4 * hauteur_utile.Value)
    
    ElseIf opt_conteneur_dry = 2 Then
    metrage = vol_total / (2.2 * hauteur_utile.Value)
    
    ElseIf opt_conteneur_hc = 3 Then
    metrage = vol_total / (2.2 * hauteur_utile.Value)
    
    ElseIf opt_conteneur_vingt = 4 Then
    metrage = vol_total / (2.2 * hauteur_utile.Value)
    End If
    re.Close
    End Sub
    Mon problème maintenant c'est que quand j'exécute le code, j'ai le message "Expression sans paramètre" avec la ligne de bug comme signalé ici.
    Savez-vous pourquoi?

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur Qualité (Microtechnique)
    Inscrit en
    Février 2016
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Qualité (Microtechnique)
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 188
    Points : 265
    Points
    265
    Par défaut
    opt_camion c'est quoi?
    un champs de ta table?

    Si tu ne fait pas la boucle while que je t'ai indiqué, tu n'auras accès qu'à la première ligne de la table.
    Avant de poser une question avez-vous testé l’enregistreur de macro ?
    http://fauconnier.developpez.com/tut...istreur-macro/
    Merci de passer vos discussion en
    Et sinon un est toujours le bienvenue.

  9. #9
    Membre du Club
    Femme Profil pro
    Ingénieur supply chain
    Inscrit en
    Mai 2015
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur supply chain
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 125
    Points : 59
    Points
    59
    Par défaut
    Opt_camion c'est une des options d'un groupe d'option, il prend la valeur 1 quand c'est lui qui est coché.
    Ma requête ne renvoit qu'une seule ligne donc pas besoin de boucle, le recordset que j'ai testé avec un msgbox me ramène bien la valeur souhaité que je veux affecter à une variable nommée ici vol_total

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur Qualité (Microtechnique)
    Inscrit en
    Février 2016
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Qualité (Microtechnique)
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 188
    Points : 265
    Points
    265
    Par défaut
    Une option d’un groupe d’option je ne sais pas ce que c’est.
    C’est sur ton formulaire ? Par ce que là je comprends pas où tu veux aller.
    Tu ouvres un recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set re = CurrentDb.OpenRecordset("Rq_volume_total")
    Et j’ai pas l’impression que tu l’utilises dans la suite de ton code.
    Avant de poser une question avez-vous testé l’enregistreur de macro ?
    http://fauconnier.developpez.com/tut...istreur-macro/
    Merci de passer vos discussion en
    Et sinon un est toujours le bienvenue.

  11. #11
    Membre du Club
    Femme Profil pro
    Ingénieur supply chain
    Inscrit en
    Mai 2015
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur supply chain
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 125
    Points : 59
    Points
    59
    Par défaut
    J'ai sur mon formulaire le un groupe d'option, qui permet à l'utilisateur d'en choisir un entre opt_camion, opt_conteneur_vingt, etc.
    Et si je l'utilise dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vol_total = (re.Fields("Expr2"))

  12. #12
    Membre actif
    Homme Profil pro
    Ingénieur Qualité (Microtechnique)
    Inscrit en
    Février 2016
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Qualité (Microtechnique)
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 188
    Points : 265
    Points
    265
    Par défaut
    Ok mais ça n’a rien à voir avec ton problème à la base qui était « affecter résultat requête à une variable »

    Il faut que tu structure tes questions car les gens qui sont sur ce forum sont là pour aider mais n’ont pas de temps à perdre.

    Donc est ce que tu as réussi à accéder aux différents champs de ta requête ? Si oui ce post est terminé et tu en ouvres un autre concernant les Optionbuttons.

    Et tu commences par rechercher sur le site (ce qui m’a pris 10 secondes) et tu trouves :
    http://gilmir.developpez.com/tutoriels-vb6/tutoriel10/
    http://silkyroad.developpez.com/VBA/...serForm/#LII-C
    Avant de poser une question avez-vous testé l’enregistreur de macro ?
    http://fauconnier.developpez.com/tut...istreur-macro/
    Merci de passer vos discussion en
    Et sinon un est toujours le bienvenue.

  13. #13
    Membre du Club
    Femme Profil pro
    Ingénieur supply chain
    Inscrit en
    Mai 2015
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur supply chain
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 125
    Points : 59
    Points
    59
    Par défaut
    Effectivement ça ne va pas dans ce topic. Mais mon post du départ est bien au bon endroit.
    Je mets d'ailleurs le code qui m'a permis de récupérer le résultat UNIQUE de ma requête afin de l'affecter à une variable dans un code VBA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim re As dao.Recordset
    Set re = CurrentDb.OpenRecordset("Rq_volume_total")
    vol_total = (re.Fields("Expr2"))
    re.Close

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

Discussions similaires

  1. Affecter résultat rqt à une variable
    Par utan88 dans le forum Développement Windows
    Réponses: 1
    Dernier message: 07/09/2010, 19h41
  2. Affecter résultat requête à une variable
    Par utan88 dans le forum C#
    Réponses: 4
    Dernier message: 04/09/2010, 14h33
  3. [DAO]Affecté résultat requête à une variable
    Par Lex O'Mil dans le forum VBA Access
    Réponses: 4
    Dernier message: 30/03/2007, 15h56
  4. affecter le résultat d'une requête à une variable
    Par zut94 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/10/2005, 17h21
  5. Affecter résultat SQL d'une requête à une variable
    Par bozolozo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/01/2005, 17h37

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