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 :

récupérer le résultat d'une requête


Sujet :

VBA Access

  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Par défaut récupérer le résultat d'une requête
    bonjour,

    soitle champ "champ1" de mon formulaire "form1": je souhaiterai cliquer sur un bouton qui executerai les tâches suivantes:
    - lancer la requête "req1" (sans l'afficher)
    - récupérer le résultat dans le champ1 du formulaire form1

    Pourriez-vous me donner un exemple de code VBA?

    merci d'avance.

    cdt

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2008
    Messages : 191
    Par défaut
    Bonjour,

    voici une possibilité qui pourrait répondre à tes besoins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim table As DAO.Database
    Dim enregistrement As DAO.Recordset
     
    Set table = CurrentDb 'La table est référencé à la base de donné courante
     
    Set enregistrement = table.OpenRecordset(req1, dbOpenSnapshot) 'On récupère le résultat de la requête 'req1' dans la variable enregistrement
     
    champ1.value = enregistrement.Fields ("champ") 'Comme enregistrement contient tous les champs de l'enregistrement trouvé, on affiche seulement le champ ("champ") désiré
    Ce code présuppose que ta requête ne retourne qu'une valeur. Si jamais tu t'attends à recevoir plus d'une valeur et que tu désires toutes les affichées, tu peux faire une boucle for basé sur le nombre d'enregistrements trouvés pour tous les affichés. ll pourrait être judicieux ici de vérifier que la propriété recordCount de enregistrement n'est pas à 0 avant de faire la dernière ligne pour éviter les erreurs.

    Bonne chance pour la suite

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Par défaut
    Merci de t'être penché sur mon pb.

    En utilsant ton code avec mes données, j'ai un message d'erreur: "type defini non défini par l'utilisateur".
    Faut-il déclarer les variable autrement?

    merci

    cdt

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Il faut cocher la référence à Microsoft DAO 3.6
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Par défaut
    bonjour,

    ok, j'ai coché "Microsoft DAO".

    Une erreur me dit que le moteur Jet ne trouve pas la requête (par contre si je la remplace par le nom d'une table, je n'ai pas le msg d'erreur).

    D'autre part, pour afficher le résultat de la requête dans un champ de mon formulaire, faut-i écrire ceci:

    monform!champ1.value = enregistrement.Fields ("champ_requête") ?

    merci encore

    cdt

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2008
    Messages : 191
    Par défaut
    Bonjour,

    Citation Envoyé par logidev Voir le message

    Une erreur me dit que le moteur Jet ne trouve pas la requête
    Il faut t'assurer que la requête contenue dans la variable req1 ait une syntaxe valide en SQL. Sinon, des erreurs du genre peuvent être levées.

    Citation Envoyé par logidev Voir le message
    D'autre part, pour afficher le résultat de la requête dans un champ de mon formulaire, faut-i écrire ceci:

    monform!champ1.value = enregistrement.Fields ("champ_requête") ?
    En fait, si tu inscrit ton code dans le formulaire courant, la partie "monform!" devient inutile puisqu'elle sera sous-entendu, tu pourras donc écrire simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ1.value = enregistrement.Fields ("champ_requête")
    Par contre, si tu appelles cette procédure depuis un autre formulaire, si je ne me trompes pas, tu n'auras pas le choix d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monform![champ1].value = enregistrement.Fields ("champ_requête")
    En espérant que cela t'aide à avancer,
    Salutations

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Il faut encadrer le nom de la requête par des guillemets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set enregistrement=table.openrecordset("req1",dbOpenSnapshot)
    Il y a aussi moyen d'adresser un champ comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enregistrement!monchamp
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Par défaut
    Bonjour,

    merci pour votre aide. Effectivement, toutes vos astuces fonctionnent dans le cas d'une table.
    Mais lorsque c'est une requête, j'ai le message:"trop peu de paramètres 2 attendu".
    En attendant, je construis une table temporaire avec le résultat de ma requête. Ce champ unique de la table alimente mon champ du formulaire.

    merci.

    cdt.
    Fichiers attachés Fichiers attachés

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Vu la ligne sur laquelle le code plante, je dirais que la requête ne fonctionne pas non plus dans Access, suite par exemple à une modification dans la structure des tables.

    Vérifie déjà que la requête s'ouvre dans Access
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Récupérer le résultat d'une requête UNION
    Par brazza dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/01/2007, 22h33
  2. [JTable] Récupérer le résultat d'une requête SQL
    Par malik1982 dans le forum Composants
    Réponses: 10
    Dernier message: 08/07/2006, 20h52
  3. Réponses: 3
    Dernier message: 16/10/2005, 12h53
  4. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 15h07
  5. Réponses: 7
    Dernier message: 30/06/2005, 11h06

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