Concaténer des valeurs dans un seul champ
Le
domivax
Bonjour à tous,
J'ai une table qui répertorie la provenance des fleurs
Fleurs Pays
Roses Hollande
Roses Suisse
Roses France
Tulipes Hollande
Tulipes Allemagne
Tulipes Autriche
Marguerites France
Marguerites Suisse
Dans mon formulaire de gestion des fleurs, je voudrais avec un champ
répertoriant les pays sur une seule ligne séparés par une virgule:
Pour rose
Hollande, Suisse, France
J'ai pensé créer un autre champ sous ma TableProvenance qui concatène
tous les pays mais je n'y arrive pas, est-ce la solution ?
Parce que j'aurais, au cours de la construction de mon programme, un
formulaire qui devra répertorier toutes les fleurs avec leurs pays de
provenance, un peu du style ci-dessous.
Roses : Hollande, Suisse, France
Tulipes : Hollande, Allemagne, Autriche
Marguerites : France, Suisse
Comment dois-je m'y prendre.
Merci pour votre aide précieuse.
Xavier
J'ai une table qui répertorie la provenance des fleurs
Fleurs Pays
Roses Hollande
Roses Suisse
Roses France
Tulipes Hollande
Tulipes Allemagne
Tulipes Autriche
Marguerites France
Marguerites Suisse
Dans mon formulaire de gestion des fleurs, je voudrais avec un champ
répertoriant les pays sur une seule ligne séparés par une virgule:
Pour rose
Hollande, Suisse, France
J'ai pensé créer un autre champ sous ma TableProvenance qui concatène
tous les pays mais je n'y arrive pas, est-ce la solution ?
Parce que j'aurais, au cours de la construction de mon programme, un
formulaire qui devra répertorier toutes les fleurs avec leurs pays de
provenance, un peu du style ci-dessous.
Roses : Hollande, Suisse, France
Tulipes : Hollande, Allemagne, Autriche
Marguerites : France, Suisse
Comment dois-je m'y prendre.
Merci pour votre aide précieuse.
Xavier

Poser une question


une solution consiste à créer une fonction VBA qui réalise la
concaténation.
Fonction VBA à placcer dans un module standard, elle nécessite
d'activer la référence DAO :
Public Function ConcatColonne(vValeurPivot As Variant, _
sNomColonnePivot As String, _
sNomColonneConcat As String, _
sNomDomaine As String) As String
On Error GoTo errtag
Dim oDb As DAO.Database
Dim oRs As DAO.Recordset
Dim sSQL As String
If IsNull(vValeurPivot) Then Exit Function
sSQL = "SELECT " & sNomColonneConcat & " & ', ' As C FROM " & _
sNomDomaine & " WHERE " & sNomColonnePivot & "="
Select Case VarType(vValeurPivot)
Case vbString
sSQL = sSQL & """" & vValeurPivot & """"
Case vbDate
sSQL = sSQL & CDbl(vValeurPivot)
Case Else
sSQL = sSQL & CStr(vValeurPivot)
End Select
sSQL = sSQL & " ORDER BY " & sNomColonneConcat
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) - 2)
fin:
Set oDb = Nothing
Set oRs = Nothing
Exit Function
errtag:
ConcatColonne = "Erreur !"
Resume fin
End Function
et voici la requete correspondante :
SELECT DISTINCT
[Fleurs] & " : " & ConcatColonne([Fleurs],"Fleurs","Pays","MaTable")
AS [Fleur et Pays]
FROM MaTable AS T;
pb
On 9 sep, 20:07, wrote:
Mais l� je peine un peu avec les fonctions.
Je la mets dans un module standard, jusque-l�, �a va mais e nsuite...
1) comment est-ce que la fonction s'ex�cute
2) dois-je vraiment rajouter une colonne concatener directement dans
ma Table
3) tu me donnes aussi la requ�te correspondante, je ne comprends pas
tellement le AS [Fleur et Pays] alors que ce sont deux champs bien
distincts.
Merci pour tes pr�cisions.
A bient�t.
Xvier
Q: 1) comment est-ce que la fonction s'ex?cute
R: elle est appelé dans la requete donnee ci-dessus
Q: 2) dois-je vraiment rajouter une colonne concatener directement
dans ma Table
R: NON, il faut simplement enregistrer la requete dans votre base de
donnees puis creer un formulaire ayant comme source de donnee cette
requete et non votre table
Q: 3) tu me donnes aussi la requ?te correspondante, je ne comprends
pas tellement le AS [Fleur et Pays] alors que ce sont deux champs bien
distincts.
R: la requete ne retourne qu'un champ qui contient le nom de la fleur
et la liste des pays (grace a la fonction VBA) c'est pour ca que je le
nomme [Fleur et Pays].
pb
On 9 sep, 22:31, wrote:
Merci beaucoup
Je reviens par rapport à la réponse sur le concaténer d'hier qui
marche à merveille mais en réfléchissant bien il me fallait celle-ci
non pas à partir d'une Table mais bien évidemment d'une requête.
J'ai créé ma requête qui regroupe six Tables (des fois je ne sais
vraiment pas comment j'y arrive).
Cette requête est importante puisque qu'elle contient le numéro de
facture.
Je voudrais grâce à cette requête à ce que le client ait sur sa
facture la provenance des fleurs qu'il a commandées et non pas la
liste de la provenance de toutes nos fleurs. Par exemple : Roméo
achète que des roses pour la Saint-Valentin et il reçoit la facture
avec la provenance de toutes nos fleurs... ben il revient plus et il
quitte Juliette.
En mettant, directement le numéro de facture dans mon critère dans la
requête, la fonction marche à merveille.
Par contre, si je fais référence dans mon critère à une valeur d'un
TextBox de mon formulaire du genre [Formulaires]![FormCreationFacture]!
[NoFacture], je me retrouve avec les bonnes fleurs MAIS avec comme
pays de provenance.... Rose : Erreur !
Qu'est ce que je fais de faux ?
Merci pour vos réponses.
A bientôt
Xavier