Compléments pour Microsoft Access

http://access.fr.free.fr/

Concaténation par regroupement (Requête)

Description 

Cette fonction permet de concaténer les valeur d'un champ dans un champ unique en fonction du regroupement établi sur un autre champ.

 
Synthaxe 

ConcatForQuery (strRegroup, fldRegroup, strConcat,strTable [, strSep])

La synthaxe de la fonction ConcatForQuery comprend les éléments suivants :

ElémentsDescription

strRegroup

Expression de chaîne correspondant au nom du champ qui déterminera le regroupement.
 fldRegroupDonnées du champ qui servira au regroupement.
 strConcatExpression de chaîne correspondant au nom du champ que l'on souhaite concaténer.
 strTableExpression de chaîne correspondant au nom de la table source.
strSepFacultatif. Expression de chaîne correspondant séparateur entre les données concaténées, la valeur par défaut est "/".
 
Exemple 

Une table "MaTable" avec les champs fldNom et fldPrénom.

 

fldNom
fldPrénom
DupontPascal
MartinNathalie
MartinMichel
MartinPascal
DupontGérard
DurandSimon
DurandBernard
DurandRobert
DupuisAlbert

 

La fonction vous permettra donc d'obtenir tous les prénoms possible pour un même nom, pour se faire il suffira d'écrire une requête du style :

SELECT fldNom, ConcatForQuery("fldNom",[fldNom],"fldPrénom","MaTable"," - ") AS Résultat
FROM MaTable
GROUP BY fldNom;

Le résultat de la requête sera le suivant :

 

fldNom
Résultat
DupontPascal - Gérard
MartinNathalie - Michel - Pascal
DurandSimon - Bernard - Robert
DupuisAlbert

 

 
Code de la fonction 


Function ConcatForQuery(strRegroup As String, fldRegroup As String, _
    strConcat As String, strTable As String, _
    Optional strSep As String = "/") As String

'** Regroupement de donnée sur le champ fldRegroup
'** et concaténation sur le champ strConcat
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strResult As String
Dim strRst As String

Set db = CurrentDb()
strRst = "Select * From [" & strTable & "] " _
    & "Where [" & strRegroup & "] = """ & fldRegroup & """;"

Set rst = db.OpenRecordset(strRst, dbOpenDynaset)
With rst
    If Not .BOF Then
        .MoveFirst
        Do Until .EOF
            If strResult = "" Then
                strResult = .Fields(strConcat)
            Else
                strResult = strResult & strSep & .Fields(strConcat)
            End If
        .MoveNext
        Loop
    End If
End With
rst.Close: Set rst = Nothing
db.Close: Set db = Nothing
ConcatForQuery = strResult

End Function