OVH Cloud OVH Cloud

remonter des elements dans une listbox ?

7 réponses
Avatar
niko
Bonjour a tous !
J'aimerai remonter, grace a un bouton, un element=20
selectionner dans ma listbox et que celle ci prenne la=20
place de celui juste au dessus .. Comment je peux faire ?

Merci =E0 vous !
Niko

7 réponses

Avatar
Denis Michon
Bonjour Niko,


Voici un copier-coller que je te faisais hier à ta première question

Tu cherches autre chose ?


Suppose que tu as un contrôle ListBox dans un formulaire.

Si ta question est : Comment en sélectionnant un item dans la liste, réussir à modifier son rang de 1 vers le haut en
cliquant sur un bouton, regarde ce qui suit :

Initialisation du contenu du contrôle ListBox
'--------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant
With Worksheets("Feuil2")
Tblo = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Me.ListBox1.List = Tblo

End Sub
'--------------------------------

Bouton de commande qui permet de déplacer vers le haut un item du contrôle ListBox
Le principe est le même pour déplacer un item vers le bas .
'------------------------------
Private Sub CommandButton1_Click()

Dim Temp As String

With Me.ListBox1
If .Selected(.ListIndex) = True Then
If .ListIndex = 0 Then
Temp = .List(.ListCount - 1)
.List(.ListCount - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListCount - 1) = True
Else
Temp = .List(.ListIndex - 1)
.List(.ListIndex - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListIndex - 1) = True
End If
End If
End With

End Sub
'------------------------------


Salutations!




"niko" a écrit dans le message de news:0bb301c3aaad$df93b7d0$
Bonjour a tous !
J'aimerai remonter, grace a un bouton, un element
selectionner dans ma listbox et que celle ci prenne la
place de celui juste au dessus .. Comment je peux faire ?

Merci à vous !
Niko
Avatar
Hervé
Salut Niko,

Private Sub CommandButton1_Click()
Dim Tempo
With Me.ListBox1
If .ListIndex = 0 Then Exit Sub
Tempo = .List(.ListIndex - 1)
.List(.ListIndex - 1) = .List(.ListIndex)
.List(.ListIndex) = Tempo
.ListIndex = .ListIndex - 1
End With
End Sub

Hervé.

"niko" a écrit dans le message news:
0bb301c3aaad$df93b7d0$
Bonjour a tous !
J'aimerai remonter, grace a un bouton, un element
selectionner dans ma listbox et que celle ci prenne la
place de celui juste au dessus .. Comment je peux faire ?

Merci à vous !
Niko
Avatar
Michel Gaboly
Bonjour,

Passer par un serveur de news, en l'occurrence
news.microsoft.com pour accéder au forum.

En effet, tu as déjà eu des réponses de Denus Michon
en particulier, et apparement tu ne les as pas vues.

Voici une variante, écrite au printemps pour un client :

Sur un UserForm :

1 ListBox, LChampsChoisis
2 CommandButton, BHaut et BBas

BHaut permet de faire ce que tu demandes, BBas l'inverse.


Private Sub UserForm_Initialize()
LChampsChoisis.List = Sheets(1).Range("A1:A5").Value
BHaut.Enabled = False
BBas.Enabled = False
End Sub

Private Sub BBas_Click()
Dim Suiv As String
With LChampsChoisis
Suiv = .List(.ListIndex + 1)
.List(.ListIndex + 1) = .List(.ListIndex)
.List(.ListIndex) = Suiv
' Resélection de l'élément déplacé
.ListIndex = .ListIndex + 1
End With
End Sub

Private Sub BHaut_Click()
Dim Prec As String
With LChampsChoisis
Prec = .List(.ListIndex - 1)
.List(.ListIndex - 1) = .List(.ListIndex)
.List(.ListIndex) = Prec
' Resélection de l'élément déplacé
.ListIndex = .ListIndex - 1
End With
End Sub

Private Sub LChampsChoisis_Change()
With LChampsChoisis
If .ListCount = 0 Or .ListIndex = -1 Then
BHaut.Enabled = False
BBas.Enabled = False
ElseIf .ListIndex = 0 Then
BHaut.Enabled = False
BBas.Enabled = True
ElseIf .ListIndex = .ListCount - 1 Then
BBas.Enabled = False
BHaut.Enabled = True
Else
BHaut.Enabled = True
BBas.Enabled = True
End If
End With
End Sub


Selon la ligne sélectionnée, le bouton permettant un
déplacement vers le haut peut être grisé (si première
ligne). Idem avec le second bouton, si dernière ligne.

NB1 - Les 2 boutons sont grisés à l'ouverture (Enabled
= False), ce qui peut être fait avec la fenêtre Propriétés
ou dans le UserForm_Initialize comme ici.

NB2 - La première instruction du UserForm_Initialize
remplit la liste. C'est volontairement que je n'utilise pas
RowSource, car cette propriété n'est pas dispo pour les
versions Mac d'Excel. L'instruction que j'utilise a pour
avantage de fonctionner sur Mac et sur PC.



