IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Listbox suppression d'item


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Par défaut Listbox suppression d'item
    Bonjour,

    Actuellement, je fais passer de ma liste de gauche (Liste 1) les items sélectionnés dans la liste de droite (Liste 2) par le bouton ">".

    J'aimerais, via un autre bouton, enlever de la liste1, les données que j'ai envoyé dans la liste2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub CommandButton3_Click()
     
    Dim i As Integer, J As Integer, z As Integer
     
     
    For i = 0 To ListBox1.ListCount - 1
        For J = 0 To ListBox2.ListCount - 1
             If ListBox2.List(J) = ListBox1.List(i) Then
                ListBox1.RemoveItem ListBox1.List(i)
     
     
       End If
       Next
       Next
     
    End Sub
    L'erreur est "Argument non valide". Je bloc...
    La valeur remonté de Listbox1.list(i) semble être la bonne... Quelqu'un voit-il une solution?

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour,
    - Boucles à faire de bas en haut (avec step -1) (sinon croche-pieds assurés avec les lignes)
    et
    - corriger la syntaxe de la méthode removeitem :

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    c'est le travail d'un super membre de ce site je crois PATRICK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Dim tablo1(12), tablo2()
    Private Sub CommandButton1_Click()
       transfert ListBox1, ListBox2
    End Sub
     
    Private Sub CommandButton2_Click()
        transfert ListBox2, ListBox1
    End Sub
     
    Sub transfert(lisTout, lisTin)
    Dim i As Long, malist2 As Object
        For i = lisTout.ListCount - 1 To 0 Step -1
            If lisTout.Selected(i) Then
                lisTin.AddItem lisTout.List(i)
            lisTout.RemoveItem i
            End If
        Next
         Set malist = CreateObject("System.Collections.ArrayList")
        For i = 0 To lisTin.ListCount - 1
    malist.Add lisTin.List(i)
    Next
    malist.Sort: lisTin.Clear
    For Each elem In malist
    lisTin.AddItem elem
    Next
    End Sub
     
    Private Sub CommandButton3_Click()
    End
    End Sub
     
    Private Sub UserForm_Activate()
    mylist = Array("Abdallah", "Walid", "Sami", "Abdelhamid", "Mounir", "Bilel", "Houssam", "Faycal", "Mongi", "Abdessalem")
     
        ListBox1.List = mylist
    End Sub

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Autre exemple avec un UserForm contenant deux contrôles ListBox placés côte à côte et nommé respectivement lstSheetList (à gauche) et lstSheetSelected (à droite)
    Le contrôle ListBox de gauche est alimenté à l'ouverture du UserForm du nom des feuilles du classeur.
    Le double-clic sur un des éléments de la liste (nom de feuille) le fait passer dans l'autre ListBox et vice-versa
    Code en
    Tête de module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Dim sht As Worksheet
    Procédure événementielle Initialize
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Initialize()
     Me.lstSheetList.Clear
     For Each sht In ThisWorkbook.Worksheets
      With Me.lstSheetList
      .AddItem sht.Name
      End With
     Next sht
    End Sub
    Procédure événementielle DblClick du contrôle nommé lstSheetList
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub lstSheetList_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
     With Me
     .lstSheetSelected.AddItem .lstSheetList.Text
     .lstSheetList.RemoveItem (.lstSheetList.ListIndex)
     End With
    End Sub
    Procédure événementielle DblClick du contrôle nommé lstSheetSelected
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub lstSheetSelected_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
     With Me
     .lstSheetList.AddItem .lstSheetSelected.Text
     .lstSheetSelected.RemoveItem (.lstSheetSelected.ListIndex)
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une autre piste avec un Glisser/Déplacer d'une liste à l'autre et vice-versa (donc, sans bouton mais avec la souris). Les listes s'appellent ListBox1 et ListBox2, à adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    Private Sub ListBox1_MouseMove(ByVal Button As Integer, _
                                   ByVal Shift As Integer, _
                                   ByVal X As Single, _
                                   ByVal Y As Single)
     
        Dim Obj As DataObject
        Dim Action As Integer
     
        If Me.ListBox1.Text = "" Then Exit Sub
     
        If Button = 1 Then
     
            Set Obj = New DataObject
     
            With ListBox1: Obj.SetText .Text: End With
     
            Action = Obj.StartDrag
     
        End If
     
    End Sub
     
    Private Sub ListBox1_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, _
                                        ByVal Data As MSForms.DataObject, _
                                        ByVal X As Single, _
                                        ByVal Y As Single, _
                                        ByVal DragState As MSForms.fmDragState, _
                                        ByVal Effect As MSForms.ReturnEffect, _
                                        ByVal Shift As Integer)
     
        Cancel = True
        Effect = 2
     
    End Sub
     
    Private Sub ListBox1_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
                                           ByVal Action As MSForms.fmAction, _
                                           ByVal Data As MSForms.DataObject, _
                                           ByVal X As Single, _
                                           ByVal Y As Single, _
                                           ByVal Effect As MSForms.ReturnEffect, _
                                           ByVal Shift As Integer)
     
     
        Cancel = True
        Effect = 2
     
        With ListBox2: .RemoveItem .ListIndex: End With
     
        With ListBox1: .AddItem Data.GetText: End With
     
    End Sub
     
    Private Sub ListBox2_MouseMove(ByVal Button As Integer, _
                                   ByVal Shift As Integer, _
                                   ByVal X As Single, _
                                   ByVal Y As Single)
     
        Dim Obj As DataObject
        Dim Action As Integer
     
        If Me.ListBox2.Text = "" Then Exit Sub
     
        If Button = 1 Then
     
            Set Obj = New DataObject
     
            With ListBox2: Obj.SetText .Text: End With
     
            Action = Obj.StartDrag
     
        End If
     
    End Sub
     
    Private Sub ListBox2_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, _
                                        ByVal Data As MSForms.DataObject, _
                                        ByVal X As Single, _
                                        ByVal Y As Single, _
                                        ByVal DragState As MSForms.fmDragState, _
                                        ByVal Effect As MSForms.ReturnEffect, _
                                        ByVal Shift As Integer)
     
        Cancel = True
        Effect = 2
     
    End Sub
     
    Private Sub ListBox2_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
                                           ByVal Action As MSForms.fmAction, _
                                           ByVal Data As MSForms.DataObject, _
                                           ByVal X As Single, _
                                           ByVal Y As Single, _
                                           ByVal Effect As MSForms.ReturnEffect, _
                                           ByVal Shift As Integer)
     
        Cancel = True
        Effect = 2
     
     
        With ListBox1: .RemoveItem .ListIndex: End With
     
        With ListBox2: .AddItem Data.GetText: End With
     
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Par défaut
    Bonsoir,

    Merci pour ces réponses plus que complètes!
    Pour le moment, je n'ai testé que la méthode de unparia. Ca fonctionne mais je ne comprends pas pourquoi le (sinon croche-pieds assurés avec les lignes)?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [listbox] Suppression d'item
    Par jontleman dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/11/2007, 01h19
  2. [listbox] Selection d'item
    Par jontleman dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/09/2007, 21h01
  3. [ListBox] Rafraîchissement des Items
    Par Gulix dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/02/2007, 11h43
  4. ListBox limité à 80 items ?
    Par Never dans le forum Windows
    Réponses: 5
    Dernier message: 22/10/2006, 15h32
  5. Suppression d'item dans une arborescence
    Par jonzuzu dans le forum MFC
    Réponses: 2
    Dernier message: 24/02/2004, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo