Modifier l'ordre des lignes dans une listbox

Résolu
Signaler
Messages postés
48
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
11 juin 2007
-
Messages postés
48
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
11 juin 2007
-
Bonjour à tous
J'ai encore besion de votre aide (qui jusque là m'a été trés précieuse).

J'ai une listbox dans la laquelle je voudrais pouvoir changer l'ordre des messages.
J'arrive à deplacer une ligne avec ce code:
Private Sub Comman_Click()
i = List2.ListIndex
chaine = List2.Text
j = List2.ListIndex - 1       '- pour monter, + pour descendre'
List2.RemoveItem (i)
Call List2.AddItem(chaine, j)
List2.Refresh
List2.Selected(j) = True
End Sub
Ce que j'aimerais c'est pouvoir monter/descendre plusieurs lignes d'un coup.
Si je selectionne plusieurs lignes et que je monte/descend avec ce code, y'en à qu'une qui monte/descend

Si qu'un a une idée sur le code à taper je le remerci par avance
anto37_44

4 réponses

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
Considérant que tes boutons Up et Down sont dans un groupe de controles
0=> UP
1 => DOWN

CcBtnMove(0)  => Bouton Monter
CcBtnMove(1)  => Bouton Descendre
CcLst  => La fameuse ListBox

tu peux faire :

Private Sub CcBtnMove_Click(Index As Integer)
Dim sBuffer As String
Dim i As Long
Dim nStart As Long
Dim nStop As Long
Dim nStep As Long

   If Index Then
       nStart = CcLst.ListCount - 1
       nStep = -1
   Else
       nStop = CcLst.ListCount - 1
       nStep = 1
   End If

   For i = nStart To nStop Step nStep
       If CcLst.Selected(i) Then
           sBuffer = CcLst.List(i)
           CcLst.RemoveItem i
           If Index And i < CcLst.ListCount Then
               If Not CcLst.Selected(i) Then
                   i = i + 1
               End If
           ElseIf Index = 0 And i > 0 Then
               If Not CcLst.Selected(i - 1) Then
                   i = i - 1
               End If
           End If
           CcLst.AddItem sBuffer, i
           CcLst.Selected(i) = True
       End If
   Next i
End Sub , ----
By Renfield

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
48
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
11 juin 2007
1
Merci beaucoup Renfield
çà marche super bien
anto37_44
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
Je venais tout jsute de coder cette fonction pour mno soft, au boulot...

les coïncidences....

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
48
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
11 juin 2007
1
Bonne coïncidence pour moi parce que moi aussi c'est pour le boulot mais moi je n'y arrivais pas.

anto37_44