Auteur

MVP Office Access 2003, 2004, 2005 et 2006

Qui sont les MVP ?

 
 

Codes pour Access

+ Base de données
+ Administrateur
+ Table
 -  Requête
+ Formulaire
+ Dates & Heures
+ Nombre
+ Math
+ Fichier
+ Commandes externes
+ Automation
+ Equivalence
 
 

Tuto Access 2007

+ Base de données
 
 

Lettre d'information

Pour avoir des nouvelles de ce site, inscrivez-vous à notre Newsletter.
S'abonner
Se désabonner

captcha
Merci de recopier le code alphanumérique ci-dessus
114 Abonnés
 
 

Requête - Concaténation par regroupement

Description 

Cette fonction permet de concaténer les valeur d'un champ dans un champ unique en fonction du regroupement établi sur un autre champ.

 
Synthaxe 

ConcatForQuery (strRegroup, fldRegroup, strConcat,strTable [, strSep])

La synthaxe de la fonction ConcatForQuery comprend les éléments suivants :

ElémentsDescription

strRegroup

Expression de chaîne correspondant au nom du champ qui déterminera le regroupement.
 fldRegroupDonnées du champ qui servira au regroupement.
 strConcatExpression de chaîne correspondant au nom du champ que l'on souhaite concaténer.
 strTableExpression de chaîne correspondant au nom de la table source.
strSepFacultatif. Expression de chaîne correspondant séparateur entre les données concaténées, la valeur par défaut est "/".
 
Exemple 

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

 

fldNom
fldPrénom
DupontPascal
MartinNathalie
MartinMichel
MartinPascal
DupontGérard
DurandSimon
DurandBernard
DurandRobert
DupuisAlbert

 

La fonction 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
DupontPascal - Gérard
MartinNathalie - Michel - Pascal
DurandSimon - Bernard - Robert
DupuisAlbert

 

 
Code de la fonction 


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

 


Date de création : 22/09/2006 @ 00:05
Dernière modification : 26/04/2007 @ 22:15
Catégorie : Requête
Page lue 5433 fois


Prévisualiser la page Prévisualiser la page     Imprimer la page Imprimer la page

 
 

Réactions à cet article


Réaction n°2 

par roro le 05/04/2013 @ 08:52

Bonjour,

Ce code fonctionne presque parfaitement pour mon utilisation.

Mon problème est que, bien que le champ de la table destination où ajouter le résultat de la concaténation soit de type 'mémo', il n'est ajouté que les 255 premiers caractères. Quelle solution pour pallier à ce pb?

Merci d'une réponse


Réaction n°1 

par JJ29 le 31/01/2010 @ 18:06

Merci pour votre article 

J'utilise Access 2002 - J'ai donc recopié fidèlement votre code pour mieux le comprendre 

1 J'ai eu un message d'erreur Car Acces ne reconnait pas fields(concat) avec le message ' Elément non trouvé dans la sélection - Je l'ai remplacé par fields (2)

2 Par ailleurs , il m'a fallu gérer le cas ou il n'y a pas de prénom

Qu'en pensez- vous ?

JJ 

 

 


 
 

Recherche




Google

 
 

Préférences

Votre nom (ou pseudo) :

Votre mot de passe :

     


Membres 76 Membres

membres les 10 derniers :
jujubegood   Rachid   fifimeyrou   MoxQwoidT   fof_alaz   bellemeche   Bruno   fatima   foubay   feever   
Membre en ligne : Membre en ligne :
( personne )
Anonyme en ligne : Anonyme en ligne : 1

Total visites : Total visites : 119046  
hit Affluence record: 102
le 17/06/2007 @ 07:36

Ecrire à Jessy SEMPERE Ajouter aux favoris Recommander ce site à un ami Version mobile
 
 


Design Jessy © 2007 - Compatible IE6, IE7 et Mozilla 2.0.0.1

  Site créé avec GuppY v4.5.18 © 2004-2005 - Licence Libre CeCILL

Document généré en 0.24 seconde