Bonjour a tous !
J'aimerai remonter, grace a un bouton, un element
selectionner dans ma listbox et que celle ci prenne la
place de celui juste au dessus .. Comment je peux faire ?

Merci à vous !
Niko


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Denis Michon
Ceci faisait aussi parti de ma réponse d'hier


Dans la procédure, il manque une petite ligne au cas où l'usager appuie sur le bouton et qu'aucun item n'a été
sélectionné.

With Me.ListBox1
If .ListIndex = -1 Then Exit Sub
'.../...


end with



Voici un copier-coller que je te faisais hier à ta première question

Tu cherches autre chose ?


Suppose que tu as un contrôle ListBox dans un formulaire.

Si ta question est : Comment en sélectionnant un item dans la liste, réussir à modifier son rang de 1 vers le haut en
cliquant sur un bouton, regarde ce qui suit :

Initialisation du contenu du contrôle ListBox
'--------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant
With Worksheets("Feuil2")
Tblo = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Me.ListBox1.List = Tblo

End Sub
'--------------------------------

Bouton de commande qui permet de déplacer vers le haut un item du contrôle ListBox
Le principe est le même pour déplacer un item vers le bas .
'------------------------------
Private Sub CommandButton1_Click()

Dim Temp As String

With Me.ListBox1
If .Selected(.ListIndex) = True Then
If .ListIndex = 0 Then
Temp = .List(.ListCount - 1)
.List(.ListCount - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListCount - 1) = True
Else
Temp = .List(.ListIndex - 1)
.List(.ListIndex - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListIndex - 1) = True
End If
End If
End With

End Sub
'------------------------------


Salutations!




"niko" a écrit dans le message de news:0bb301c3aaad$df93b7d0$
Bonjour a tous !
J'aimerai remonter, grace a un bouton, un element
selectionner dans ma listbox et que celle ci prenne la
place de celui juste au dessus .. Comment je peux faire ?

Merci à vous !
Niko
Avatar
Michel Gaboly
Salut Denis,

Je propose une autre approche : griser le bouton si aucun item n'est sélectionné ou s'il s'agit du premier de la liste.

Je gère cela avec l'événement Change du ListBox. J'ai donné un exemple dans un message posté à 15h 26, heure de Paris



Ceci faisait aussi parti de ma réponse d'hier

Dans la procédure, il manque une petite ligne au cas où l'usager appuie sur le bouton et qu'aucun item n'a été
sélectionné.

With Me.ListBox1
If .ListIndex = -1 Then Exit Sub
'.../...

end with

Voici un copier-coller que je te faisais hier à ta première question

Tu cherches autre chose ?

Suppose que tu as un contrôle ListBox dans un formulaire.

Si ta question est : Comment en sélectionnant un item dans la liste, réussir à modifier son rang de 1 vers le haut en
cliquant sur un bouton, regarde ce qui suit :

Initialisation du contenu du contrôle ListBox
'--------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant
With Worksheets("Feuil2")
Tblo = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Me.ListBox1.List = Tblo

End Sub
'--------------------------------

Bouton de commande qui permet de déplacer vers le haut un item du contrôle ListBox
Le principe est le même pour déplacer un item vers le bas .
'------------------------------
Private Sub CommandButton1_Click()

Dim Temp As String

With Me.ListBox1
If .Selected(.ListIndex) = True Then
If .ListIndex = 0 Then
Temp = .List(.ListCount - 1)
.List(.ListCount - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListCount - 1) = True
Else
Temp = .List(.ListIndex - 1)
.List(.ListIndex - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListIndex - 1) = True
End If
End If
End With

End Sub
'------------------------------

Salutations!

"niko" a écrit dans le message de news:0bb301c3aaad$df93b7d0$
Bonjour a tous !
J'aimerai remonter, grace a un bouton, un element
selectionner dans ma listbox et que celle ci prenne la
place de celui juste au dessus .. Comment je peux faire ?

Merci à vous !
Niko


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Denis Michon
Bonjour Michel,

Le bouton grisé est une bonne suggestion...sauf que c'est un peu plus long à écrire ... ;-)

Pour le premier item de la listbox, pourquoi ne pas permettre qu'il recule en dernière place si c'est là le besoin de
l'usager ? Est-ce un privilège du type : Permier un jour ... premier toujours ... ? ;-) ça aussi demande quelques
lignes de code de plus !! ;-)


Bonne journée,


Salutations!




"Michel Gaboly" a écrit dans le message de news:
Salut Denis,

Je propose une autre approche : griser le bouton si aucun item n'est sélectionné ou s'il s'agit du premier de la liste.

Je gère cela avec l'événement Change du ListBox. J'ai donné un exemple dans un message posté à 15h 26, heure de Paris



Ceci faisait aussi parti de ma réponse d'hier

Dans la procédure, il manque une petite ligne au cas où l'usager appuie sur le bouton et qu'aucun item n'a été
sélectionné.

With Me.ListBox1
If .ListIndex = -1 Then Exit Sub
'.../...

