Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Concaténer des valeurs dans un seul champ

9 réponses
Avatar
domivax
Bonjour =E0 tous,

J'ai une table qui r=E9pertorie 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=E9pertoriant les pays sur une seule ligne s=E9par=E9s par une virgule:

Pour rose

Hollande, Suisse, France

J'ai pens=E9 cr=E9er un autre champ sous ma TableProvenance qui concat=E8ne
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=E9pertorier 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=E9cieuse.
Xavier

9 réponses

Avatar
pbserv
bonjour,

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:
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


Avatar
kdonu
Merci pb pour ta r�ponse,

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
Avatar
pbserv
bonjour,
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 pb pour ta r?ponse,

Mais l? je peine un peu avec les fonctions.

Je la mets dans un module standard, jusque-l?, ?a va mais ensuite...

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


Avatar
kdonu
J'y suis arriv�, j'arrive pas � y croire.

Merci beaucoup
Avatar
kdonu
Bonjour,

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
Avatar
pbserv
bonjour,

très heureux que la fonction vous plaise.

A priori, je pense que l'erreur vient du fait que le numero de facture
retourné par le formulaire est de type String et non de type Long.
Il faut donc forcer le type Long dans la requete avec la fonction
CLng() en écrivant dans la requete :
CLng([Formulaires]![FormCreationFacture]![NoFacture])

en espérant que ca fonctionne...

pb

On 10 sep, 23:15, wrote:
Bonjour,

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


Avatar
kdonu
Bonsoir pb,

Non, �a ne marche pas.

Si je mets le num�ro de facture manuellement � l'invite de "Entrer une
valeur de param�tre" en lan�ant ma requ�te, aucun probl�me, elle
s'affiche correctement.

Par contre, si je mets le m�me num�ro � l'invite de la requ�te o� se
trouve la fonction, je me retrouve avec :

Roses : Erreur !
Tulipes : Erreur !

Malgr� votre conseil.

Je vais encore chercher un peu.

Bonne nuit.
Avatar
kdonu
J'arrive vraiment pas � trouver comment faire, sniff !
Avatar
domivax
Bonsoir,

J'ai trouvé une solution, j'utilise ma requête pour la création d'une
nouvelle table, et je lance la fonction depuis cette nouvelle table.

Encore merci.
Salutations.