Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

convertion des données de plusieurs champs dans un champ

5 réponses
Avatar
t.hateau
j'ai une table qui a le format suivant :
date objet Chk1 chk2 chk3... chk140
21/01/2005 test1 non oui oui ...
22/01/2005 test2 non oui non ...


je voudrais g=E9n=E9rer un =E9tat de la forme suivante :
chk2
21/01/2005 test1
22/01/2005 test2

chk3
21/01/2005 test1

comment est-ce possible ?

5 réponses

Avatar
Pierre CFI [mvp]
bonjour
telles que sont présentées tes données tu ne peux pas faire çà de façon
accessienne (simple) il faut en vba faire un prog de transformation de
données et encore
mais il y a toujours des petits génies qui rodent ici

--
Pierre
MVP microsoft Access
Plein de choses à voir ici :
http://users.skynet.be/mpfa/

a écrit dans le message de news:

j'ai une table qui a le format suivant :
date objet Chk1 chk2 chk3... chk140
21/01/2005 test1 non oui oui ...
22/01/2005 test2 non oui non ...


je voudrais générer un état de la forme suivante :
chk2
21/01/2005 test1
22/01/2005 test2

chk3
21/01/2005 test1

comment est-ce possible ?
Avatar
Jessy Sempere [MVP]
Bonjour

Perso ce que je ferais :

Une table avec comme champ :
MaDate, Objet, CHK

Après pour l'alimenter, un petit code comme dit Pierre,
Le principe, tu créé un recordset sur la table initial,
et un sur la nouvelle table.
Ensuite tu fais une boucle pour parcourir chaque enregistrements
de ta première table, dans cette boucle, tu fais une autre boucle
imbriquée pour parcourir tous tes champs CHK et tester leur valeur,
si c'est vrai, tu fais un ajout d'enregistrement dans le 2 ème recordset
en y mettant la valeur en cours de la boucle supérieur pour la date et
l'objet et en y mettant la nom du chk sur le lequel tu viens de boucler.

En gros :
dim rst1 as recordset
dim rst2 as recordset
dim intField as integer
set rst1 = currentdb.openrecordset ("premièretable")
set rst2 = currentdb.openrecordset("nouvelletable")
with rst1
if not .bof then
.movefirst
do until .eof
for intField = 1 to 140
if .fields("CHK" & intfield) = true then
rst2.addnew
rst2.fields("madate")=.fields("maDate")
rst2.fields("objet")=.fields("objet")
rst2.fields("chk")="CHK" & intfield
end if
next
.movenext
loop
end with
set rst1=nothing
set rst2=nothing
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Pierre CFI [mvp]" a écrit dans le message news:
#
bonjour
telles que sont présentées tes données tu ne peux pas faire çà de façon
accessienne (simple) il faut en vba faire un prog de transformation de
données et encore
mais il y a toujours des petits génies qui rodent ici

--
Pierre
MVP microsoft Access
Plein de choses à voir ici :
http://users.skynet.be/mpfa/

a écrit dans le message de news:

j'ai une table qui a le format suivant :
date objet Chk1 chk2 chk3... chk140
21/01/2005 test1 non oui oui ...
22/01/2005 test2 non oui non ...


je voudrais générer un état de la forme suivante :
chk2
21/01/2005 test1
22/01/2005 test2

chk3
21/01/2005 test1

comment est-ce possible ?




Avatar
Pierre CFI [mvp]
quand on parle de génie, on vois la queue de jessy
pas con, çà, c'est bien mon petit jessy, le "vieux" doit en étre tout frite,
euh pardon, baba

--
Pierre
MVP microsoft Access
Plein de choses à voir ici :
http://users.skynet.be/mpfa/

"Jessy Sempere [MVP]" a écrit dans le message de
news: 433ab113$
Bonjour

Perso ce que je ferais :

Une table avec comme champ :
MaDate, Objet, CHK

Après pour l'alimenter, un petit code comme dit Pierre,
Le principe, tu créé un recordset sur la table initial,
et un sur la nouvelle table.
Ensuite tu fais une boucle pour parcourir chaque enregistrements
de ta première table, dans cette boucle, tu fais une autre boucle
imbriquée pour parcourir tous tes champs CHK et tester leur valeur,
si c'est vrai, tu fais un ajout d'enregistrement dans le 2 ème recordset
en y mettant la valeur en cours de la boucle supérieur pour la date et
l'objet et en y mettant la nom du chk sur le lequel tu viens de boucler.

