Function ConcatForQuery

Résolu/Fermé
Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016 - 27 oct. 2016 à 17:52
Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016 - 7 nov. 2016 à 19:10
Bonjour,

Dans MS Access 2007, j'ai une requête combinée à un Module (voir à la fin) qui permet de «formater» une liste d'étagères et de ports de plusieurs lignes à autant de lignes qu'il y a d'étagères.

Concrètement ça ressemble à ceci:
TabFinale
COMB (Champ_1) PORT (Champ_2)
BCHMPQ57ANGRPQAAO0001 1
BCHMPQ57ANGRPQAAO0001 6
BCHMPQ57ANGRPQAAO0001 15
BCHMPQ57ANGRPQAAO0001 19
BCHMPQ57ANGRPQAAO0001 27
BCHMPQ57ANGRPQAAO0001 35
BCHMPQ57ANGRPQAAO0002 5
BCHMPQ57ANGRPQAAO0002 22
BCHMPQ57ANGRPQAAO0003 25

Req_Finale
[Résultat: ConcatForQuery("COMB";[COMB];"PORT";"TabFinale";" - ")]

Donne présentement le résultat suivant:
COMB (Champ_1) PORT (Champ_2)
BCHMPQ57ANGRPQAAO0001 1-6-15-19-27-35
BCHMPQ57ANGRPQAAO0002 5-22
BCHMPQ57ANGRPQAAO0003 25

Je veux désormais obtenir un résultat qui affichera un maximum de 5 ports par étagère; alors l'étagère sera représentée à nouveau avec la séquence de 5 ports restante et ainsi de suite jusqu'à ce que la liste complète soit affichée soit :

COMB (Champ_1) PORT (Champ_2)
BCHMPQ57ANGRPQAAO0001 1-6-15-19-27
BCHMPQ57ANGRPQAAO0001 35
BCHMPQ57ANGRPQAAO0002 5-22
BCHMPQ57ANGRPQAAO0003 25

Merci pour votre aide!
Bobbie

Module
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 = CStr(.Fields(strConcat))
Else
strResult = strResult & strSep & CStr(.Fields(strConcat))
End If
.MoveNext
Loop
End If
End With
rst.Close: Set rst = Nothing
db.Close: Set db = Nothing
ConcatForQuery = strResult

End Function

3 réponses

Utilisateur anonyme
28 oct. 2016 à 01:43
Salut,

dans ta boucle, il faut que tu mettes un drapeau que tu incrémentes à + 1, et que tu sortes de la boucle si =5

Juste avant le movenext et loop

Donc, quand tu trouves un champ, tu incrémentes ici :

strResult = strResult & strSep & CStr(.Fields(strConcat)) 
drapeau=drapeau+1


Tu auras prédéfini la variable drapeau au début du code....

Et dans ton until loop, tu rajoutes :
until drapeau <6


A+
0
Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016
28 oct. 2016 à 16:46
Le script énoncé plus haut provient d'un collègue alors inutile de cacher que mes connaissances sont plutôt limitées...Alors, peux-tu m'écrire comment je peux prédéfinir la variable drapeau. Est-ce dans les Dim....?
Merci pour ton aide!
0
Utilisateur anonyme > Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016
28 oct. 2016 à 22:06
Mets ta base sur un lien cjoint et donnes le ici.

A+
0
Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016 > Utilisateur anonyme
31 oct. 2016 à 13:40
Tu devrais pouvoir accéder ici à une version simplifiée.
https://drive.google.com/file/d/0B2j78KEeIDreS3hpd3BMRnJCWGc/view?usp=sharing


Merci!
0
Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016 > Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016
31 oct. 2016 à 16:46
0
Utilisateur anonyme
1 nov. 2016 à 00:36
Je regarde ceci demain.

A+
0
Utilisateur anonyme
4 nov. 2016 à 23:31
c encore d'actualité ?

A+
0
Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016
7 nov. 2016 à 14:55
Bonjour, oui, je recherche toujours la solution, merci!
0
Utilisateur anonyme > Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016
7 nov. 2016 à 18:48
Bonjour,

voici : http://fs.ht/a120dccb-a511-11e6-b47d-0a6ad79a88ff

PS : remercies Marot, Riton et Tee
0
Charlot99 Messages postés 6 Date d'inscription jeudi 27 octobre 2016 Statut Membre Dernière intervention 7 novembre 2016
7 nov. 2016 à 19:10
Ça fonctionne très bien et ça me permet de l'intégrer à ma base de données actuelle.
Merci à vous!
0