Concaténer 3 champs

Fermé
NAIMA804 Messages postés 4 Date d'inscription samedi 25 janvier 2020 Statut Membre Dernière intervention 25 mars 2020 - Modifié le 25 janv. 2020 à 18:31
yg_be Messages postés 23014 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 juillet 2024 - 26 janv. 2020 à 20:35
Bonjour
pouvez m'aider svp
j'ai une table TB_Lots qui comprend 3 champs NUM_AO, SOUMISSIONNAIRE, Lot
cette table et en relation avec la table AO et soumissionnaire
chaque soumissionnaire peut participer à plusieurs AO et sur plusieurs Lots (lot est un champ numérique)
j'ai crée une requête comprenant ses trois champs avec des conditions bien sur
ce que je cherche c'est de créer une requête qui dépond de ma 1ere requête où je peux concaténer les numéros des lots de chaque soumissionnaire et pour chaque NUM_AO
exemple
NUM_AO soumissionnaire lot
AO 001/2019 XXXXXX 1,2,9..............
AO 001/2019 YYYYYY 9,10,56,................
AO 001/2019 ZZZZZZ 7,9,10,62.....................
AO 009/2019 JJJJJJ 1,2,3,4...
AO 009/2019 XXXXX 1,6,.....
ainsi de suite
j'espère que j'ai bien expliqué
Merci
A voir également:

3 réponses

yg_be Messages postés 23014 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 juillet 2024 1 502
Modifié le 26 janv. 2020 à 13:12
bonjour, cela peut se faire, via une formule VBA. es-tu prêt à utiliser cette technique?
peux-tu partager le code SQL de ta requête?
NAIMA804 Messages postés 4 Date d'inscription samedi 25 janvier 2020 Statut Membre Dernière intervention 25 mars 2020
26 janv. 2020 à 16:23
Bonjour
merci pour ta réponse
le travail que j'ai fait pour essayer de trouver une solution c'est de fusionner le champ "NUM_AO" avec "SOUMISSIONNAIRE" sous le nom du champ "SOUM" qui me donne la forme suivante "001/2019-xxxxx" par une requête "REQ-RECUP"
et j'ai créé le module, voila le code

Public Function RecupLots(NOM As String) As String
Dim res As DAO.Recordset
Dim SQL As String
'Selectionne les projet du partcipant
'chr(34) correspond a des guillemets pour encadrer le texte
SQL = "SELECT Lot FROM REQ_RECUP WHERE SOUM=" & _
Chr(34) & NOM & Chr(34)
Set res = CurrentDb.OpenRecordset(SQL)
'Concatene les différents enregistrement
While Not res.EOF
RecupLots = RecupLots & res.Fields(0).Value & ", "
res.MoveNext
Wend
'Enleve le dernier ;
RecupLots = Left(RecupLots, Len(RecupLots) - 1)
'libere la mémoire
Set res = Nothing
End Function

et j'ai crée ma requête :
SELECT DISTINCT REQ_RECUP.SOUM, RecupLots(SOUM) AS Lot, REQ_RECUP.NUM_AO, REQ_RECUP.SOUMISSIONNAIRE
FROM REQ_RECUP
GROUP BY REQ_RECUP.SOUM, RecupLots(SOUM), REQ_RECUP.NUM_AO, REQ_RECUP.SOUMISSIONNAIRE
HAVING (((REQ_RECUP.SOUM) Is Not Null));
ça fonctionne mais je ne suis pas satisfaite par ce travail, je le trouve trop long
yg_be Messages postés 23014 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 juillet 2024 1 502
26 janv. 2020 à 16:42
je pense que l'approche est bonne.
je ne vois pas bien l'utilité de la requête intermédiaire, tu pourrais travailler directement sur la table.
par ailleurs, au lieu d'avoir le texte de la requête SQL dans la fonction RecupLots, tu pourrais avoir une fonction générique, qui recevrait le texte de la requête comme paramètre.
SELECT NUM_AO, SOUMISSIONNAIRE, 
Recupp("SELECT Lot FROM TB_Lots WHERE SOUMISSIONNAIRE = '" & SOUMISSIONNAIRE & "' "
      & " AND NUM_AO = " & NUM_AO ) AS Lot
FROM TB_Lots
GROUP BY NUM_AO, SOUMISSIONNAIRE
0
NAIMA804 Messages postés 4 Date d'inscription samedi 25 janvier 2020 Statut Membre Dernière intervention 25 mars 2020
26 janv. 2020 à 18:34
le fait de ne pas travailler sur la table directement car le groupement des lots se fait par soumissionnaire et non pas par AO et c'est mon but
pour le code que tu m'a donné, si j'ai bien compris je dois créer une requête sql contenant ton code mais il me demande e définir recupp

merci pour l'importance que tu donnes à mon problème car je suis vraiment coincée
yg_be Messages postés 23014 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 juillet 2024 1 502
26 janv. 2020 à 20:35
je pensais que le groupement des lots se faisait par soumissionnaire et par AO, pas par soumissionnaire.
nous devons beaucoup deviner: tu ne donnes que peu d'informations: tu ne nous montres pas la requête REQ_RECUP, et tu nous montres, dans ton exemple, ce que tu veux obtenir, sans donner les données que tu as.
la fonction recupp est une simplification de la fonction recupLots, exemple:
Function recupp(sqlsource As String) As String
Dim rs As DAO.Recordset, val As String, champ
Set rs = CurrentDb.OpenRecordset(sqlsource)
recupp = ""
Do While Not rs.EOF
    champ = rs.Fields(0)
    If Not IsNull(champ) Then
        val = champ
        If konrecuppkat <> "" Then
            recupp = recupp + ","
        End If
        recupp = recupp + val
    End If
    rs.MoveNext
Loop
End Function

tu as fait 90% du travail, plus qu'à un légèrement simplifier, aucune raison de te sentir coincé.
0