|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 29 ![]() |
Bonjour à tous,
Je me tourne vers vous, car je rencontre quelques difficultés dans la prog en VBA. Voici mon probleme: Je dispose d'une table de lien pere fils qui se presente de la forme suivante: pere Fils toto tata toto titi toto tete tata sasa tata soso titi jojo soso fufu et je souhaiterais arriver au résultat suivant: niv0 niv1 niv2 niv3 toto tata sasa toto tata soso toto tata soso fufu toto titi jojo toto tete J'ai dans un premier temps réussi à arriver au résultat final via assistant de création de requetes d'acces mais j 'aurai besoin transcrire l 'ensemble de ces requetes en VBA dans une fonction récursive. Merci pour l'aide que vous pourrez m'apportez |
|
|
00
|
|
|
#2 |
![]() ![]() |
salut,
si l'assistant t'a permis d'avoir le bon resultat, serait-il possible de voir le contenu SQL de la requete generee stp ? As-tu deja une idee de la recursivite a mettre en place ?
__________________
Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 29 ![]() |
Merci de t intéresser à mon problème. Pour arriver au résultat final j'ai créer douze requetes qui sont dépendantes l'une de l'autre.
Je commence tous d'abords par la tête de hiérarchie (il n'y en à qu'une) et ensuite je crée autant de requetes que de niveaux en sachant que j'ai 10 niveaux Voici les trois premieres et tu comprendras le principe: Code :
select pere as [niveau0], fils as [niveau1] from lien where pere = "Aliment"; Code :
select niveau0, niveau1, fils as [niveau2] from req1 left join lien on niveau1 = pere; Code :
select niveau0, niveau1, niveau2, fils as [niveau3] from req2 left join lien on niveau2 = pere; |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Bonjour jobe3141 et JP,
Je ne parviens pas à deviner la question en lisant la réponse. - S’agit-il de donner toutes les lignes des générations en partant de l’ancêtre ? Alors pourquoi : toto tata soso et toto tata soso fufu ? -S’agit-il de donner chacun avec ses ancêtres ? Alors pourquoi : toto tata n’est pas dans la liste ? |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 29 ![]() |
Bonjour ClaudeLELOUP
Pour répondre à ta question c'est effectivement: Donner toutes les lignes des générations en partant de l’ancêtre. Merci de m'avoir fait remarquer qu'une erreur s'est glissé dans mon premier post. La ligne toto tata soso ne devrait pas y être. Merci à tous de l'attention que vous portez à mon PB. |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
Je ne sais pas si ça répond exactement à la demande, mais il est possible de faire une seule requête directement avec par exemple les 10 niveaux, en prenant la table plusieurs fois avec des alias différents : Code :
|
||
|
|
00
|
|
|
#7 | ||||
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Vois si ceci correspond à ton souhait
Dans un module : ce code Code :
Code :
Je reviens volontiers pour expliquer si utile. |
||||
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 29 ![]() |
Merci bcp a tous et surtout à claudeleloup pour sa réponse.
Claudeleloup je t'avoue que je ne comprend pas grand chose au module et ta solution répond en partie à ce que je cherche à faire. En fait je souhaiterai que chacun des fils soient dans un champ et non dans un même champ. Je te propose de trouver ci-joint la base que tu m'as envoyé avec en plus une table dans laquelle le résultat souhaité. Serait il également possible d'inclure des claure Where pour afficher les fils en fonction d'un critére? J'espère avoir été assez clair et précis Merci pour tout. |
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Le nombre de niveaux est-il de 4 maximum ou est-ce le hasard de ton exemple ?
|
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
J'ai fait l'impasse sur 4 générations maximum.
Voici, je crois. J'ai mis des commentaires dans le code pour t'aider à comprendre ce qui s'y passe. J'ignore ton niveau de connaissance du code. N'hésite pas à revenir. Si nécessaire, je développerai pas à pas. |
|
|
00
|
|
|
#11 | ||||||||
![]() ![]() ![]() Claude LELOUPChercheur de loisirs (ayant trouvé !) Inscription : novembre 2006 Messages : 5 242 ![]() |
Bonjour,
Je résume : pour chaque dernier de lignée, tu veux la liste de ses ascendants. 1re étape Pour reconnaître qu’il s’agit d’un dernier de lignée, on va vérifier qu’il n’a pas de fils. Voici une fonction qui donne le nom d’un fils (le premier au hasard) pour un individu donné en paramètre : Code :
2e étape Pour construire la filiation, il faut connaître le père de chacun. Voici la fonction Code :
Pour chaque dernier de lignée, on va utiliser la fonction pere en boucle. On cherche d’abord le père du dernier de lignée, ensuite le grand-père… jusqu’à ce que la fonction renvoie « vide ». C’est alors le patriarche. Fin de la boucle. Voici une fonction qui fait le travail. Au fur et à mesure, les noms des membres sont notés de la droite vers la gauche et séparés par le signe « | » (Alt +124). Ce signe « rare » est choisi comme séparateur parce qu’on est sûr qu’aucun nom ne le contient. Voici la fonction Code :
Pour présenter le résultat comme tu le souhaites, il « suffit » de décomposer une lignée et de loger chaque membre dans le champ de la table qui correspond à son niveau. Voici la routine qui fait le travail. Elle est associée au clic sur le bouton. Code :
Au plaisir de te recroiser. |
||||||||
|
|
20
|
|
|
#12 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 29 ![]() |
Mon PB est résolut grâce a ClaudeLeloup. Merci bcp à toi. J'ai fait comme tu m'as dit en consultant l'aide j'ai fini par comprendre ça a mis du temps mais j'y suis arrivé.
Merci encore |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com