En gros :
dim rst1 as recordset
dim rst2 as recordset
dim intField as integer
set rst1 = currentdb.openrecordset ("premièretable")
set rst2 = currentdb.openrecordset("nouvelletable")
with rst1
if not .bof then
.movefirst
do until .eof
for intField = 1 to 140
if .fields("CHK" & intfield) = true then
rst2.addnew
rst2.fields("madate")=.fields("maDate")
rst2.fields("objet")=.fields("objet")
rst2.fields("chk")="CHK" & intfield
end if
next
.movenext
loop
end with
set rst1=nothing
set rst2=nothing
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Pierre CFI [mvp]" a écrit dans le message
news:
#
bonjour
telles que sont présentées tes données tu ne peux pas faire çà de façon
accessienne (simple) il faut en vba faire un prog de transformation de
données et encore
mais il y a toujours des petits génies qui rodent ici

--
Pierre
MVP microsoft Access
Plein de choses à voir ici :
http://users.skynet.be/mpfa/

a écrit dans le message de news:

j'ai une table qui a le format suivant :
date objet Chk1 chk2 chk3... chk140
21/01/2005 test1 non oui oui ...
22/01/2005 test2 non oui non ...


je voudrais générer un état de la forme suivante :
chk2
21/01/2005 test1
22/01/2005 test2

chk3
21/01/2005 test1

comment est-ce possible ?








Avatar
t.hateau
merci beucoup pour votre celerité et efficacité, le code def :
Sub generer_espace_reduit_formater()
'génère la table espace(reduit_reformater)
Dim Rst1 As Recordset
Dim Rst2 As Recordset
Dim intField, NbDeChamp As Integer
Dim SQL As String
Set Rst1 = CurrentDb.OpenRecordset("doubon_trvx")
Set Rst2 = CurrentDb.OpenRecordset("espace(reduit_reformater)")
'efface le contenu de la table
DoCmd.SetWarnings False
SQL = "DELETE [espace(reduit_reformater)].* FROM
[espace(reduit_reformater)]"
DoCmd.RunSQL SQL
DoCmd.SetWarnings False
'ça tourne
With Rst1
NbDeChamp = .Fields.Count
If Not .BOF Then
.MoveFirst
Do Until .EOF
For intField = 4 To (NbDeChamp - 1)
If .Fields(intField) = True Then
Rst2.AddNew
Rst2.Fields("N°projet") = .Fields("N°projet")
Rst2.Fields("Intit_projet") =
.Fields("Intit_projet")
Rst2.Fields("date_cours_dbt_travaux") =
.Fields("date_cours_dbt_travaux")
Rst2.Fields("date_cours_fin_travaux") =
.Fields("date_cours_fin_travaux")
Rst2.Fields("chk") = .Fields(intField).Name
Rst2.Update
End If
Next
.MoveNext
Loop
End If
End With
Set Rst1 = Nothing
Set Rst2 = Nothing
End Sub
Avatar
t.hateau
merci beucoup pour votre celerité et efficacité, le code def :
Sub generer_espace_reduit_formater()
'génère la table espace(reduit_reformater)
Dim Rst1 As Recordset
Dim Rst2 As Recordset
Dim intField, NbDeChamp As Integer
Dim SQL As String
Set Rst1 = CurrentDb.OpenRecordset("doubon_trvx")
Set Rst2 = CurrentDb.OpenRecordset("espace(reduit_reformater)")
'efface le contenu de la table
DoCmd.SetWarnings False
SQL = "DELETE [espace(reduit_reformater)].* FROM
[espace(reduit_reformater)]"
DoCmd.RunSQL SQL
DoCmd.SetWarnings False
'ça tourne
With Rst1
NbDeChamp = .Fields.Count
If Not .BOF Then
.MoveFirst
Do Until .EOF
For intField = 4 To (NbDeChamp - 1)
If .Fields(intField) = True Then
Rst2.AddNew
Rst2.Fields("N°projet") = .Fields("N°projet")
Rst2.Fields("Intit_projet") =
.Fields("Intit_projet")
Rst2.Fields("date_cours_dbt_travaux") =
.Fields("date_cours_dbt_travaux")
Rst2.Fields("date_cours_fin_travaux") =
.Fields("date_cours_fin_travaux")
Rst2.Fields("chk") = .Fields(intField).Name
Rst2.Update
End If
Next
.MoveNext
Loop
End If
End With
Set Rst1 = Nothing
Set Rst2 = Nothing
End Sub