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 :

[A-07] Parcourir un RecordSet


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut [A-07] Parcourir un RecordSet
    Bonjour

    Etant débutant dans l'utilisation des recordsets:

    J'ai d'une part une requète qui me combine des infos de plusieurs tables.

    D'autre part un formulaire me permettant de sélectionner certains critères, et un bouton qui, Sur Clic, devrait me permettre d'aller extraires des infos des enregistrements concernés de ma requête.

    La requête est la source de données du formulaire.

    Je pensais qu'un code simple comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each MonChampUnDuRecordSet In Me.RecordsetClone
        MonChampFormulaire = ChampDeuxDuRecordSet
        Next
    devrait en fait répondre à mon besoin. Et ce n'est de toute évidence pas le cas

    L'objectif: parcourir ce recordset pour y trouver certains champs.

    Je suis sûr que vous serez de bonseil... Merci d'avance

  2. #2
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Je ne suis pas certain d'avoir compris le problème.

    Pour afficher des valeurs de champ dans un formulaire, il "suffit" que le formulaire s'appuie sur la bonne source (table ou requête) et que les différents contrôles du formulaire devant afficher les valeurs pointent vers les champs correspondants du recordset.

    Il me semble donc plus judicieux d'adapter la source du formulaire au recordset résultat de la requête, en ayant eu soin, en création de formulaire, de faire pointer les contrôles vers les champs ad hoc de la source...

  3. #3
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Merci Pierre, mais cela ne peut - enfin je ne crois pas - fonctionner comme cela.

    Le formulaire a des critères de choix (combinant un total de plus de 30 combinaisons).

    Et son but est de m'extraire les adresses e-mail des personnes répondant à ces critèes (puisque Outlook Express n'est d'après le forum pas pilotable directement) dans une zone de texte vide au début, et de le me les présenter prêtes à copier/coller.

    Ceci me permettrait de faire un simple copier/coller dans la zone de destination des messages dans Outlook Express.

    A moins que tu aies une autre méthode, j'ai éliminé celle de faire des requêtes successives en cascade, souhaitant effectuer la sélection dynamiquement via les champs de sélection de mon formulaire.

    Je pensais donc simplement parcourir le recordset, en piquant ça et là les infos dont j'ai besoin. Mais ce n'est peut-être pas la solution idéale....

    Est-ce plus clair ?

  4. #4
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Aurais-je mieux compris?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub cmdCreer_Click()
        Dim rs As ADODB.Recordset
        Dim sql As String
     
        sql = "select * from tcontacts where courriel like '%" & txtRecherche & "%'"
        Set rs = CurrentProject.Connection.Execute(sql)
        Do While Not rs.EOF
            txtAdresses = txtAdresses & rs.Fields("courriel") & ";"
            rs.MoveNext
        Loop
    End Sub
    suite à un clic sur le bouton nommé cmdCreer, création d'un recordset spécifique (si j'ai compris, tu sais faire, je n'ai mis que pour l'exemple, à toi d'agrémenter en fonction de tes critères de sélection) puis parcours du recordset et ajout du champ Courriel (à adapter) au contrôle texte txtAdresses (à adapter)

  5. #5
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Hé ! C'est nettement plus futé que ce que j'essayais. Vais de ce pas aller essayer cette version.

    Merci.

    Je reviens pour mettre résolu si cela l'est

  6. #6
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Heu... Petite erreur de ma part. Si tu as conservé la syntaxe sql de Access, il faut remplacer % par * dans le texte de la requête

  7. #7
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Bon, c'est pas grave: il bloque sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim rs As ADODB.Recordset
    Comme "Type défini par l'utilisateur non défini"

    J'ai donc tenté d'ajouter la référence à Outils/Reference
    Microsoft DAO 3.6 Objet Library

    et j'obtiens:
    "Nom de module, de projet ou de bibliothèque d'objets déjà utilisé"

    Resultat... je suis largué

  8. #8
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Tu disais dans le titre que tu étais en A07 => normalement, la librairie ad hoc est chargée par défaut.

    Voici le code pour la librairie DAO (J'ai remis les astérisques)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub cmdCreer_Click()
        Dim rs As DAO.Recordset
        Dim sql As String
     
        sql = "select * from tcontacts where courriel like '*" & txtRecherche & "*'"
        Set rs = CurrentDb.OpenRecordset(sql)
        Do While Not rs.EOF
            txtAdresses = txtAdresses & rs.Fields("courriel") & ";"
            rs.MoveNext
        Loop
    End Sub

  9. #9
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Ahem... je crains de devoir te casser encore les pieds (enfin... les doigts )

    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub BUT_Getit_Click()
    Dim rs As DAO.Recordset
    Dim Sql As String
    Sql = "SELECT * FROM rs WHERE CLI_Lan LIKE '*" & Me.SEL_Lan.Value & "*' AND CLI_Typ LIKE '*" & Me.SEL_CLI.Value & "*' AND SER_Typ LIKE '*" & Me.SEL_Mod.Value & "*'"
    MsgBox (Sql)
    Set rs = CurrentDb.OpenRecordset(Sql)
    Do While Not rs.EOF
        ML_List = ML_List & rs.Fields("CLI_Mai") & ";"
        rs.MoveNext
    Loop
    End Sub
    me donne, sur l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = CurrentDb.OpenRecordset(Sql)
    "Le moteur... ne peut pas trouver la requete source "rs"..."

    Pourtant, le Dim le définit bien...

    Désolé, mais dans ce truc là, je suis nul !

  10. #10
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Tu dois construire la chaine sql avec des tables ou des requêtes existant dans Access... Or, tu utilises rs, alors que c'est justement ce que tu vas définir par la suite.

    Si tu regardes mon code, tu verras que, pour la chaine sql, j'utilise from tcontactstContacts représente la table dans laquelle aller chercher les enregistrements...

    Ta clause from rs doit donc être remplacée par from ... où les ... doivent être remplacés par le nom de la table ou de la requête qui contient les enregistrements non filtrés.

  11. #11
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Ah, mais c'est... bien sûr !

    Merci beaucoup Pierre, cela fonctionne parfaitement...

    J'aurais dû y penser tout seul

    Merci de ton aide

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

Discussions similaires

  1. Parcourir un recordset
    Par amine.ghazi dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/08/2010, 13h18
  2. [AC-2003] parcourir un recordset
    Par chuspyto dans le forum VBA Access
    Réponses: 11
    Dernier message: 16/09/2009, 17h52
  3. Réponses: 1
    Dernier message: 09/03/2009, 19h26
  4. Parcourir un recordset pour un select-Case
    Par Pascal87 dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/09/2007, 21h16
  5. Réponses: 3
    Dernier message: 29/03/2006, 13h21

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