none
Query qui concatène certains enregistrements RRS feed

  • Question

  • <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:595.3pt 841.9pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

    Bonjour,

     

    Supposons une table composé de 3 champs : No enregistrement, Prénom et Bien possédé.

     

    Ainsi :

     

    l’enregistrement No 3 avec "Denis" comme prénom et "Voiture" dans le champ "bien",

    l’enregistrement No 13 avec "Denis" comme prénom et "Téléphone" dans le champ "bien".

     

    Le prénom peut donc revenir plusieurs fois dans la base

     

    Je voudrais créer un query issu qui donne un tableau qui regroupe par prénom tous les biens possédés dans un nouveau champ « BienS »

     

     

    Ainsi, il y aurait:

     

    l’enregistrement No X avec "Denis" comme Prenom et "Telephone – Voiture" dans le champ Biens

     

    Je voudrais éviter la macro. Ci-joint la base Access et en jpg la base et le résultat souhaité

     

    [url=http://c3.ac-images.myspacecdn.com/images02/72/m_a516b3090c9244288a36086bedbd7882.jpg] lien image[/url]

     

    Pouvez vous m’aider ?

     

    Merci par avance

    jeudi 21 mai 2009 22:07

Toutes les réponses

  • Bonjour,

    Une requête seule ne suffit pas. Il faut créer une fonction vba qui va retrouver les valeurs.

    Soit une table
    N°, Prenom, Objet

    La requête :

    SELECT DISTINCT Table1.Prenom, concat([Prenom]) AS ListeObjets FROM Table1
    ORDER BY Table1.Prenom;

    Dans cette requete on ne prend le prénom qu'une seule fois (clause Distinct) et on concatène les objets (listeobjets) à l'aide de la fonction ci-dessous.
    Celle-ci doit être placé dans un module et non dans un module de formulaire.

    et la fonction VBA :

    Function Concat(vlPrenom As String)
    Dim rst As Recordset
    Dim strResultat As String
    Set rst = CurrentDb.OpenRecordset("Table1", dbOpenSnapshot)
    rst.FindFirst rst.Fields(1).Name & "=""" & vlPrenom & """"
    While Not rst.NoMatch
        strResultat = strResultat & rst.Fields(2) & " - "
        rst.FindNext rst.Fields(1).Name & "=""" & vlPrenom & """"
    Wend
    If Len(strResultat) > 0 Then
       Concat = Left(strResultat, Len(strResultat) - 3)
    End If
    rst.Close
    Set rst = Nothing
    End Function
    La fonction ouvre un recordset en lecture seule.
    Il recherche chaque prenom passé en référence (vlPrenom)
    et renseigne la variable strResultat avec les objets trouvés
    Note que la recherche du prénom se fait dans le champ N°2 (fields(1))

    Ce qui est intéressant avec cette méthode c'est que la fonction peut être appelé de n'importe ou dans l'application (formulaire, état, module...)

    Cordialement,
    jeudi 17 septembre 2009 16:57