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 :

ListBox choix multiples mit a jour


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 28
    Par défaut ListBox choix multiples mit a jour
    Bonjour,

    Je suis entrain de travailler sur un formulaire Access avec plusieurs ListBox a choix multiples qui dépendent les une des autres pour mettre a jour leur liste de valeur . Et ensuite selon les critères sélectionnés j'effectue une requête dans mes tables.

    Avant de passer au choix multiples j'étais sur des liste déroulantes et cela fonctionnerai parfaitement mais pour une seule sélection par liste .

    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
     
    If Nz(liste_d_artcicle, "") = "" Then condi_article = "1=1" Else condi_article = nom_article & " LIKE '" & val_article & "'"
    If Nz(liste_d_local, "") = "" Then
    condi_loc_ddm = "1=1"
    condi_loc_nmc = "1=1"
    Else
    condi_loc_ddm = nom_local_ddm & " LIKE '" & val_local & "'"
    condi_loc_nmc = nom_local_nmc & " LIKE '" & val_local & "'"
    End If
     
    If Nz(liste_big, "") = "" Then
    condi_big_ddm = "1=1"
    condi_big_nmc = "1=1"
     
    SQL_big_nmc = " SELECT DISTINCT " & nom_table_nmc & "." & nom_big_nmc & " FROM " & nom_table_ddm & " INNER JOIN " & nom_table_nmc & " ON " & nom_table_ddm & "." & nom_ri_ddm & "=" & nom_table_nmc & "." & nom_ri_nmc & " WHERE " & condi_cmx_nmc & " AND " & condi_loc_nmc & " AND " & condi_code_nmc
    SQL_code_nmc = " SELECT DISTINCT " & nom_table_nmc & "." & nom_code_nmc & " FROM " & nom_table_ddm & " INNER JOIN " & nom_table_nmc & " ON " & nom_table_ddm & "." & nom_ri_ddm & "=" & nom_table_nmc & "." & nom_ri_nmc & " WHERE " & condi_cmx_nmc & " AND " & condi_loc_nmc & " AND " & condi_big_nmc
    J'avais des choses qui ressemblaient a ça, donc après chaque MAJ d'une liste déroulante, je récupérerai les valeurs des autres listes pour les mettre en tant que condition . Donc cela fonctionnait très bien je pouvais donc appliqué une séléction par liste sans soucis.

    J'ai ensuite eu la nécessité de vouloir sélectionné plusieurs item d'une même liste dans chacune d'elle et c'est la que je ne sais comment résoudre le problème.

    Je suis donc passer a ce type de code la :

    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
     
     
    If Me.liste_d_techno2.ItemsSelected.Count <> 0 Then
    For Each itm In Me.liste_d_techno2.ItemsSelected ' parcourt les items
        LstVal_techno = LstVal_techno & IIf(LstVal_techno = "", "(", " OR ") & nom_techno & " LIKE '*" & Me.liste_d_techno2.ItemData(itm) & "*'"   ' insère chaque id dans la variable
    Next
        LstVal_techno = LstVal_techno & ")"
    Else
    LstVal_techno = "1=1"
    End If
     
    If Me.liste_d_big2.ItemsSelected.Count <> 0 Then
    For Each itm In Me.liste_d_big2.ItemsSelected ' parcourt les items
        LstVal_big = LstVal_big & IIf(LstVal_big = "", "(", " OR ") & nom_big_tuyaux & " LIKE '*" & Me.liste_d_big2.ItemData(itm) & "*'"   ' insère chaque id dans la variable
    Next
        LstVal_big = LstVal_big & ")"
    Else
    LstVal_big = "1=1"
    End If
     
    SQL_local = "SELECT DISTINCT " & nom_table_tuyaux & "." & nom_local_tuyaux & " FROM " & nom_table_tuyaux & " INNER JOIN " & nom_table_nmc & " ON " & nom_table_tuyaux & "." & nom_ri_tuyaux & "=" & nom_table_nmc & "." & nom_ri_nmc & " WHERE " & LstVal_big & " AND " & LstVal_diametre & " AND " & LstVal_techno
    Cela me permet donc de pouvoir sélectionné plusieurs item d'une même liste et donc d'afficher dans les autres listes l'ensemble des valeurs avec la somme de toutes les conditions MAIS cela ne fonctionne que sur une seule liste a la fois et c'est la tout le problème . Si je souhaite avoir des filtres sur plusieurs ça ne fonctionne pas car a l’exécution les ancien item sélectionné de la liste ne le sont plus et donc n'interviennent plus dans les conditions.

    Pour être plus clair voici en image sur une sélection de deux liste le soucis que je rencontre .
    Aucune séléction
    Nom : sans_selection.PNG
