IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Concaténer en ligne les données d'une colonne [Sources]


Sujet :

Contribuez

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre à l'essai
    Homme Profil pro
    Néophyte
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Néophyte
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 23
    Points
    23
    Par défaut
    Bonjour et merci pour ce code.
    Est-ce qu'il fonctionne aussi depuis une requête, ou seulement depuis une table SVP?
    Cordialement.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Néophyte
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Néophyte
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 23
    Points
    23
    Par défaut
    Bonjour.
    Du coup je fais la réponse moi même après tests (et puis en regardant mieux c'était marqué dans le code):
    OUI, ça fonctionne avec les requêtes.
    Cordialement.

Discussions similaires

  1. Séparer les données d'une colonne en 3
    Par ALINE85 dans le forum Excel
    Réponses: 5
    Dernier message: 06/03/2009, 13h47
  2. Réponses: 5
    Dernier message: 20/10/2008, 16h19
  3. Réponses: 4
    Dernier message: 23/05/2007, 11h07
  4. Effacer toutes les données d'une colonne
    Par denisfavre dans le forum Access
    Réponses: 5
    Dernier message: 12/10/2005, 15h20
  5. Concaténer des lignes d'enregistrements dans une colonne
    Par dany13 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 08/07/2005, 21h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo