OVH Cloud OVH Cloud

Grouper valeurs....

5 réponses
Avatar
M
Bonjour

J'ai une table avec un champ "FORMATIONS", j'aimerai=20
regroupe dans un m=EAme champ les valeurs contenue dans le =20
champ "FORMATIONS"....
Ex:
"Formations"
F1
F2
F3
.....

Avoit dans un seul champ

F1,F2,F3,F4

Merci

5 réponses

Avatar
Xavier HUE
Bonjour,

1) Requête Analyse Croisée (créée avec l'assistant):
TRANSFORM First(Formations.Valeur) AS PremierDeValeur
SELECT Formations.Id1
FROM Formations
GROUP BY Formations.Id1
PIVOT Formations.Valeur;

2) Requête concaténant les champs:

SELECT [Table2_Analyse croisée].F1, [Table2_Analyse
croisée].F2, [Table2_Analyse croisée].F4, [Table2_Analyse
croisée].F5, [F1] & ", " & [F2] & ", " & [F4] & ", " &
[F5] AS Fx
FROM [Table2_Analyse croisée];

Un bémol:
La requête No 2 reprend "en dur" les codes retournés par
la requête Analyse Croisée. Si plus tard tu crées de
nouveaux codes, il faudra les ajouter dans celle-ci.

Un autre moyen serait de travailler par VBA.

Ca aide?
Cordialement.
Avatar
M
Merci je fais déja cela je le voudrais en VBA car plus
souple en cas de changement de valeurs.....
-----Message d'origine-----
Bonjour,

1) Requête Analyse Croisée (créée avec l'assistant):
TRANSFORM First(Formations.Valeur) AS PremierDeValeur
SELECT Formations.Id1
FROM Formations
GROUP BY Formations.Id1
PIVOT Formations.Valeur;

2) Requête concaténant les champs:

SELECT [Table2_Analyse croisée].F1, [Table2_Analyse
croisée].F2, [Table2_Analyse croisée].F4, [Table2_Analyse
croisée].F5, [F1] & ", " & [F2] & ", " & [F4] & ", " &
[F5] AS Fx
FROM [Table2_Analyse croisée];

Un bémol:
La requête No 2 reprend "en dur" les codes retournés
par

la requête Analyse Croisée. Si plus tard tu crées de
nouveaux codes, il faudra les ajouter dans celle-ci.

Un autre moyen serait de travailler par VBA.

Ca aide?
Cordialement.
.



Avatar
Xavier HUE
Bonjour,

Sub ConcatenerColonnes()
Dim db As Database
Dim Frd As Recordset
Dim intF As Integer
Dim strConcat As String

Set db = CurrentDb
Set Frd = db.OpenRecordset("Table2_Analyse croisée")

'La Requête Analyse Croisée doit retourner:
' Un champ en tant que Entête de ligne
' les Champs contenant les valeurs F1, F2...
' soit par exemple
' XXXXX F1 F2 F4 F6
' YYYYY F1 F3 F4

If Not (Frd.BOF) Then
Frd.MoveFirst
While Not (Frd.EOF)
strConcat = ""
For intF = 1 To Frd.Fields.Count - 1
If Not (IsNull(Frd.Fields(intF).Value)) Then
strConcat = strConcat & Frd.Fields(intF).Value
& ", "
End If
Next intF

If strConcat <> "" Then 'Supprimer dernière
virgule et espace
strConcat = Left(strConcat, Len(strConcat) - 2)
End If

'Ici, placer le code utilisant strConCat
' ...
Frd.MoveNext
Wend
End If

End Sub

Cordialement.
Xavier.
Avatar
M
Bonjour

Je teste de suite

Merci beaucoup

A+
-----Message d'origine-----
Bonjour,

Sub ConcatenerColonnes()
Dim db As Database
Dim Frd As Recordset
Dim intF As Integer
Dim strConcat As String

Set db = CurrentDb
Set Frd = db.OpenRecordset("Table2_Analyse croisée")

'La Requête Analyse Croisée doit retourner:
' Un champ en tant que Entête de ligne
' les Champs contenant les valeurs F1, F2...
' soit par exemple
' XXXXX F1 F2 F4 F6
' YYYYY F1 F3 F4

If Not (Frd.BOF) Then
Frd.MoveFirst
While Not (Frd.EOF)
strConcat = ""
For intF = 1 To Frd.Fields.Count - 1
If Not (IsNull(Frd.Fields(intF).Value)) Then
strConcat = strConcat & Frd.Fields(intF).Value
& ", "
End If
Next intF

If strConcat <> "" Then 'Supprimer dernière
virgule et espace
strConcat = Left(strConcat, Len(strConcat) - 2)
End If

'Ici, placer le code utilisant strConCat
' ...
Frd.MoveNext
Wend
End If

End Sub

Cordialement.
Xavier.
.



Avatar
Bonojour

J'ai fais la 1ére méthodes qui differe de la mienne je
n'est pas le résultat attendu.

NOMPRENOM Formation1 Formation2 Formation3
XXXXXX F1 F2
yyyyyyy F6 F4
yyyyyyy F5
ZZZZZZZ F1 F3

Fx donne F1,
F2,
j'aimerai avoir

Fx Fxx
XXXXX F1, F2,
YYYYY F6,F5 ,,
Merci



-----Message d'origine-----
Bonjour,

Sub ConcatenerColonnes()
Dim db As Database
Dim Frd As Recordset
Dim intF As Integer
Dim strConcat As String

Set db = CurrentDb
Set Frd = db.OpenRecordset("Table2_Analyse croisée")

'La Requête Analyse Croisée doit retourner:
' Un champ en tant que Entête de ligne
' les Champs contenant les valeurs F1, F2...
' soit par exemple
' XXXXX F1 F2 F4 F6
' YYYYY F1 F3 F4

If Not (Frd.BOF) Then
Frd.MoveFirst
While Not (Frd.EOF)
strConcat = ""
For intF = 1 To Frd.Fields.Count - 1
If Not (IsNull(Frd.Fields(intF).Value)) Then
strConcat = strConcat & Frd.Fields(intF).Value
& ", "
End If
Next intF

If strConcat <> "" Then 'Supprimer dernière
virgule et espace
strConcat = Left(strConcat, Len(strConcat) - 2)
End If

'Ici, placer le code utilisant strConCat
' ...
Frd.MoveNext
Wend
End If

End Sub

Cordialement.
Xavier.
.