XL 2010 [VBA] RemoveItem d'une Listbox qui bloque

F22Raptor

XLDnaute Impliqué
Hello
Je teste le transfert d'items d'une ListBox à une autre.
Pas de problème pour écrire dans celle de droite, mais ça bugge quand je veux retirer l'item cliqué dans celle de gauche ! (note : j'ai bien rempli la ListBox de gauche avec .List et non .RowSource).

En fait, ça bugge quand je fais un .RemoveItem(Me.LBsource.ListIndex) ou .RemoveItem(MaVariableIndex)
Mais par contre, un .RemoveItem(2) fonctionne !

Une idée ?
 

Pièces jointes

  • listbox_lognav.xlsm
    35.4 KB · Affichages: 68

F22Raptor

XLDnaute Impliqué
je suis sur une piste : comme le RemoveItem est à l'intérieur d'une procédure ListBox_Change, dès que je lance le RemoveItem, la procédure détecte un chgt et se relance ...

Je vais la désactiver dans certains cas avec une variable Boolean : DesactiverProc = True fixé juste avant le RemoveItem (et remis à False ensuite).
Et tout en haut de la procédure : if DesactiverProc=True then Exit Sub.
 

Bebere

XLDnaute Barbatruc
bonjour
as tu essayé par l'évènement clic ,Dblclick ou mettre la procédure en dehors de l'évènement change
un On Error Resume Next avant l'opération
si la listbox est en rowsource çà ne marche pas
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour F22Raptor, à tous,

as tu essayé par l'évènement clic ,Dblclick

un essai de code via DblClick :
VB:
Private Sub LBsource_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   With LBsource
      If .ListIndex > -1 Then
         LBresult.AddItem .List(.ListIndex)
         LBresult.List(LBresult.ListCount - 1, 1) = .List(.ListIndex, 1)
         .RemoveItem (.ListIndex)
      End If
   End With
End Sub
 

F22Raptor

XLDnaute Impliqué
Bonjour Bebere, et merci MaPomme, pour le code.
J'ai essayé avec _Click mais ça ne marche pas du tout : rien ne se passe.
Le DblClick, je préfère l'éviter, il n'est pas naturel pour les utilisateurs ciblés.

Avec ma variable True/False au début de la macro, ça permet de ne pas la poursuivre quand le _Change se déclenche depuis le retrait de la ListBox de droite.

Bonne journée à tous et @ bientôt !
 

Bebere

XLDnaute Barbatruc
bonjour
code à tester
Code:
Option Explicit

Dim flag

Private Sub LBsource_Change()
    Dim Ligne As Byte, IndiceSource As Byte
    If flag = 0 Then
        Me.LBresult.AddItem
        Me.LBresult.List(Me.LBresult.ListCount - 1, 0) = Me.LBsource.List(Me.LBsource.ListIndex, 0)
        Me.LBresult.List(Me.LBresult.ListCount - 1, 1) = Me.LBsource.List(Me.LBsource.ListIndex, 1)
        flag = 1
    End If
End Sub

Private Sub LBsource_Click()
    On Error Resume Next
    If Me.LBsource.ListCount > 1 Then
        Me.LBsource.RemoveItem Me.LBsource.ListIndex: Me.LBsource.ListIndex = -1
    Else
        Me.LBsource.Clear
    End If
    flag = 0
End Sub
 

Si...

XLDnaute Barbatruc
Bon_jour

autre évènement :

VB:
Private Sub LBsource_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  LBresult.AddItem LBsource.List(LBsource.ListIndex, 0)
  LBresult.List(LBresult.ListCount - 1, 1) = LBsource.List(LBsource.ListIndex, 1)
  LBsource.RemoveItem (LBsource.ListIndex): Exit Sub
End Sub


Nota : pour la lisibilité, il vaut mieux raccourcir au maximum les dénominations et supprimer les références inutiles (comme Me.)
 

F22Raptor

XLDnaute Impliqué
intéressant.
Je vais tester, merci messieurs !

EDIT : et donc j'ai testé. L'évènement MouseUp fonctionne très bien, et n'a pas certains désagrément de Change. Du coup, je l'utilise dans les deux cas : gauche->droite et droite->gauche

Merci à tous pour votre aide :)
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
919

Statistiques des forums

Discussions
312 185
Messages
2 086 009
Membres
103 089
dernier inscrit
johnjohn1969