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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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:
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
 
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 !
 
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
 
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.)
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour