Modifier l'ordre des lignes dans une listbox

Résolu
anto37_44 Messages postés 48 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 11 juin 2007 - 6 juin 2007 à 11:16
anto37_44 Messages postés 48 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 11 juin 2007 - 6 juin 2007 à 12:05
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
6 juin 2007 à 11:39
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
3
anto37_44 Messages postés 48 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 11 juin 2007 1
6 juin 2007 à 11:52
Merci beaucoup Renfield
çà marche super bien
anto37_44
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
6 juin 2007 à 12:01
Je venais tout jsute de coder cette fonction pour mno soft, au boulot...

les coïncidences....

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

anto37_44
0
Rejoignez-nous