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 :

Recordset - Récupération de plusieurs résultats [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Recordset - Récupération de plusieurs résultats
    Bonjour à tous,

    J'ai créé une requête pour récupérer la liste des adresse emails d'une table via le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Envoi_DA()
     
        Dim Reco As Recordset
     
        Set Reco = CurrentDb.OpenRecordset("SELECT * FROM T_Utilisateurs WHERE A_Droits = 'DirCo' OR A_Droits= 'DirRD';")
     
        MsgBox (Reco("Email"))
     
    End Sub
    Mon problème est qu'il existe plusieurs utilisateurs dont A_Droits est égal à "DirCo" ou "DirRD" est que la MsgBox ne fait apparaitre que le premier enregistrement.
    J'ai beau cherché, je trouve pas la solution.

    De plus, cette requête a pour but de récupérer les adresses pour l'envoi d'un Mail via Outlook, il fuadrait donc que les adresses soient séparés par un ";".

    Merci pour votre aide

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Il faut que tu parcours les enregistrements de ton Recordset avec des méthodes Move... comme expliqué dans l'article de Christophe Warin ICI.

    Du genre :
    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
    Private Sub Envoi_DA()
     
        Dim Reco As Recordset
        Dim EmailPers as String
        Set Reco = CurrentDb.OpenRecordset("SELECT * FROM T_Utilisateurs WHERE A_Droits = 'DirCo' OR A_Droits= 'DirRD';")
        With Reco
              .MoveFirst
              While Not .EOF
                        EmailPers= ![Email] & ";"
              .MoveNext
              Wend
        End With
        MsgBox "Liste des emails : ", EmailPers
        Reco.Close
        Set Reco = nothing
    End Sub
    Cordialement
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Bonjour madefemere et merci pour té réponse !

    J'ai testé ton code mais le problème est maintenant inverse. Seul le dernier enregistrement apparaît.

    Merci pour le lien très instructif. Je l'ai parcouru mais j'avoue avoir du mal à tout comprendre.

    Autre question, quel est l'intérêt de mettre ces 2 lignes de codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Reco.Close
        Set Reco = nothing
    Merci encore !

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,
    Désolé mais effectivement j'ai oublié "certaines choses", le code corrigé :
    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
    Private Sub Envoi_DA()
     
        Dim Reco As Recordset
        Dim EmailPers as String
        Set Reco = CurrentDb.OpenRecordset("SELECT * FROM T_Utilisateurs WHERE A_Droits = 'DirCo' OR A_Droits= 'DirRD';")
        EmailPers = ""
        With Reco
              .MoveFirst
              While Not .EOF
                        EmailPers= EmailPers & ";" & ![Email]
              .MoveNext
              Wend
        End With
        MsgBox "Liste des emails : ", EmailPers
        Reco.Close
        Set Reco = nothing
    End Sub
    Les 2 dernières lignes de code ferment et nettoient l'instance du Recordset "Reco" qui a été ouvert. Il faut comprendre que le Recordset est instancié "quelque part" dans la mémoire de ta machine. Donc si on refait appel à un Recordset "Reco" après, les conséquences sont imprévisibles.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour ta réponse super rapide ! Ça marche impeccable
    J'ai bien compris la petit nuance avec le code précédent, je pense que j'arriverai à le refaire sans trop de problèmes.

    Sinon, j'ai mis pas mal de Recordset dans ma BDD et c'est vrai que je ne les "efface" jamais. Je vais modifier mon code en conséquence.
    Merci pour tes explications claires !


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

Discussions similaires

  1. Méthode récupération jeu de résultats en PHP
    Par Death83 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 15/01/2006, 13h58
  2. Réponses: 2
    Dernier message: 09/01/2006, 19h45
  3. Jointure avec plusieurs résultats
    Par kemenaran dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/12/2005, 23h21
  4. Réponses: 7
    Dernier message: 26/09/2005, 17h50
  5. Une fonction peut-elle retourner plusieurs résultats ?
    Par aragorns dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/03/2005, 22h18

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