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 :

Optimisation d'une cascade de listes déroulantes [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut Optimisation d'une cascade de listes déroulantes
    Bonjour,

    Voila j'aurais besoin d'un peu d'aide pour optimiser un système de filtre basé sur plusieurs listes déroulantes qui se mettent à jour en cascade les unes en fonctions des autres (enfin c'est ce que j'ai essayé de faire...).

    J'ai assez de mal à faire ça vu mon niveau plus que moyen.

    Voici donc ce que j'ai essayé de faire : j'ai 5 listes déroulantes, filtreCbo1, filtreCbo2, filtreCbo3, filtreCbo4 et filtreCbo5 qui me servent dans un formulaire de recherche multicritères pour affiner mes recherches.

    Après la mise à jour de chaque liste, le Rowsource des autres est modifié pour prendre en compte le choix actuel. Un double clic réinitialise la liste, et celles qui en dépendent.

    J'ai des comportements bizarres selon que la cascade de choix ne se fait pas comme prévu normalement, dans l'ordre ou dans le désordre, si par exemple je passe directement de la liste 1 à la liste 4 par exemple, ou si les listes sont plusieurs fois modifiées dans un sens ou dans l'autre.

    Je crois savoir qu'on peut libérer la mémoire à la fin de la procédure, est-ce que ça pourrait être une solution ? Si oui comment le faire ?

    Voici ce qu'est mon code actuel pour la première de ces listes, la filtreCbo1.

    après MAJ :

    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
    Private Sub filtreCbo1_AfterUpdate()
     
        If Not IsNull(Me.filtreCbo2) Then: Me.filtreCbo2 = Null
        If Not IsNull(Me.filtreCbo3) Then: Me.filtreCbo3 = Null
        If Not IsNull(Me.filtreCbo4) Then: Me.filtreCbo4 = Null
        If Not IsNull(Me.filtreCbo5) Then: Me.filtreCbo5 = Null
     
        Me.filtreCbo2.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _
        & "FROM T_APE " _
        & "WHERE (((Len([Code_APE]))=2) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));"
     
        Me.filtreCbo3.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _
        & "FROM T_APE " _
        & "WHERE (((Len([Code_APE]))=3) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));"
     
        Me.filtreCbo4.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _
        & "FROM T_APE " _
        & "WHERE (((Len([Code_APE]))=4) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));"
     
        Me.filtreCbo5.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _
        & "FROM T_APE " _
        & "WHERE (((Len([Code_APE]))=5) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));"
     
        Me.Requery
     
    End Sub
    au double clic :

    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
    Private Sub filtreCbo1_DblClick(Cancel As Integer)
     
        If Not IsNull(Me.filtreCbo1) Then
     
        Me.filtreCbo1 = Null
        Me.filtreCbo2 = Null
        Me.filtreCbo3 = Null
        Me.filtreCbo4 = Null
        Me.filtreCbo5 = Null
     
        Me.filtreCbo2.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca FROM T_APE WHERE (((Len([Code_APE]))=2));"
        Me.filtreCbo3.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca FROM T_APE WHERE (((Len([Code_APE]))=3));"
        Me.filtreCbo4.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca FROM T_APE WHERE (((Len([Code_APE]))=4));"
        Me.filtreCbo5.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca FROM T_APE WHERE (((Len([Code_APE]))=5));"
     
        Me.Requery
     
        End If
     
    End Sub
    Je suis bien sur preneur de tout conseil ou correction si besoin est.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Regarde la bdd de cette discussion http://www.developpez.net/forums/d14...s/#post8108885

    Dans le formulaire « Encoder des rapports », intéresse-toi au filtre Entrepôt qui va de pair avec Equipe et Adresse.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Bonjour rag83.

    Sans avoir analysé plus en profondeur tes codes, une chose me surprend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Me.filtreCbo2.RowSource = "SELECT T_APE.Code_APE, T_APE.activite, [code_APE] & ' - ' & [activite] AS ca " _
        & "FROM T_APE " _
        & "WHERE (((Len([Code_APE]))=2) AND ((T_APE.section)=[Formulaires]![F_RechercheCommerces]![filtreCbo1]));"
    Dans tes diverses chaines définissant la source de tes listes, tu utilises pour désigner tles listes dans ton formulaire le mot [Formulaires]. Je n'ai pas Access 2013, mais 2010, et jusque 2010 en tout cas, VBA ne comprenait pas le terme Formulaires pour désigner la collection des formulaires, mais bien Forms. J'ai un peu cherché dans les références de Microsoft VBA 2013, et je ne pense pas que cela ait changé. Je pense donc que tu devrais remplacer tes =[Formulaires]! par = Forms!

    Cordialement.
    RL
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour RobiPMS,

    À mon avis, ça n'a pas d'importance : ce qu'il écrit c'est le SQL de la requête de la propriété « Contenu » de la zone de liste => forme francisée OK.

    Si tu le mets à la sauce anglaise, c'est aussi OK.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Bonjour Claude.

    Effectivement, cela n'a pas d'importance dans ce cas (je viens d'essayer...). On apprend chaque jour! Merci Claude.

    R.L.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Claude et Robi.

    Je regarde la base dont tu parles Claude et je te donne un retour. Ce qui m'interpelle au premier abord, c'est que si la première liste (entrepôt) n'est pas remplie, les autres sont vides.
    Dans mon cas je voudrais que chaque liste soit remplie avec toutes les sélections possibles, même si celles en amont ne sont pas remplies.
    En fait je ne veux pas imposer à l'utilisateur le remplissage de toutes les listes pour avoir son filtre, s'il connait déjà le filtre final qu'il veut, j'aimerais qu'il puisse le saisir directement dans la liste 5 sans avoir à passer par les autres.

    Et en effet Robi, ça fonctionne très bien même avec [Formulaires], mais merci pour la mise en garde sur la syntaxe fr et us !

    A + tard

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Dans mon cas je voudrais que chaque liste soit remplie avec toutes les sélections possibles, même si celles en amont ne sont pas remplies.
    OK, compris.



    Soyons concrets, dans la bdd jointe, place les tables qui constituent tes listes de choix.
    Crée les relations entre elles (avec intégrité référentielle).
    Et reposte en donnant le nom des zones de liste (« FiltreUnTel », je suppose).
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Claude,

    Voila j'ai rempli la base avec les informations nécessaires.

    J'ai mis les deux tables qui m'intéressent, T_Commerces et T_APE. J'ai pu créer cette dernière grâce à l'aide qu'on m'a fournie ici (merci à marot_r et Robert1957) :

    http://www.developpez.net/forums/d14...-excel-access/

    J'ai depuis modifié la table obtenue car je n'arrivais pas à filtrer sur la section.

    Dans le formulaire F_RechercheCommerces, il y a les 5 listes déroulantes dont je parle, filtreCbo1, filtreCbo2, etc. Je me suis inspiré de tes explications sur les formulaires de recherche multicritères pour faire ça, en essayant d'adapter ça à ce que je voudrais faire, à savoir une indépendance des listes les unes avec les autres si un maillon de la chaine manque comme je l'explique ci-dessus.

    Je voudrais qu'a tout moment, chaque liste soit utilisable, soit avec les informations relatives à sa catégorie propre de manière générique si les listes du dessus sont vides, soit en se mettant à jour en fonction de la valeur contenue dans la première qui n'est pas vide au-dessus.

    J'ai du mal à évaluer tous les cas de figure possibles pour que le tout reste cohérent, ce que j'ai fait me semble être une usine à gaz et je me pose toujours la question de savoir quel impact ça pourrait avoir sur la bande passante du réseau.

    Comme les listes contiennent toutes les données possibles, je te conseille de choisir la section I qui est la plus remplie pour avoir des tests un peu plus représentatifs. Les données des tables sont factices.

    Merci
    Fichiers attachés Fichiers attachés

  9. #9
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Je crois que tu vas trouver la réponse dans ce tuto : Recherche Multicritères

    Le formulaire F_FiltreSansCode reprend la même problématique

    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Jeannot, je connais ce tuto car il y a quelques temps quand j'ai voulu me lancer dans la recherche multicritères j'ai parcouru tous ceux que j'ai pu trouver, dont celui-la.

    J'ai hésité entre celui dont tu parles et celui de Claude Leloup ici http://claudeleloup.developpez.com/t...-multicritere/ pour diverses raisons, et au final j'ai préféré celui de Claude mais ils sont très bien tous les deux.

    Dans ton lien, la recherche se fait plusieurs tables et je ne sais pas si tu as regardé la base que j'ai postée un peu plus haut mais la différence c'est que je n'ai qu'une seule table.
    Du coup est-ce que je vais pouvoir appliquer ça dans mon cas ?

    A+

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour vous deux... et les autres s'il en est,

    Voici un exemple de solution




    On commence à choisir à partir de n’importe quel étage.
    On progresse dans les choix des listes de haut vers le bas.
    Par contre, ça n’a pas de sens de choisir à un étage pour ensuite choisir à un étage supérieur.
    J’ai créé une requête pour déterminer les choix encore possibles :




    La propriété « Contenu » des zones de liste :




    Et le code pour rafraîchir les listes :

    Voir billet N° 13.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Claude, je te remercie, je viens de regarder ce que tu as fait et le moins qu'on puisse dire c'est que le code a subi une sacré cure d'amaigrissement, c'est vraiment très bien !

    Malheureusement il y a de petits soucis, je n'ai plus accès à l'équivalent de la fonction "RaZ" de ton tuto qui vide le contrôle au double clic sur le filtre.

    J'ai besoin de cette fonctionnalité car cette base n'est qu'un exemple, mais ces critères seront combinés à une dizaine d'autres et je n'aime pas trop l'idée de devoir réinitialiser la totalité des critères pour vider ces listes, ou encore d'avoir plusieurs boutons pour le faire. Le problème étant qu'en cas de remise à Null d'une liste, il faut que sa requête soit actualisée pour que l'arborescence tienne compte du contenu de celle immédiatement en amont.

    Autre point similaire, si par exemple la liste 2 est remplie puis qu'on passe directement à la 5, la 3 et la 4 ne sont plus utilisables. Est-ce qu'on pourrait faire en sorte qu'elles le soient en tenant compte de la première liste trouvée remplie en amont ?

    On en revient au méli-mélo de ma base exemple qui reflète le type de fonctionnement que j'aimerais avoir, y a t-il de moyen de reproduire cela en conservant cette légèreté dans le code comme tu l'as fait ?

    Merci encore pour ton aide

  13. #13
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    je n'ai plus accès à l'équivalent de la fonction "RaZ" de ton tuto qui vide le contrôle
    Qu’à cela ne tienne, je l’ai ajouté.

    Le code devient :

    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
    60
    61
    62
    63
    64
    Option Compare Database
    Option Explicit
     
    Private Sub MaJ()
      Dim ctl As Control
      'Réactualiser les listes
      For Each ctl In Me.Controls
        If ctl.Name Like "Filtre*" Then
           ctl.RowSource = ctl.RowSource
        End If
      Next ctl
    End Sub
     
    Private Sub RaZ()
      Me.ActiveControl = Null
      'Réactualiser les listes
      Call MaJ
    End Sub
     
    Private Sub BtTous_Click()
      Dim ctl As Control
      For Each ctl In Me.Controls
        If ctl.Name Like "Filtre*" Then ctl = Null: Call FiltreSection_AfterUpdate
      Next ctl
    End Sub
     
    Private Sub FiltreSection_DblClick(Cancel As Integer)
      Call RaZ
    End Sub
     
    Private Sub Filtre2_DblClick(Cancel As Integer)
      Call RaZ
    End Sub
     
    Private Sub Filtre3_DblClick(Cancel As Integer)
      Call RaZ
    End Sub
     
    Private Sub Filtre4_DblClick(Cancel As Integer)
      Call RaZ
    End Sub
     
    Private Sub Filtre5_DblClick(Cancel As Integer)
      Call RaZ
    End Sub
     
    Private Sub FiltreSection_AfterUpdate()
      Call MaJ
    End Sub
    Private Sub Filtre2_AfterUpdate()
      Call MaJ
    End Sub
     
    Private Sub Filtre3_AfterUpdate()
      Call MaJ
    End Sub
     
    Private Sub Filtre4_AfterUpdate()
      Call MaJ
    End Sub
     
    Private Sub Filtre5_AfterUpdate()
      Call MaJ
    End Sub
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Bonjour Claude, je suis une fois de plus admiratif devant la légèreté de ton code

    Malheureusement je perds toujours une grande partie de la souplesse que j'avais dans la base exemple au point que je me demande s'il est vraiment possible de combiner souplesse et légèreté.
    Tu peux voir dans ma base exemple que si la liste 1 est remplie puis qu'on passe directement à la 5, les listes 2,3, et 4 restent utilisables pour reprendre le cours de la recherche. La ce n'est plus le cas

    Problème similaire quand je RaZ une liste, elle devient inutilisable. Il faudrait qu'au RaZ on reparte sur l'arborescence en fonction de la première trouvée remplie au-dessus, et que celles du dessous se vident et reprennent aussi le cours de l'arborescence.

    Pardon de te faire tourner en bourrique, peut-être ce que je demande pose trop de conditions, si tu penses que ce n'est pas faisable je pourrai comprendre

    Merci

  15. #15
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Malheureusement je perds toujours une grande partie de la souplesse que j'avais dans la base exemple
    Tu peux voir dans ma base exemple que si la liste 1 est remplie puis qu'on passe directement à la 5, les listes 2,3, et 4 restent utilisables pour reprendre le cours de la recherche. La ce n'est plus le cas
    Le contexte est particulier : dans tes filtres 2 à 5 tu agis sur une série de nombres dont tu prends de plus en plus de positions de gauche en considération.
    Si dans la collection de nombres tu as choisi de garder d’emblée ceux dont les 4 premiers chiffres correspondent à « 3456 », ça n’a plus de sens d’essayer d’encore restreindre la sélection en choisissant seulement 3 chiffres, le choix est par la force des choses limité à « 345 ».

    Si après, avoir choisi 4 chiffres, tu te ravises et que tu veux plutôt recommencer avec 3 chiffres, tu dois d’abord annuler ton choix de 4 chiffres et ta liste à 3 chiffres t’offrira tous les choix qui restent possibles en tenant compte des choix (éventuellement) opérés dans la liste des Sections et des 2 premiers chiffres.

    En d’autres mots, pour tes filtres un choix à un niveau n’a de sens que si aucun choix n’a déjà été opéré dans une liste en dessous.
    Donc pour faire un choix à un niveau, il faut qu’aucun choix n’ait été fixé à des étages en dessous.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Je comprends ce que tu veux dire Claude, cela dit il ne s'agit pas forcément de restreindre mais de reconstruire l'arborescence directement à partir d'une liste intermédiaire.
    La différence entre mon exemple et le tien c'est que je peux choisir directement au dessus, avec le tien il faut Raz d’abord.
    Je choisis bien entendu ta solution vu que le volume de code est 10 fois moindre et pas buggé

    Un point sans doute améliorable, si je remplis toutes mes listes, et que je veux repartir par exemple de la 3, je la RaZ mais elle n'est pas utilisable tant que je n'ai pas vidé une à une les listes du dessous.
    Peut-on aussi réinitialiser d'un seul coup toutes les listes en aval du RaZ ?

    Merci

  17. #17
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Un point sans doute améliorable, si je remplis toutes mes listes, et que je veux repartir par exemple de la 3, je la RaZ mais elle n'est pas utilisable tant que je n'ai pas vidé une à une les listes du dessous.
    Peut-on aussi réinitialiser d'un seul coup toutes les listes en aval au RaZ ?
    OK. Ça, ça a du sens !

    Par exemple, on pourrait loger dans le nom du filtre (à la fin par exemple) un N° d’ordre : 01, 02… et programmer sur double-clic :
    - la remise à blanc du filtre cliqué et de tous ses successeurs ;
    - la réactualisation des listes en fonction des choix (éventuels) encore déterminés dans les prédécesseurs ;
    - le déploiement de la liste cliquée.
    OK ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  18. #18
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Oui ça serait très bien tout ça !

  19. #19
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    YAKA !

    - modifier les noms des filtres FiltreSection => FiltreSection01 ; Filtre2=>Filtre02
    - et RaZ devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub RaZ()
    Dim ctl As Control
    Dim sNiveau As String
      'RAZ du bas de l'arborescence
      sNiveau = Right(Me.ActiveControl.Name, 2)
      For Each ctl In Me.Controls
        If ctl.Name Like "Filtre*" Then
            If Right(ctl.Name, 2) >= sNiveau Then ctl = Null
        End If
      Next ctl
      'Réactualiser les listes
      Call MaJ
    End Sub
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  20. #20
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Non mais c'est qu'on friserait la perfection la !
    J'ai regardé rapidement car au boulot, mais je décortique le tout un peu plus tard à la recherche de la faille
    Plus sérieusement, merci Claude, je te donne un retour plus tard

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/06/2020, 12h44
  2. Réponses: 6
    Dernier message: 31/03/2006, 11h04
  3. Réponses: 8
    Dernier message: 24/02/2006, 09h59
  4. Réponses: 1
    Dernier message: 19/01/2006, 17h54
  5. Réponses: 4
    Dernier message: 29/10/2005, 18h03

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