ListBox - remonter et afficher le HAUT de la liste

Résolu
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021
- 1 déc. 2014 à 09:43
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 2 déc. 2014 à 11:12
Bonjour,

Je souhaite faire une ListBox :
1/ qui lance une macro à chaque fois qu'une valeur de la ListBox est sélectionnée.
2/ puis qui se repositionne tout en haut de la sélection.

J'ai bien réussi à faire ma macro, en mettant à la fin du programme :
ListIndex = 0

Ce qui fonctionne bien. La ListBox.Value = indique bien la 1ère valeur tout en haut de la liste.

Mon "problème" est juste visuel. La sélection - en bleu - reste affichée sur la précédente valeur, au lieu de se mettre - elle aussi - en sélection de la 1ère valeur de la liste ...

Donc, comment faire pour que, visuellement, la sélection en bleu affiche la 1ère valeur ?

Merci de m'aider ....

Cordialement

19 réponses

cs_Le Pivert
Messages postés
7784
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 juin 2022
129
1 déc. 2014 à 10:32
Bonjour,

une petite recherche sur Google (10 secondes) et voilà


http://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-G
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 1/12/2014 à 10:36
Bonjour,
Joue donc avec la propriété topindex

regarde par exemple ce que fait ceci et adapte :
ListBox1.TopIndex = 2
ListBox1.Selected(ListBox1.TopIndex) = True


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021

1 déc. 2014 à 10:36
Merci beaucoup pour votre réponse.

En fait, je connais déjà ce site (qui est très bien). Seulement la réponse de mon problème visuel ne s'y trouve pas...

C'est juste la sélection visuelle (en bleue) qui ne va pas aller s'afficher en haut de la liste (alors que la valeur selectionnée est bien la 1ère valeur, grace à ListIndex = 0 dans le code)....
0
cs_Le Pivert
Messages postés
7784
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 juin 2022
129
1 déc. 2014 à 11:06
Je suis étonné que cela ne s'affiche pas en bleu.
en suivant les explications fournis par le site que je t'ai indiqué cela fonctionne très bien.
Essaie ceci:

Option Explicit
Private Sub CommandButton1_Click()
ListBox1.ListIndex = 0
End Sub
Private Sub UserForm_Initialize()
  Dim i As Byte
    
    For i = 1 To 15
        ListBox1.AddItem "Ligne" & i
    Next i

End Sub

0

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

Posez votre question
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021

1 déc. 2014 à 14:38
rebonjour,

Je n'ai pas bien compris la réponse :

1/ J'ai fait en fin de code :

ListBox1.ListIndex = 0

2/ Ok, mais hélas je reste afficher sur la précédente sélection, alors que la value est bien celle de la sélection en 0.

3/ Par contre je ne vois pas ce que vient faire le Private Sub Userform
Dim i as byte, etc.... ?

est-ce à ajouter ? Quel rôle joue-til ? car j'ai déjà ma liste de sélection.
0
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021

1 déc. 2014 à 14:43
dit autrement

J'aimerai qu'à la fin de ma macro, la sélection se repositionne automatiquement en HAUT de la liste, et que visuellement cela soit le cas aussi.

J'avais cru comprendre que
ListBox1.ListIndex = 0
en fin de code suffirait ...
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
1 déc. 2014 à 15:09
Listbox1.listindex = 0
Listbox1.selected(0) = True
0
cs_Le Pivert
Messages postés
7784
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 juin 2022
129
1 déc. 2014 à 15:13
Je t'ai mis un exemple a mettre dans un classeur vierge pour confirmer que cela fonctionnait. Cela n'a rien a voir avec ton projet.

Tes macros sont avec le code de ton userForm?
Si elles sont dans un module différent il faut mettre:

UserForm1.ListBox1.ListIndex = 0

dans ce cas là

Sinon je ne vois pas pourquoi cela ne fonctionnerait pas

0
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021

1 déc. 2014 à 15:26
Ok merci, je vais regarder cela demain.
Encore merci pour ton aide !
0
cs_Le Pivert
Messages postés
7784
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 juin 2022
129
1 déc. 2014 à 18:23
Effectivement ,j'ai fait un essai avec une macro et l'item reste sélectionné malgré toutes les solutions qui ont été données.

J'ai trouvé la solution mettre ceci à la fin de ta macro:

With ListBox1
 .MultiSelect = fmMultiSelectSingle
 .MultiSelect = fmMultiSelectMulti
 End With
ListBox1.ListIndex = 0

0
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021

1 déc. 2014 à 23:42
1/ En fait ce code revient à modifier directement les "Propriétés" , en modifiant le MultiSelect en mode "Multi".
J'ai donc rajouté ce code, mais ... cela ne marche pas. La macro se fige ...

2/ J'ai (re)vérifié ma macro : en rajoutant en fin de code
ListBox1.ListIndex = 0
C'est très bien. Cela modifie les Propriétés, et la ListBox.Value est bien la 1ère valeur de la ListBox.
Visiblement la sélection reste, elle, inchangée, et bloquée à la sélection précédente.
Après avoir fait ma macro, j'ai ensuite cliquer avec la souris sur la 1ère sélection.
Cette fois la sélection se met bien en 1ère sélection, mais sans déclencher la macro.

