IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Affichage de valeur récursive dans une zone de liste déroulante


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club Avatar de leadri
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 56
    Points : 27
    Points
    27
    Par défaut Affichage de valeur récursive dans une zone de liste déroulante
    Bonjour à tous et merci de l'intérêt que vous porterez à ma requête...

    J'essaie désepérément d'afficher des valeur récursive dans une liste déroulante mais je n'y arrive pas

    J'ai un formulaire avec un control nommé [L_Fam_1] qui doit afficher la liste des familles de produits avec arborescence.

    MLD :
    categorie(#categorie_id, etc...)
    categorie_xref(#categorie_parent_id, #category_child_id)

    Voici ma fonction récursive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Function CategoryList(MyParent As Long) As Variant
    Dim MyCount As Integer
    Dim sql, MyName As String
    Dim rs As Recordset
    Dim MyId As Long
    sql = "SELECT loc_vm_category.category_id, loc_vm_category.category_name " _
    & "FROM loc_vm_category INNER JOIN loc_vm_category_xref " _
    & "ON loc_vm_category.category_id=loc_vm_category_xref.category_child_id " _
    & "WHERE (((loc_vm_category_xref.category_parent_id)= " & MyParent & ")) " _
    & "ORDER BY loc_vm_category.list_order; "
     
    Set rs = CurrentDb.OpenRecordset(sql)
     
    MyCount = rs.RecordCount
     
    rs.MoveFirst
    If MyCount > 0 Then
        Do While rs.EOF
                MyId = rs("category_id")
                MyName = rs("category_name")
                CategoryList = Array(MyId, MyName)
                rs.MoveNext
        Loop
        rs.Close
        Set rs = Nothing
    Else
        CategoryList (MyId)
    End If
    Return
    End Function
    Comment faire pour afficher le résultat dans ma zone de liste ?

    Je vous met un exemple de ce que je veux avoir en image.

    Merci beaucoup pour votre aide
    PS : J'utilise Access 2007
    Images attachées Images attachées  

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Récursivité
    Bonjour,

    C'est juste 2 propositions, mais on est certain d'aboutir.

    Sol 1
    Avec ListBox, on positionne originesource = liste de valeurs, le résultat dans un tableau à 2 dimensions
    puis remplir le listbox ligne par ligne

    Sol2
    Un bouton d'appel à un formulaire avec un treeview qui retourne la valeur de la branche sélectionnée.

    a+

  3. #3
    Nouveau membre du Club Avatar de leadri
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Hello, merci pour ta réponse, peux tu développer ta réponse sur la solution 1, car j'y ai passé la matinée et la seule solution que j'ai trouvé c'est une mise à jour de ma listbox après sélection d'un item mais c'est pas ce que je veux faire

    Merci beaucoup

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je serais toi j'utiliserais la solution 2 de naphta, c'est le TreeView la seule solution dans ton cas.

    Tu trouveras des posts qui en parle.

    Starec

  5. #5
    Nouveau membre du Club Avatar de leadri
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Starec Voir le message
    Bonjour

    Je serais toi j'utiliserais la solution 2 de naphta, c'est le TreeView la seule solution dans ton cas.

    Tu trouveras des posts qui en parle.

    Starec
    Merci, je vais m'y pencher car je n'ai pas le niveau suffisant en developpement pour le faire illico.

    Si y'a d'autres propositions n'hésitez pas à me le faire savoir...

  6. #6
    Nouveau membre du Club Avatar de leadri
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Hello,

    J'ai réussi à mettre en place mon Treeview, mais j'ai un soucis, je n'arrive pas à récupérer la valeur de mon index.

    Je n'ai pas de propriété événement "Sur Clic", juste :

    -> Sur Maj
    -> Sur Entree
    -> Sur Sortie
    -> Sur Réception Focus
    -> Sur Perte Focus

    J'ai essayé ce petit code sur chaque événement de mon treeview mais ça marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim currentNode As MSComctlLib.Node 'parcours du node courrant
    Dim MyFam As Long
    'Pour chaque node contenu dans la collection nodes de ton objet treeview
    For Each currentNode In MyTView.Nodes
        'Traitement du node courrant. Exemple compter les nodes cochés
        If currentNode.Checked Then
            MyFam = currentNode.Key
            MsgBox MyFam
        End If
    Next
    Les Références Activées sont :
    MS DAO 3.6 Object Library
    OLE Automation
    MS ActiveX Data Object 2.1 Library
    Microsoft Common Control 6.0 (SP6)

    Merci pour votre aide

  7. #7
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Le TRiViou
    Bonjour,

    A ta place je ne met pas de vase à cocher, tu voulais juste "un parmi N", donc un clique.


    l'évènement pour le treeview c'est cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub treeview1_NodeClick(ByVal Node As Object)
    tu captures la valeur :
    Node.Key
    Faut appeler le formulaire avec le treeview en mode dialog et qu'il te retourne la valeur sélectionnée. Là je ne sais pas si tu sais le faire ?
    a+

  8. #8
    Nouveau membre du Club Avatar de leadri
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    bah non, en vérité j'ai jamais manipulé d'objet activex, c'est la première fois
    et le soucis c'est que je sais pas comment définir la procédure NodeClick dans les propriété de mon treeview car j'ai rien qui ressemble à une truc style "Sur Clic ou Sur Doucle clic comme sur les contrôles

    Siouplé, aidez_moi !!!!

  9. #9
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Ok
    Bonjour leadri,

    Je vais t'envoyer un zip avec du code faut juste me laisser le temps de te le préparer.

    1 On a besoin d'une valeur sélectionnée dans un formulaire appelé en mode "dialog"
    2 de remplir un treeview et d'avoir le résultat de la valeur sélectionné dans le treeview.

    a+

  10. #10
    Nouveau membre du Club Avatar de leadri
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    c'est vraiment très gentil à toi naphta, merci bcp pour ton aide.
    j'attend ton zip,
    en attendant, j'y retourne

  11. #11
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Bonjour,

    Je n'ai pas de propriété événement "Sur Clic", juste :

    -> Sur Maj
    -> Sur Entree
    -> Sur Sortie
    -> Sur Réception Focus
    -> Sur Perte Focus
    Si, tu as toutes ces propriétés. Alt + F11 pour aller dans l'éditeur, tu sélectionnes le module du formulaire dans lequel tu as ton Treewiev.

    En haut, dans la zone de liste ou il y'a "Général", tu fais défiler et tu sélectionnes ton Treewiev, puis sur la droite tu déroules la zone de liste.

    Tu fais un double clic sur l'événement que tu veux et ça génère la Sub correspondante.

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  12. #12
    Nouveau membre du Club Avatar de leadri
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 56
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Domi2 Voir le message
    Bonjour,



    Si, tu as toutes ces propriétés. Alt + F11 pour aller dans l'éditeur, tu sélectionnes le module du formulaire dans lequel tu as ton Treewiev.

    En haut, dans la zone de liste ou il y'a "Général", tu fais défiler et tu sélectionnes ton Treewiev, puis sur la droite tu déroules la zone de liste.

    Tu fais un double clic sur l'événement que tu veux et ça génère la Sub correspondante.

    Domi2
    Punaise, c'est qu'il a raison en plus !
    Pourquoi j'y ai pas pensé plus tôt ???
    Merci beaucoup !!! (hum; hum, j'ai encore bcp de progrès à faire en vb.... )
    Bon je viendrai mettre mon petit bout de code quand j'aurais terminé

  13. #13
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Le code
    Bonjour,
    Voici le code qui permet l'appel d"un formulaire quelconque en mode dialog et de récupérer la valeur.
    Il faut après cela le formulaire doit avoir un contrôle caché qui passe la donnée, dans ton cas un formulaire avec treeview.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    'Structure de l'appel : Me.lenomducontrol c'est le controle qui récupère la  'donnée sélectionnée 
    'nomdeformulaire est le formulaire de choix utilisateur
     
    cherche Me.lenomducontrol, "nomdeformulaire"
     
    Public Sub cherche(ctl As control, dekoi As String)
     
    Dim passele As Variant
    On Error GoTo CapteErr
     
        passele = ctl
        ctl = prendle(passele, dekoi)
     
    Sortie:
        Exit Sub
    CapteErr:
      Select Case err.Number
        Case Else
          MsgBox "Erreur " & err.Number & ": " & err.Description, vbCritical, "Attention"
    End Select
    Resume Sortie
     
    End Sub
     
    '----------------------------------------
     
    Public Function prendle(var As Variant, leformu As String) As Variant
     
    Dim varTemp As Variant
     
    On Error GoTo CapteErr
     
        varTemp = IIf(IsMissing(var), "0", var)
     
        DoCmd.OpenForm FormName:=leformu, WindowMode:=acDialog, OpenArgs:=varTemp
        If IsLoaded(leformu) Then
            prendle = Forms(leformu).laliste
            DoCmd.Close acForm, leformu
        Else
            If Not IsNull(varTemp) Then
                prendle = varTemp
                Else
                prendle = Null
            End If
        End If
     
     
    Sortie:
        Exit Function
    CapteErr:
      Select Case err.Number
        Case Else
         MsgBox "Erreur " & err.Number & ": " & err.Description, vbCritical, "Attention" 
     End Select
    Resume Sortie
     
    End Function
    Si des personnes lisent ce code et trouvent quelques améliorations je prends.

    Merci

  14. #14
    Nouveau membre du Club Avatar de leadri
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 56
    Points : 27
    Points
    27
    Par défaut Merci à tous
    Merci à tous pour votre aide, grâce à vous j'ai appris à mettre en place un treeview et le résultat est plus que satisfaisant en ce qui me concerne
    Images attachées Images attachées  

  15. #15
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Très beau
    Bonsoir,

    Bravo super form très élégant me plait moi !!

    Bon apparemment le Treeview est dans le form bon faut tenir compte de mode appel.

    Allez l'OM
    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/10/2010, 09h40
  2. [AC-2007] Savoir si une valeur est dans une zone de liste
    Par vincent1746 dans le forum IHM
    Réponses: 2
    Dernier message: 16/07/2010, 16h07
  3. Réponses: 13
    Dernier message: 26/11/2009, 16h28
  4. Affichage des valeurs disponibles dans une zone de liste déroulante
    Par azerty dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/06/2007, 12h29
  5. Réponses: 13
    Dernier message: 29/03/2006, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo