Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/10/2007, 19h20   #1
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 597
Points : 1 597
Par défaut concaténer en ligne les données d'une colonne

bonjour,

Une fonction générique qui permet de concaténer en ligne les données d'une colonne d'enregistrements en fonction d'un pivot.

Nécessite de référencer DAO
Code :
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
 
'---------------------------------------------------------------------------------------
' 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
Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h08.


 
 
 
 
Partenaires

Hébergement Web