end with

Voici un copier-coller que je te faisais hier à ta première question

Tu cherches autre chose ?

Suppose que tu as un contrôle ListBox dans un formulaire.

Si ta question est : Comment en sélectionnant un item dans la liste, réussir à modifier son rang de 1 vers le haut en
cliquant sur un bouton, regarde ce qui suit :

Initialisation du contenu du contrôle ListBox
'--------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant
With Worksheets("Feuil2")
Tblo = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Me.ListBox1.List = Tblo

End Sub
'--------------------------------

Bouton de commande qui permet de déplacer vers le haut un item du contrôle ListBox
Le principe est le même pour déplacer un item vers le bas .
'------------------------------
Private Sub CommandButton1_Click()

Dim Temp As String

With Me.ListBox1
If .Selected(.ListIndex) = True Then
If .ListIndex = 0 Then
Temp = .List(.ListCount - 1)
.List(.ListCount - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListCount - 1) = True
Else
Temp = .List(.ListIndex - 1)
.List(.ListIndex - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListIndex - 1) = True
End If
End If
End With

End Sub
'------------------------------

Salutations!

"niko" a écrit dans le message de news:0bb301c3aaad$df93b7d0$
Bonjour a tous !
J'aimerai remonter, grace a un bouton, un element
selectionner dans ma listbox et que celle ci prenne la
place de celui juste au dessus .. Comment je peux faire ?

Merci à vous !
Niko


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Michel Gaboly
Re Denis,

Pas bien long ;-)))

Voici le code associé à l'événement Change, qui gère 2 boutons (BHaut pour monter, BBas pour descendre) :

Private Sub LChampsChoisis_Change()
With LChampsChoisis
If .ListCount = 0 Or .ListIndex = -1 Then
BHaut.Enabled = False
BBas.Enabled = False
ElseIf .ListIndex = 0 Then
BHaut.Enabled = False
BBas.Enabled = True
ElseIf .ListIndex = .ListCount - 1 Then
BBas.Enabled = False
BHaut.Enabled = True
Else
BHaut.Enabled = True
BBas.Enabled = True
End If
End With
End Sub

NB - A l'ouverture du dialogue, les 2 boutons sont grisés.

Faire que le premier élément de la liste devienne le dernier, pourquoi pas ?



Bonjour Michel,

Le bouton grisé est une bonne suggestion...sauf que c'est un peu plus long à écrire ... ;-)

Pour le premier item de la listbox, pourquoi ne pas permettre qu'il recule en dernière place si c'est là le besoin de
l'usager ? Est-ce un privilège du type : Permier un jour ... premier toujours ... ? ;-) ça aussi demande quelques
lignes de code de plus !! ;-)

Bonne journée,

Salutations!

"Michel Gaboly" a écrit dans le message de news:
Salut Denis,

Je propose une autre approche : griser le bouton si aucun item n'est sélectionné ou s'il s'agit du premier de la liste.

Je gère cela avec l'événement Change du ListBox. J'ai donné un exemple dans un message posté à 15h 26, heure de Paris


Ceci faisait aussi parti de ma réponse d'hier

Dans la procédure, il manque une petite ligne au cas où l'usager appuie sur le bouton et qu'aucun item n'a été
sélectionné.

With Me.ListBox1
If .ListIndex = -1 Then Exit Sub
'.../...

end with

Voici un copier-coller que je te faisais hier à ta première question

Tu cherches autre chose ?

Suppose que tu as un contrôle ListBox dans un formulaire.

Si ta question est : Comment en sélectionnant un item dans la liste, réussir à modifier son rang de 1 vers le haut en
cliquant sur un bouton, regarde ce qui suit :

Initialisation du contenu du contrôle ListBox
'--------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant
With Worksheets("Feuil2")
Tblo = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Me.ListBox1.List = Tblo

End Sub
'--------------------------------

Bouton de commande qui permet de déplacer vers le haut un item du contrôle ListBox
Le principe est le même pour déplacer un item vers le bas .
'------------------------------
Private Sub CommandButton1_Click()

Dim Temp As String

With Me.ListBox1
If .Selected(.ListIndex) = True Then
If .ListIndex = 0 Then
Temp = .List(.ListCount - 1)
.List(.ListCount - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListCount - 1) = True
Else
Temp = .List(.ListIndex - 1)
.List(.ListIndex - 1) = .List(.ListIndex)
.List(.ListIndex) = Temp
.Selected(.ListIndex - 1) = True
End If
End If
End With

End Sub
'------------------------------

Salutations!

"niko" a écrit dans le message de news:0bb301c3aaad$df93b7d0$
Bonjour a tous !
J'aimerai remonter, grace a un bouton, un element
selectionner dans ma listbox et que celle ci prenne la
place de celui juste au dessus .. Comment je peux faire ?

Merci à vous !
Niko


--
Cordialement,

Michel Gaboly
http://www.gaboly.com


--
Cordialement,

Michel Gaboly
http://www.gaboly.com