1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
'---------------------------------------------------------------------------------------
' Procédure : ConcatColonne [Function]
' Retour : String
' Auteur : PhilBen
' Version : 1.05
' Création/Maj : Le lundi 8 octobre 2007 à 18:46
' Objet : Permet de concaténer en ligne les données d'une colonne
' : d'enregistrements en fonction d'un pivot
' Arguments : vValeurPivot : La valeur de la colonne pivot
' : sNomColonnePivot : Nom de la colonne pivot
' : sNomColonneConcat : Nom de la colonne à concaténer
' : sNomDomaine : Table ou requête des colonnes
' : sWhere : Permet d'appliquer un filtre sur le domaine ("" pour aucun)
' : bGroupBy : Regroupement (True) pour éviter des doublons dans la concaténation
' : vIsOrderAsc : Trier (Ascendant = True, Desc = False) ou Null les éléments concaténés
' : sSeparateur : String qui sépare les éléments concaténés (ex: ",","---",...)
' Remarques : * Ralentie sensiblement la requête
' : * Le type de la colonne pivot peut être Date, numérique, string
' : * Pour des raisons de performance, éviter de faire de regroupement sur la
' : colonne de concaténation, la déclarer si possible <Expression> !
' Exemple : SELECT [MaColPivot],
' : ConcatColonne([MaColPivot],"MaColPivot","MaColConcat","MaTable","",False,Null,",")
' : FROM MaTable Group By [MaColPivot]
' Historique : 1.03 : Correction bug si le pivot est de type date
' : 1.04 : Complément d'information dans l'en-tête de la fonction
' : 1.05 : Correction bug si Pivot numérique avec décimales (, -> .)
'---------------------------------------------------------------------------------------
Public Function ConcatColonne(ByVal vValeurPivot As Variant, _
ByVal sNomColonnePivot As String, _
ByVal sNomColonneConcat As String, _
ByVal sNomDomaine As String, _
ByVal sWhere As String, _
ByVal bGroupBy As Boolean, _
ByVal vIsOrderAsc As Variant, _
ByVal sSeparateur As String) As String
On Error GoTo errtag
Dim odb As DAO.Database
Dim ors As DAO.Recordset
Dim sSql As String
If Not IsNull(vValeurPivot) Then
'Préparation de la requête
sSql = "SELECT " & sNomColonneConcat & " & """ & sSeparateur & """ As C FROM " & _
sNomDomaine & " WHERE " & sNomColonnePivot & "="
Select Case VarType(vValeurPivot)
Case vbString
sSql = sSql & """" & vValeurPivot & """"
Case vbDate
sSql = sSql & Format(vValeurPivot, "\#m-d-yyyy h:n:s\#")
Case Else 'Numériques
sSql = sSql & Replace(vValeurPivot, ",", ".")
End Select
If Len(sWhere) Then sSql = sSql & " And " & sWhere
If bGroupBy Then sSql = sSql & " GROUP BY " & sNomColonneConcat
If IsNumeric(vIsOrderAsc) Then
sSql = sSql & " ORDER BY " & sNomColonneConcat
If vIsOrderAsc = 0 Then sSql = sSql & " DESC"
End If
'Lance la requête et concatène la colonne
Set odb = CurrentDb
Set ors = odb.OpenRecordset(sSql, dbOpenForwardOnly)
While Not ors.EOF
ConcatColonne = ConcatColonne & ors(0)
ors.MoveNext
Wend
ConcatColonne = Left$(ConcatColonne, Len(ConcatColonne) - Len(sSeparateur))
End If
fin:
Set ors = Nothing
Set odb = Nothing
Exit Function
errtag:
ConcatColonne = "Erreur !"
Resume fin
End Function |
Partager