ListBox - remonter et afficher le HAUT de la liste [Résolu]

Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 1 déc. 2014 à 09:43 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

19 réponses

cs_Le Pivert 5458 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 1 déc. 2014 à 10:32
0
Merci
Bonjour,

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


http://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-G
Commenter la réponse de cs_Le Pivert
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 1/12/2014 à 10:36
0
Merci
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
Commenter la réponse de ucfoutu
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 1 déc. 2014 à 10:36
0
Merci
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)....
Commenter la réponse de Bruno_65
cs_Le Pivert 5458 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 1 déc. 2014 à 11:06
0
Merci
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

Commenter la réponse de cs_Le Pivert
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 1 déc. 2014 à 14:38
0
Merci
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.
Commenter la réponse de Bruno_65
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 1 déc. 2014 à 14:43
0
Merci
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 ...
Commenter la réponse de Bruno_65
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 1 déc. 2014 à 15:09
0
Merci
Listbox1.listindex = 0
Listbox1.selected(0) = True
Commenter la réponse de cs_MPi
cs_Le Pivert 5458 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 1 déc. 2014 à 15:13
0
Merci
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

Commenter la réponse de cs_Le Pivert
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 1 déc. 2014 à 15:26
0
Merci
Ok merci, je vais regarder cela demain.
Encore merci pour ton aide !
Commenter la réponse de Bruno_65
cs_Le Pivert 5458 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 1 déc. 2014 à 18:23
0
Merci
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

Commenter la réponse de cs_Le Pivert
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 1 déc. 2014 à 23:42
0
Merci
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 ....
Commenter la réponse de Bruno_65
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 2/12/2014 à 07:41
0
Merci
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
Commenter la réponse de ucfoutu
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 2 déc. 2014 à 08:47
0
Merci
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 ? ....
Commenter la réponse de Bruno_65
cs_Le Pivert 5458 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 2 déc. 2014 à 09:43
0
Merci
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
Commenter la réponse de cs_Le Pivert
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 2 déc. 2014 à 10:16
0
Merci
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.
Commenter la réponse de Bruno_65
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 2/12/2014 à 10:20
0
Merci
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
Commenter la réponse de ucfoutu
cs_Le Pivert 5458 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 22 octobre 2018 Dernière intervention - 2 déc. 2014 à 10:20
0
Merci
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

Commenter la réponse de cs_Le Pivert
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 2 déc. 2014 à 11:06
0
Merci
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
Commenter la réponse de Bruno_65
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 2/12/2014 à 11:20
0
Merci
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>
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.