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 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025 - 26 janv. 2020 à 20:35
yg_be Messages postés 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025 - 26 janv. 2020 à 20:35
A voir également:
- Concaténer 3 champs
- Picasa 3 - Télécharger - Albums photo
- Concatener deux cellules excel - Guide
- Photorecit 3 - Télécharger - Visionnage & Diaporama
- Ai suite 3 download - Télécharger - Optimisation
- Concaténer pdf - Guide
3 réponses
yg_be
Messages postés
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
Ambassadeur
1 557
Modifié le 26 janv. 2020 à 13:12
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?
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
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
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
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
1 557
26 janv. 2020 à 16:42
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.
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
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
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
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
23416
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 janvier 2025
1 557
26 janv. 2020 à 20:35
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:
tu as fait 90% du travail, plus qu'à un légèrement simplifier, aucune raison de te sentir coincé.
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é.