Function ConcatForQuery
Résolu
Charlot99
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
Charlot99 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Charlot99 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- (Function(){css.removeclass(document.body,%20'profile_two_columns'); tab_controller.changepage("photos");})()
- Partager des photos - Guide
- Toutes mes photos - Guide
- Google photos - Télécharger - Albums photo
- Telecharger fl studio 20 pour pc gratuit complet - Télécharger - Édition & Montage
- Doublons photos - Guide
3 réponses
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 :
Tu auras prédéfini la variable drapeau au début du code....
Et dans ton until loop, tu rajoutes :
A+
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+
Merci pour ton aide!
A+
https://drive.google.com/file/d/0B2j78KEeIDreS3hpd3BMRnJCWGc/view?usp=sharing
Merci!
https://drive.google.com/drive/folders/0B2j78KEeIDreWkUzTUVWdGRralU?usp=drive_open