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

Transformer une table

19 réponses
Avatar
moromain
Bonjour,

J'ai une table avec plusieurs champs C1, C2, C3 :
- C1 est l'iD de chaque enregistrement,
- C2 contient le nom de l'enregistrement,
- C3 renvoi =E0 un iD, appel=E9 "p=E8re".
Elle se pr=E9sente de la mani=E8re suivante :
C1 C2 C3
1 A
2 AG 1
3 AK 1
4 AGY 2
5 AGH 2
6 B
7 BC 6
8 BCJ 7
Le champs C3 permet de hi=E9rarchiser les donn=E9es.
Mon objectif est de transformer cette table est une table de la forme
suivante :
A
A AG
A AG AGY
A AG AGH
A AK
B
B BC
B BC BCJ
Cette forme est plus visuelle : un coups d'oeil permet de comprendre
la hi=E9rarchie.
Vous devinez ma question : je n'y arrive pas !!!
J'ai essay=E9 en cr=E9ant des requ=EAtes qui contiennent par exemple
(A,B...), (AG, AK, BC...)... J'ai 13 niveaux hi=E9rarchiques. Les 13
niveaux ne sont pas toujours remplis.
Une id=E9e ?

10 réponses

1 2
Avatar
Richard_35
Bonsoir Moromain,

Si j'ai bien compris, cela veut dire que la valeur de ton champ C3 ne peut
donc pas être supérieur à 13, non ?

A bientôt,
Richard.

"moromain" a écrit dans le message de news:

Bonjour,

J'ai une table avec plusieurs champs C1, C2, C3 :
- C1 est l'iD de chaque enregistrement,
- C2 contient le nom de l'enregistrement,
- C3 renvoi à un iD, appelé "père".
Elle se présente de la manière suivante :
C1 C2 C3
1 A
2 AG 1
3 AK 1
4 AGY 2
5 AGH 2
6 B
7 BC 6
8 BCJ 7
Le champs C3 permet de hiérarchiser les données.
Mon objectif est de transformer cette table est une table de la forme
suivante :
A
A AG
A AG AGY
A AG AGH
A AK
B
B BC
B BC BCJ
Cette forme est plus visuelle : un coups d'oeil permet de comprendre
la hiérarchie.
Vous devinez ma question : je n'y arrive pas !!!
J'ai essayé en créant des requêtes qui contiennent par exemple
(A,B...), (AG, AK, BC...)... J'ai 13 niveaux hiérarchiques. Les 13
niveaux ne sont pas toujours remplis.
Une idée ?
Avatar
moromain
Eh non ! Comme tu peux le voir dans l'exemple fourni, C3 contient l'iD
d'un enregistrement d'un niveau hiérarchique supérieur. Autrement dit,
le champs C3 de l'enregistrement 1450 peut contenir la valeur 1307 (je
dis n'importe quoi), si 1307 est le niveau directement supérieur à
1450.
Est-ce que je me fais bien comprendre ? Mon problème n'est pas simple
à expliquer.
Avatar
Fabien
Eh non ! Comme tu peux le voir dans l'exemple fourni, C3 contient l'iD
d'un enregistrement d'un niveau hiérarchique supérieur. Autrement dit,
le champs C3 de l'enregistrement 1450 peut contenir la valeur 1307 (je
dis n'importe quoi), si 1307 est le niveau directement supérieur à
1450.
Est-ce que je me fais bien comprendre ? Mon problème n'est pas simple
à expliquer.

Bonjour,

Une solution
1- Soit ta table avec ses 3 Champs C1 C2 C3
2- Une requete Requête1 sur cette table :SELECT Len([c2]) AS Longueur,
Source.c2
FROM Source;
3- La table Cible composée de 13 Champs nommés Champ1 à champ13
4- le code ci dessous
Public Function change()
Dim Db As DAO.Database
Dim Rst_source As DAO.Recordset
Dim I, Lg As Integer
Dim StrSql, StrSql_Cible, StrSql_Source As String
Set Db = CurrentDb
Set Rst_source = Db.OpenRecordset("Requête1")