Affichages : 128
Taille : 5,4 Ko
    Séléction multiples de la liste 1 qui met bien a jour la liste deux avec les items sélectionnés
    Nom : double_selection.PNG
Affichages : 123
Taille : 5,3 Ko
    Et la choix d'un item dans la liste 2 juste après le choix de la liste 1, la liste 1 est bien mise a jour mais impossible d'avoir en même temps ma séléction sur mes deux listes.
    Nom : tentative_selection_liste_2.PNG
Affichages : 124
Taille : 4,0 Ko

    J'ai par la suite tenté de chercher a résoudre le soucis a chaque MAJ d'une liste je souhaiterai récupérer l'ensemble des items sélectionnés, stocker leur valeur dans un tableau, puis une fois les autres listes misent a jour vérifié si les items sélectionnés y sont présent, si tel est le cas les sélectionner.

    Voila, je suis désole de la grosseur du message, je ne sais même pas si le soucis est bien visible mais je remercie chaque personne qui pourra y consacrer un peu de temps, si certaines choses ne sont pas claires, je peux donner plus de détails .
    Peut être qu'il existe une solution plus simple pour effectuer des
    Choix multiples interdépendant entre eux
    Maxcou

  2. #2
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    bonjour,
    pour garder en mémoire les sélection précédentes, il faut envisager de déclarer toutes tes variables LstVal_xxxx en public, c'est à dire au niveau le plus haut de ton formulaire, juste après les Options Explicit et/ou Compare et avant la première procédure événementielle du formulaire. Il faudra prévoir, dans ce cas, l'initialisation des variables à l'aide d'un bouton.

    J'ai par la suite tenté de chercher a résoudre le soucis a chaque MAJ d'une liste je souhaiterai récupérer l'ensemble des items sélectionnés, stocker leur valeur dans un tableau, puis une fois les autres listes misent a jour vérifié si les items sélectionnés y sont présent, si tel est le cas les sélectionner.
    et qu'est-ce que cela a donné ? cela fonctionne mal, pas du tout ... ? le tableau est-il déclaré en public comme expliqué plus haut ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 28
    Par défaut
    Variable en public global au niveau de la sécurité c'est pas top non ? j'avais cru lire cela sur certain forum.

    Du coups, lorsque l'on change le rowSource d'une listBox on perd la sélection c'est ce qui est gênant dans mon problème je pense.

    La solution expliqué dans mon post précédent est celle ci (code placé dans l'evenement après MAJ de mon control "liste_d_local2":

    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
    'recupere les condition sur local pour mettre a jour la liste bigramme
    If Me.liste_d_local2.ItemsSelected.Count <> 0 Then
    For Each itm In Me.liste_d_local2.ItemsSelected ' parcourt les items
        LstVal_loc = LstVal_loc & IIf(LstVal_loc = "", "(", " OR ") & nom_local_ddm & " LIKE '*" & Me.liste_d_local2.ItemData(itm) & "*'"   ' insère chaque id dans la variable
    Next
        LstVal_loc = LstVal_loc & ")"
    Else
    LstVal_loc = "1=1"
    End If
     
    'ajoute les valeurs selectionne de la liste bigramme dans un tableau
    Dim tmp() As Variant
    ReDim tmp(0)
    j = 0
    For i = 0 To liste_d_big2.ListCount - 1
         If liste_d_big2.Selected(i) = True Then
         ReDim Preserve tmp(UBound(tmp) + 1)
              tmp(j) = liste_d_big2.ItemData(i)
              j = j + 1
         End If
    Next
     
    'mise a jour de la liste bigramme
    SQL_big = " SELECT DISTINCT " & nom_big_ddm & " FROM " & nom_table_ddm & " WHERE " & nom_article & " LIKE '*201*'" & " AND " & LstVal_loc
    liste_d_big2.RowSource = SQL_big
     
    'une fois la liste mise a jour, selectionne a nouveau les bigramme dans la liste si ils étaient présent
    For i = 0 To liste_d_big2.ListCount - 1
            For j = 0 To UBound(tmp) - 1
             If liste_d_big2.ItemData(i) = tmp(j) Then
              Me.liste_d_big2.Selected(i) = True
         End If
         Next
    Next
    A première vu, ça fonctionne grossièrement a part un cas que j'ai pu apercevoir et que je vais mentionne par la suite. Mais je n'ai que deux listes dans ce cas, j'ai bien peur que avec 4 listes a mettre a jour cela fassent d'avantage de soucis.

    Cas ou ça ne fonctionne pas comme je le voudrai :

    Sans aucune séléction
    Nom : sans_selection.PNG
Affichages : 104
Taille : 5,8 Ko
    Sélection de deux items dans ma liste 1 , liste 2 mise a jour correctement
    Nom : selection liste_1.PNG
Affichages : 103
Taille : 4,5 Ko
    Sélection un item liste2 , qui met parfaitement a jour la liste 1 selon sa sélection(liste de choix correcte + garde la sélection qui correspond : AC) MAIS ne se met pas a jour elle même avec le contenue sélectionné liste 1
    Nom : selection_2.PNG
Affichages : 102
Taille : 4,1 Ko

    Sélection qui devrait être correcte (seulement un local: B410 correspond a AC)
    Nom : affichage correct.PNG
Affichages : 100
Taille : 4,1 Ko

    En voyant cela j'ai tenté de mettre a jour la liste 2 en faisant le même schema que mes variables LstVal , j'arrive a la mettre a jour avec la bonne valeur mais elle n'est plus sélectionnée et c'est le serpent qui se mord la queue ..
    Et je pense que le problème vient du fait que lorsque je "force" la sélection par le code VBA de ma liste 1 et bien son événement APRES MAJ n'est pas déclenché(alors qu'il devrait je pense ) et donc ma liste 2 ne se met donc pas a jour ..

    Maxcou

  4. #4
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    Variable en public global au niveau de la sécurité c'est pas top non ? j'avais cru lire cela sur certain forum.
    crois ce que tu veux ... cela existe, je m'en suis toujours servi même en mode multi-utilisateurs et je ne pense pas qu'une variable publique créée sur un PC soit accessible ou visible depuis un autre: on partage les tables mais pas les objets systèmes créés par chaque Front-End.
    Mais tu peux aussi passer par une table locale plutôt qu'un tableau public ...
    Pour le reste, les cas présentés semblent assez pointus pour trouver une solution rien qu'en lisant le code, il faudrait une base "bac à sable" à disposition pour bien étudier les cas

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2023
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2023
    Messages : 28
    Par défaut
    Merci pour l'indication des variables publiques, je viens un peu bêtement de tester d'appeler ma procédure liste_d_big2_AfterUpdate a la suite du code que j'ai fourni précédemment et il semblerait que cela fonctionne maintenant.

    Chose donc étrange sur laquelle je m'interroge pourquoi lors de l’exécution, quand j'effectue ma ligne 31 du post précédent, le compilateur ne comprend pas que ma liste est mise a jour(item sélectionné) et ne déclenche t-il pas automatiquement la procédure après MAJ ?

  6. #6
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    ce n'est pas parce que tu mets à jour une propriété que cela déclenche un évènement de mise à jour du contrôle ... Pour rappel l'évènement de mise à jour est déclenché par une saisie ou suppression de données

Discussions similaires

  1. [Débutant] Parcourir une listbox à choix multiples
    Par Devlin111 dans le forum C#
    Réponses: 2
    Dernier message: 21/03/2012, 11h01
  2. [Débutant] [C#] Récuperer dans une liste les valeurs d'une listbox à choix multiples
    Par Devlin111 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 21/03/2012, 09h35
  3. Réponses: 3
    Dernier message: 16/01/2009, 12h31
  4. Récupérer valeurs listbox choix multiple
    Par biquet52 dans le forum IHM
    Réponses: 3
    Dernier message: 11/09/2008, 09h07
  5. ListBox à Choix multiple
    Par [ced] dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 01/08/2008, 22h14

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