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 :

Récupération de toutes les valeurs d'un champ de sous-formulaire en VBA [AC-2010]


Sujet :

Access

  1. #1
    Membre à l'essai
    Femme Profil pro
    Responsable de formation
    Inscrit en
    Mai 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 23
    Points : 13
    Points
    13
    Par défaut Récupération de toutes les valeurs d'un champ de sous-formulaire en VBA
    Bonjour, j'ai encore besoin de vos lumières.

    J'utilise Access 2010 et je débute en VBA.

    J'ai un formulaire SESSION et un sous-formulaire STGSSESSION.

    Dans le formulaire, je crée des sessions avec un numéro, des dates, des lieux, etc et dans le sf, j'inscris des stagiaires (sous forme de formulaire continu).
    Les stagiaires sont choisis dans une liste déroulante basée sur une requête R_STGSESSION.

    J'aimerais récupérer en VBA toutes les valeurs du champ STAGIAIRE.
    Exemple : Pour la session N°45, j'inscris Pierre, Paul et Jacques. J'aimerais obtenir "Pierre Paul Jacques".

    Pour l'instant je n'arrive à récupérer que Pierre
    J'ai essayé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Function Recupstg() As Integer
    Dim recup As String
     
    recup = DLookup("[Nom]", "StgSession", "[N°Session] =" & Forms![Session]!N°Session)
     
    Msgbox recup
     
    End Function
    Ça marche bien, mais ça ne me donne que le 1er enregistrement du sf. J'aimerais aussi tous les autres.
    Est-ce possible?

    Le but de cette manip, c'est de concaténer plusieurs éléments pour la création automatique de répertoires. J'ai trouvé (ou plutôt piqué sur internet mais adapté à mes besoins) ce qu'il faut pour çà. Pour nommer mes dossiers comme je le souhaite, il me faut ce dernier élément sur lequel, je l'espère, vous pourrez m'aider. Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour Sophie,

    Je m’y prendrais comme ceci :
    - écrire une fonction
    - qui prend en paramètre le N° de session
    - on crée un recordset de la table StgSession où N° de session = le paramètre
    - on lit les enregistrements un à un pour aligner les noms séparés d’un espace.

    Es-tu OK pour le VBA ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Responsable de formation
    Inscrit en
    Mai 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Bonjour Claude et merci de m'aider.

    Je suis ok pour le VBA mais je débute vraiment.
    Pour l'instant je ne fais que copier coller des codes existants et j'essaye de les comprendre pour les modifier à ma sauce.
    Je t'avoue que je ne comprends pas tout lol

    Je vais regarder comment fonctionne le recordset. Le plus difficile je pense, ce sera de le faire passer d'un enregistrement à un autre tout en gardant la valeur précédente...
    Est-ce qu'il faut faire une boucle ? (ça y est ça chauffe)

  4. #4
    Membre à l'essai
    Femme Profil pro
    Responsable de formation
    Inscrit en
    Mai 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Bon, voici ce que j'ai mis toute l'après-midi à faire (on ne rigole pas car je ne suis pas peu fière !) :

    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 ExtrNom()
     
    Dim DTB As Database
    Dim STG As DAO.Recordset
    Dim Extr As String
     
    Set DTB = CurrentDb
    Set STG = DTB.OpenRecordset("Select * From StgSession Where N°Session = 48", dbOpenDynaset)
     
    With STG
        Do Until .EOF
     
            aa = STG("Nom")
            MsgBox aa
            .MoveNext
     
         Loop
    End With
    STG.Close
    End Sub

    Ça marche bien, mais ça me donne les enregistrements l'un après l'autre. Comment les concaténer?
    Et dans le paramètre du OpenRecordset, j'ai mis N°Session = 48 pour essayer, mais il faudrait que N°Session = Forms![T_session]!N°Session et çà, ça ne marche pas...

    Dites-moi ce que vous en pensez

  5. #5
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Nemetona

    Dans l'idée ...

    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
    Private Sub ExtrNom()
     
    Dim DTB As Database
    Dim STG As DAO.Recordset
    Dim Extr As String, nom_agrege  as string
     
    Set DTB = CurrentDb
    Set STG = DTB.OpenRecordset("Select * From StgSession Where N°Session = " & Forms![T_session]!N°Session], dbOpenDynaset)
     
    With STG
        Do Until .EOF
     
            aa = STG("Nom")
            nom_agrege = nom_agrege & " " & STG("Nom")
            MsgBox aa
            .MoveNext
     
         Loop
    End With
    STG.Close
    msgbox nom_agrege 
    End Sub
    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  6. #6
    Membre à l'essai
    Femme Profil pro
    Responsable de formation
    Inscrit en
    Mai 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Bonjour JimBoLion et merci!!
    Je cherchais un truc très compliqué pour la concaténation ! Et c'est si simple...

    Par contre, j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set STG = DTB.OpenRecordset("Select * From StgSession Where N°Session = " & Forms![T_session]!N°Session, dbOpenDynaset)
    mais il n'accepte pas çà...

    J'ai aussi essayé de le mettre dans une variable pour que ce soit plus facile, mais ça ne fonctionne pas.

  7. #7
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Nemetona

    Forms![T_session]![N°Session]

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  8. #8
    Membre à l'essai
    Femme Profil pro
    Responsable de formation
    Inscrit en
    Mai 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de formation
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Mais c'est bien sûr!! les [] !

    Merci JimBoLion et ClaudeLELOUP ! Vous êtes trop forts!

    Ça marche bien. Encore merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/01/2008, 17h39
  2. nombre d'occurences de toutes les valeurs d'un champ
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/01/2008, 20h31
  3. Réponses: 8
    Dernier message: 13/07/2007, 11h05
  4. Requete SELECT : prendre toutes les valeurs pour 1 champ
    Par fab22montpellier dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/09/2005, 09h12

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