Regroupement et concaténation dans un même champ


Le code qui suit peut-être appelé depuis une requête, il permet de concaténer les valeurs d'un champ dans un même champ en fonction du regroupement d'un autre champ.

Par exemple :

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

fldNom
fldPrénom
Dupont Pascal
Martin Nathalie
Martin Michel
Martin Pascal
Dupont Gérard
Durand Simon
Durand Bernard
Durand Robert
Dupuis Albert

Le code 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
Dupont Pascal - Gérard
Martin Nathalie - Michel - Pascal
Durand Simon - Bernard - Robert
Dupuis Albert

 

Donc voici le code :

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 Database
Dim rst As 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

Ce code possède les arguments suivant :

Arguments
Exemple
Description
strRegroup "fldNom" Nom du champ regroupé
fldRegroup [fldNom] Nom du champ regroupé
strConcat "fldPrénom" Nom du champ qui doit être concaténé
strTable "MaTable" Nom de la table source
strSep " - " Valeur par défaut : "/" représente le séparateur entre les champs

 

Retour haut de page

Auteur : Jessy SEMPERE