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 |
Auteur : Jessy SEMPERE