5 réponses
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
16 juil. 2009 à 23:32
16 juil. 2009 à 23:32
Normalement c'est très simple, si les tables sont liées, il n'y a qu'à choisir dans la requête les champs dans les tables correspondantes...
Un fils peut avoir un père, un grand père, un arrière grand père, etc...
Ce n'est pas d'un niveau 1 uniquement, c'est pourquoi j'ai du mal.
Apparemment je suis obligé de passer par un script, que j'essaye de rédiger mais ne connaissant pas VBA c'est difficile.
Si tu connais VBA, tu peux toujours me donner un coup de main j'ai pas mal avancé mais je bloque sur une erreur :
http://www.commentcamarche.net/forum/affich 13395999 erreur objet requis
Merci pour ton aide !
François
Ce n'est pas d'un niveau 1 uniquement, c'est pourquoi j'ai du mal.
Apparemment je suis obligé de passer par un script, que j'essaye de rédiger mais ne connaissant pas VBA c'est difficile.
Si tu connais VBA, tu peux toujours me donner un coup de main j'ai pas mal avancé mais je bloque sur une erreur :
http://www.commentcamarche.net/forum/affich 13395999 erreur objet requis
Merci pour ton aide !
François
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
20 juil. 2009 à 12:00
20 juil. 2009 à 12:00
Non, tu n'es absolument pas obligé de passer par VBA.
On a déjà eu ce problème avec quelqu'un qui voulait faire la généalogie de ses rongeurs je crois.
Tu n'as qu'à faira parraître plusieurs fois les mêmes tables dans la requête.
On a déjà eu ce problème avec quelqu'un qui voulait faire la généalogie de ses rongeurs je crois.
Tu n'as qu'à faira parraître plusieurs fois les mêmes tables dans la requête.
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
20 juil. 2009 à 12:01
20 juil. 2009 à 12:01
Tiens, j'ai retrouvé le lien:
http://www.commentcamarche.net/forum/affich 11145413 arbre genealogique avec access 2007
http://www.commentcamarche.net/forum/affich 11145413 arbre genealogique avec access 2007
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci de ta réponse !
J'ai fini par me mettre au VBA qui n'est pas un langage très dur, et grâce à une fonction récursive je peux calculer la généalogie.
Finalement c'est une bonne chose, car je m'aperçois que je pouvais pas échapper à VBA car j'ai écris une dizaine d'autres fonctions...
Voici ma fonction récursive :
Function getGenealogie(ID As Integer)
' Cette fonction prend en paramètre l'ID d'un enregistrement, et parcours tous les pères de celui-ci récursivement afin d'établir sa généalogie, donc sa place dans l'arborescence
' Entrée : Integer (ID de l'enregistrement)
' Sortie : String (le chemin complet avec des quotes et des slashs)
Dim ChnSQL As String ' variable contenant la requete SQL
Dim DB As Database ' variable contenant un pointeur vers la base de données
Dim myRec As Recordset ' variable contenant le retour de la requete
Dim IDPERE As Integer ' variable contenant l'id du parent
Dim INTITULE As String ' variable contenant l'intitule de l'objet courant
Dim CheminEnCours As String 'variable contenant le chemin en cours
If ID <> 0 Then
'On récupère les informations de l'intitulé en cours
Set DB = CurrentDb
ChnSQL = "SELECT CODE, ID, INTITULE, IDPERE FROM [NOMENCLATURE-ARCHIVES] WHERE ID=" & ID
Set myRec = DB.OpenRecordset(ChnSQL)
myRec.MoveFirst
With myRec
If myRec.AbsolutePosition > -1 Then
CODE = myRec("CODE")
INTITULE = myRec("INTITULE")
IDPERE = myRec("IDPERE")
End If
End With
'On ferme l'enregistrement
myRec.Close
'creation du chemin avec la page en cours
'Chr(34) correspond à l'insertion d'un double quote, nécessaire pour la création des répertoires sous UNIX afin de gérer les espaces dans les noms
CheminEnCours = Chr(34) & CODE & "-" & INTITULE & Chr(34) & "/"
'creation du chemin complet grace a un appel recursif
CheminComplet = getGenealogie(IDPERE) & CheminEnCours
Else
' return de fonction
getGenealogie = CheminComplet
End If
'On retourne la valeur du chemin
getGenealogie = UCase(CheminComplet)
End Function
J'ai fini par me mettre au VBA qui n'est pas un langage très dur, et grâce à une fonction récursive je peux calculer la généalogie.
Finalement c'est une bonne chose, car je m'aperçois que je pouvais pas échapper à VBA car j'ai écris une dizaine d'autres fonctions...
Voici ma fonction récursive :
Function getGenealogie(ID As Integer)
' Cette fonction prend en paramètre l'ID d'un enregistrement, et parcours tous les pères de celui-ci récursivement afin d'établir sa généalogie, donc sa place dans l'arborescence
' Entrée : Integer (ID de l'enregistrement)
' Sortie : String (le chemin complet avec des quotes et des slashs)
Dim ChnSQL As String ' variable contenant la requete SQL
Dim DB As Database ' variable contenant un pointeur vers la base de données
Dim myRec As Recordset ' variable contenant le retour de la requete
Dim IDPERE As Integer ' variable contenant l'id du parent
Dim INTITULE As String ' variable contenant l'intitule de l'objet courant
Dim CheminEnCours As String 'variable contenant le chemin en cours
If ID <> 0 Then
'On récupère les informations de l'intitulé en cours
Set DB = CurrentDb
ChnSQL = "SELECT CODE, ID, INTITULE, IDPERE FROM [NOMENCLATURE-ARCHIVES] WHERE ID=" & ID
Set myRec = DB.OpenRecordset(ChnSQL)
myRec.MoveFirst
With myRec
If myRec.AbsolutePosition > -1 Then
CODE = myRec("CODE")
INTITULE = myRec("INTITULE")
IDPERE = myRec("IDPERE")
End If
End With
'On ferme l'enregistrement
myRec.Close
'creation du chemin avec la page en cours
'Chr(34) correspond à l'insertion d'un double quote, nécessaire pour la création des répertoires sous UNIX afin de gérer les espaces dans les noms
CheminEnCours = Chr(34) & CODE & "-" & INTITULE & Chr(34) & "/"
'creation du chemin complet grace a un appel recursif
CheminComplet = getGenealogie(IDPERE) & CheminEnCours
Else
' return de fonction
getGenealogie = CheminComplet
End If
'On retourne la valeur du chemin
getGenealogie = UCase(CheminComplet)
End Function