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

Juliaz Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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éé
A voir également:

7 réponses

Juliaz Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
super! peux-tu marquer le sujet comme résolu?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
Cà semble fonctionner quand je mets deux fois le code.

Merci
-1
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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