Transformer une table

Le
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 à 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 ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Richard_35
Le #6304021
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"
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 ?
moromain
Le #6303901
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.
Fabien
Le #6303871
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é.

Richard_35
Le #6303831
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"
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.
moromain
Le #6303801
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.
moromain
Le #6303771
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.
Fabien
Le #6303761
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

Richard_35
Le #6303711
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"
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.
moromain
Le #6303441
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.
Richard_35
Le #6303381
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"
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.
Publicité
Poster une réponse
Anonyme