Bon meme si pcpunch a posté un solution, je donne la mienne, surtout parce que j'ai pas compris le probleme de la même manière :
' 2 variables globales à ne pas oublier sinon ca marche pas
Dim monIndex As Integer
Dim a As String
Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
monIndex = Fix(ListBox1.TopIndex + Y / 12)
a = ListBox1.List(monIndex)
End Sub
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ListBox1.RemoveItem (monIndex)
monIndex = Fix(ListBox1.TopIndex + Y / 12)
if monindex<0 then monindex=0
temp = ListBox1.ListCount - 1
ListBox1.AddItem (a)
For i = monIndex To temp
ListBox1.AddItem (ListBox1.List(i))
Next
For i = monIndex To temp
ListBox1.RemoveItem (monIndex)
Next
End Sub
C'est moins propre et plus consommateur de ressource mais ca fait un vrai drag&drop ;)
L'autre différence, c'est qu'au lieu d'echanger 2 éléments, ca met l'élément sélectionner avant l'élément sur lequel on le fait glisser.
monIndex = Fix(ListBox1.TopIndex + Y / 12)
le 12 determine la hauteur du texte en pixel (au jugé ;) mais il vaudrait mieux utiliser les API qui vont bien pour le faire suf que je ne me souviens plus de leur nom -> your turn
voila