Sélection des élèments d'une zone de liste

Fermé
Juliaz Messages postés 18 Date d'inscription mardi 28 mars 2017 Statut Membre Dernière intervention 28 mai 2017 - 26 mai 2017 à 10:57
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 28 mai 2017 à 13:57
Bonjour,

J'ai un souci avec une sélection des éléments d'une zone de liste.

J'ai en effet une liste déroulante liée à une zone de liste.
La zone de liste est filtrée suivant le choix d'un élément dans la liste déroulante.
Cette partie marche très bien.
J'ai mis un bouton qui me permet de sélectionner tous les éléments de la zone de liste à chaque fois qu'il sont filtrés.
Le code utilisé est ci-dessous . Il marche dans certains cas et pas dans d'autres.

Private Sub Commande362_Click()
Dim i As Long
For i = 0 To Me.CSEtab.ListCount - 1
    Me.CSEtab.Selected(i) = True
Next i
End Sub



1) le cas où le code marche:
Lorsque le choix d'un élément de la liste déroulante donne dans la zone de liste des éléments avec toujours plus de lignes la sélection marche très bien :
Je peux l'illustrer par ces deux captures d'écran:
Pour ce cas , la sélection marche très bien pour tous les choix.



par contre , la sélection ne marche pas lorsqu'on n'a moins de lignes: dans la capture suivante , elle ne marche que pour le choix 3 mais pas pour les choix 1 et 2 car moins de lignes que la toute première (choix3 ) Sélectionné.



Merci de m'éclairer!!
Bonne journéé

7 réponses

Juliaz Messages postés 18 Date d'inscription mardi 28 mars 2017 Statut Membre Dernière intervention 28 mai 2017
28 mai 2017 à 08:36
Merci yg_be, la désélection avant le requery était la solution.
Tout marche très bien!!
Merci encore d'avoir pris de ton temps pour résoudre mon problème.
Bonne journée !!
1
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 mai 2017 à 13:57
super! peux-tu marquer le sujet comme résolu?
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
26 mai 2017 à 13:21
bonjour,
CSEtab est bien le nom de ta zone de liste?
pourrais-tu expliquer comment cela se comporte quand cela ne fonctionne pas?
si je comprends bien, cela fonctionne jusqu'au moment où tu réduis le nombre d'éléments dans la zone de liste, c'est bien cela?
je me demande comment tu fais le filtrage de ta zone de liste.
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 27 mai 2017 à 11:57
je pense avoir le même problème. quand je réduis le nombre d'éléments dans la listbox via un requery, je dois cliquer deux fois sur le bouton qui refait le select: il ne se passe rien la première fois.
cela semble bien se comporter si je fais deux fois la boucle select.
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 27 mai 2017 à 12:08
probablement un bug dans Access. deux façons de le contourner, dans mon cas:
1) désélectionner tous les éléments de la zone de liste avant de changer le filtrage.
2) exécuter deux fois la boucle select
0
Juliaz Messages postés 18 Date d'inscription mardi 28 mars 2017 Statut Membre Dernière intervention 28 mai 2017
27 mai 2017 à 10:23
Bonjour yg_be,
CSEtab est bien le nom de ma zone de liste.

pourrais-tu expliquer comment cela se comporte quand cela ne fonctionne pas?


je remarque que c'est le premier choix effectué dans la liste déroulante qui détermine la sélection des éléments de la zone de liste.
Le premier choix opéré dans la liste déroulante marche toujours quelque soit le nombre d'éléments de la zone de liste.
C'est à partir du deuxième choix que j'ai un problème:Lorsque ce deuxième choix donne dans la zone de liste plus d'éléments que le premier choix , la sélection marche toujours.Par contre si ce deuxième donne moins d'éléments dans la zone de liste que le premier , rien n'est sélection dans ma zone de liste.

je me demande comment tu fais le filtrage de ta zone de liste.
J'ai une table tab1 avec deux champs: un champ A qui correspond avec les éléments de la liste déroulante et un autre B avec les éléments de la zone de liste.
Un élément A peut avoir plusieurs éléments B comme suit:
champ A champ B
a papa
a maman
b coucou
b lola
c pipo
J'ai alors construit une requête sélection avec tab1 où j'affiche les deux champs (champ A et champ B) de la table et je mets en critère du champ A [Formulaires]![nom formulaire]![champA liste déroulante] l'élèment sélection dans la liste déroulante.Celà permet ainsi par un [champB].Requery sur la liste déroulante d'avoir la zone de liste renseignée: c'est le principe des listes liées.

Merci encore pour ta contribution
-1
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 27 mai 2017 à 11:29
Deux suggestions (au hasard, pas possible d'être plus précis sans ton fichier):
1) désélectionner tous les éléments de la zone de liste avant de changer le filtrage.
2) visualiser (debug.print ou msgbox) la valeur de Me.CSEtab.ListCount quand tu exécutes Commande362_Click
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Juliaz Messages postés 18 Date d'inscription mardi 28 mars 2017 Statut Membre Dernière intervention 28 mai 2017
27 mai 2017 à 15:04
Merci yg_be,
C'est exactement ce que j'ai, je dois cliquer deux fois sur le bouton pour qu'il refasse la sélection.
Pour exécuter deux fois la boucle select, il suffit juste de mettre le code deux fois ?
Merci encore
-1
Juliaz Messages postés 18 Date d'inscription mardi 28 mars 2017 Statut Membre Dernière intervention 28 mai 2017
27 mai 2017 à 15:17
Cà semble fonctionner quand je mets deux fois le code.

Merci
-1
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
27 mai 2017 à 15:44
je pense que c'est plus prudent de faire une boucle "deselect" avant le requery.
Dim i As Long
For i = 0 To Me.CSEtab.ListCount - 1
    Me.CSEtab.Selected(i) = False
Next i

Pour éviter de perturber Access en supprimant de la liste des éléments sélectionnés, et provoquer d'autres anomalies..
0
Juliaz Messages postés 18 Date d'inscription mardi 28 mars 2017 Statut Membre Dernière intervention 28 mai 2017
27 mai 2017 à 15:56
J'ai fait plusieurs tests mais c'es bizarre:
cela ne fonctionne pas toujours.
Je peux avoir votre exemple si possible.
Je suis désolée , je ne peux partager le mien car ce sont des données confidentielles .

Merci
-1
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
27 mai 2017 à 16:16
j'ai fait un exemple tout simple, avec une liste basée sur une table.
j'ai un bouton qui fait un simple requery.
un bouton qui fait la sélection.
Private Sub Command4_Click()
Dim i As Long
For i = 0 To Me.List2.ListCount - 1
    Me.List2.Selected(i) = True
Next i
End Sub

un bouton qui fait la déselection.
Private Sub Command6_Click()
Dim i As Long
For i = 0 To Me.List2.ListCount - 1
    Me.List2.Selected(i) = False
Next i
End Sub

quand j'ajoute des éléments dans la table, la sélection fonctionne bien après le requery.
quand il y a moins d'éléments dans ma table que dans la liste, la sélection ne fonctionne pas du premier coup après le requery.
mais en faisant d'abord la déselection, ou en faisant une double boucle dans la sélection, cela marche dans mon cas simple.
Private Sub Command4_Click()
Dim i As Long
For i = 0 To Me.List2.ListCount - 1
    Me.List2.Selected(i) = True
Next i
For i = 0 To Me.List2.ListCount - 1
    Me.List2.Selected(i) = True
Next i
End Sub

as-tu essayé de faire la déselection avant le requery?
0