While Not Rst_source.EOF
Lg = Rst_source![Longueur]
StrSql = "INSERT INTO Cible ("
StrSql_Source = ""
StrSql_Cible = ""
For I = 1 To Lg
StrSql_Cible = StrSql_Cible & "[Champ" & I & "], "
StrSql_Source = StrSql_Source & "'" & Left(Rst_source![C2],
I) & "' as exp" & I & ", "
Next I
StrSql_Cible = Left(StrSql_Cible, Len(StrSql_Cible) - 2) & ")"
StrSql_Source = Left(StrSql_Source, Len(StrSql_Source) - 2)
StrSql = StrSql & StrSql_Cible & " "
StrSql = StrSql & "Select " & StrSql_Source & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL StrSql
DoCmd.SetWarnings True
Rst_source.MoveNext
Wend
Rst_source.Close
Set Rst_source = Nothing
Set Db = Nothing
End Function

et on obtient je pense le résultat souhaité.

Avatar
Richard_35
Bonjour Moromain,

Ton fichier doit être un fichier de nomenclature, non ?
Dans ton exemple :
C1 C2 C3
1 A
2 AG 1
3 AK 1
4 AGY 2
5 AGH 2
6 B
7 BC 6
8 BCJ 7

Est-il possible d'avoir 2 pères pour un fils, soit, par exemple :
9 AK 2
==> AK serait un composant de A et de AG.

A bientôt,
Richard.

"moromain" a écrit dans le message de news:

Eh non ! Comme tu peux le voir dans l'exemple fourni, C3 contient l'iD
d'un enregistrement d'un niveau hiérarchique supérieur. Autrement dit,
le champs C3 de l'enregistrement 1450 peut contenir la valeur 1307 (je
dis n'importe quoi), si 1307 est le niveau directement supérieur à
1450.
Est-ce que je me fais bien comprendre ? Mon problème n'est pas simple
à expliquer.
Avatar
moromain
Pour Richard :
Oui c'est une nomenclature.
Non, un fils n'a qu'un père, et un père peut avoir plusieurs fils.

Pour Fabien :
Je regarde ça.
Avatar
moromain
Pour Fabien :
J'ai regardé.
Compter le nombre de caractères, c'est malin !
Malheureusement, j'ai choisi de présenté mon problème avec des lettres
(1 lettre pour le niveau 1, 2 pour le niveau 2, etc.). J'aurai du
préciser que c'était pour l'exemple, et que le champs C2 contient du
texte de longueur variable (des mots et des noms).
Je ne vois pas comment adapter ta solution.
Avatar
Fabien
Pour Fabien :
J'ai regardé.
Compter le nombre de caractères, c'est malin !
Malheureusement, j'ai choisi de présenté mon problème avec des lettres
(1 lettre pour le niveau 1, 2 pour le niveau 2, etc.). J'aurai du
préciser que c'était pour l'exemple, et que le champs C2 contient du
texte de longueur variable (des mots et des noms).
Je ne vois pas comment adapter ta solution.


Ben cà ;-)

Je fais avec les données lol
Dommage j'aimais bien ma solution ;-)
OK je reviens demain.
Si y a pas de solution je replancherais sur le sujet
Bonne aprés midi

Avatar
Richard_35
Re,

OK.
L'algorithme devrait être le suivant (sans le test EOF et en français) :

Lecture d'un enreg. par la clé C1
Lecture d'un enreg. par la clé C3 avec C3Á
Lecture d'un enreg. par la clé C3 avec C3Á
... 13 fois avec stockage des info trouvées à chaque niveau
Lecture prochain enreg.
Lecture prochain enreg.
Lecture prochain enreg.

Je ne connais pas VBA, mais Fabien maîtrise, visiblement : ce sera un jeu
d'enfant pour lui de codifier tout ça (si possible) !

Bon courage et dis-nous,
Richard?

"moromain" a écrit dans le message de news:

Pour Richard :
Oui c'est une nomenclature.
Non, un fils n'a qu'un père, et un père peut avoir plusieurs fils.

Pour Fabien :
Je regarde ça.
Avatar
moromain
Je pensais justement à une solution de ce type.
Par contre, on peut pas dire que ce soit une solution légère !
Je vais tester une programmation.
Avatar
Richard_35
Re,

Le déroulement d'une nomenclature dans un fichier "à plat" ne peut pas se
résoudre par une requête simple.

Bon courage et donnes-nous un retour,
Richard.

"moromain" a écrit dans le message de news:

Je pensais justement à une solution de ce type.
Par contre, on peut pas dire que ce soit une solution légère !
Je vais tester une programmation.
1 2