3/ Alors comment faire la maco comme si "un clic" se faisait en 1ère sélection ?
Cela revient à cela ....
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 2/12/2014 à 07:41
Le problème résulte du fait que l'utilisation de la propriété selected déclenche ipso facto l'évènement click, ce qui "trouble" alors le choix fait (celui de l'article à mettre en haut et à sélectionner !)
On pourrait penser à l'utilisation de l'évènement Change, mais peine perdue, puisque l'évènement click (déclenché spontanément) déclenchera l'évènement Change aussi !
Le seule solution que j'entrevois dans ce cas serait assez acrobatique et consisterait à utiliser une ou deux variables booléennes dont l'état ferait que seul le premier click serait pris en compte et non le suivant (celui déclenché par le "selected").
Je me demande si le jeu en vaut la chandelle !

PS : ou alors : en deux temps. un pour sélectionner au click de la listbox et un pour "placer", au click d'un bouton de commande distinct.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021

2 déc. 2014 à 08:47
Ok mrrci pour l'info, donc tout n'est pas lié à mon manque de savoir VBA... ou presque !

Comment pourrai-je faire en VBA la 2e solution, du "PS", avec les 2 clicks ? ....
0
cs_Le Pivert
Messages postés
7784
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 juin 2022
129
2 déc. 2014 à 09:43
Je lis:

1/ qui lance une macro à chaque fois qu'une valeur de la ListBox est sélectionnée.
2/ puis qui se repositionne tout en haut de la sélection.


3/ Alors comment faire la maco comme si "un clic" se faisait en 1ère sélection ?

Si tu as une macro qui se déclenche en 1ère sélection . Le plus simple c'est d'appeler cette macro à la suite de l'autre




@+ Le Pivert
0
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021

2 déc. 2014 à 10:16
Bonjour,

1/ Je me suis peut-être mal exprimer : ma macro déclenche la sélection que l'on choisit (par click), et cette sélection peut être bien sûr n'importe laquelle dans la liste.
Le but c'est qu'ensuite, la ListBox se repositionne en haut de la sélection. Elle ne le fait pas... vusuellement, malgré
ListBox1.ListIndex = 0
qui est en fin de code.

2/ Il faudrait donc faire en sorte que la macro fasse ensuite un" click" sur la 1ère sélection, pour qu'elle se repositionne visuellement sur la 1ère sélection ...
C'est là tout le problème.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 2/12/2014 à 10:20
La seconde méthode ?
Ainsi, par exemple :


Private toto As Integer

Private Sub CommandButton2_Click()
ListBox1.ListIndex = -1
ListBox1.TopIndex = toto
DoEvents
ListBox1.Selected(ListBox1.TopIndex) = True
End Sub


Private Sub ListBox1_Click()
toto = ListBox1.ListIndex
DoEvents
End Sub

Attention, toutefois :
Perte des "pédales" possible lorsque la listbox n'affiche que les tout derniers articles
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
cs_Le Pivert
Messages postés
7784
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 juin 2022
129
2 déc. 2014 à 10:20
Essaie comme te l'a conseillé ucfoutu (que je salue), avec un bouton et ce code:

ListBox1.ListIndex = -1'désélectionne 
ListBox1.ListIndex = 0 'selection

0
Bruno_65
Messages postés
50
Date d'inscription
jeudi 10 avril 2014
Statut
Membre
Dernière intervention
27 juillet 2021

2 déc. 2014 à 11:06
et bien .... Ucfoutu : .... BRAVO !!!

ça marche ! ça marche !!

Grand merci à toi et... à Toto dans le code !!
sans oublier bien sûr Le_Pivert (que je salue) !

Je suis juste étonné que personne ne se soucie de faire remonter la sélection de la ListBox en haut, après chaque usage ? .... soupir...

En tout cas MERCI, et très bonne journée !

Cordialement
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 2/12/2014 à 11:20
C'est en fait beaucoup mieux ainsi, avec ajout d'une booléenne
De cette manière : marche toujours sans faille, sauf lorsque le dernier article est affiché en résultat du positionnement (garde alors la sélection, mais ne la positionne pas en haut dans ce cas).
 Private toto As Integer, titi As Boolean

Private Sub CommandButton2_Click()
ListBox1.ListIndex = -1
ListBox1.TopIndex = toto
DoEvents
ListBox1.Selected(ListBox1.TopIndex) = True
titi = False
End Sub


Private Sub ListBox1_Click()
If titi Then Exit Sub
toto = ListBox1.ListIndex
DoEvents
titi = True
End Sub

PS : et il est normal que si l'article sélectionné se trouve parmi les derniers affichables, on ne puisse le mettre en tête de liste affichée.
(puisqu'il n'y a pas d'autre articles plus bas).
On ne pourrait y parvenir qu'en ajoutant de faux articles vides (mais je vois alors mal quel en serait l'intérêt réel).
_______
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend</signature>
0