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 :

Supprimer des Items dans une ListBox.


Sujet :

Macros et VBA Excel

  1. #1
    Inscrit
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Points : 104
    Points
    104
    Par défaut Supprimer des Items dans une ListBox.
    bjr à tous
    j'ai developpé une macro dont le but de supprimer les items selectionnés d'une listbox.( la mutisélection est autorisée dans ma listbox)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim j As Byte
    For j = 0 To UFdech.LBlot.ListCount - 1
        If UFdech.LBlot.Selected(j) = True Then
        'on Supprime l'élément selectionné dans la ListBox.
        UFdech.LBlot.RemoveItem (UFdech.LBlot.ListIndex)
        End If
    Next j
    la ligne en rouge est la cause d'une erreur
    merci de votre aide.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    2 choses :
    1) quand on supprime, on commence par la fin et un remonte vers l'indice 0, sinon, on se fait bien évidemment des croches-pieds avec des indices qui n'existent plus
    2) pour ta suppression, il ne faut pas te référer à l'indice listindex, mais à la valeur de j

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For j =UFdech.LBlot.ListCount - 1 to 0 step -1
        If UFdech.LBlot.Selected(j) = True Then
        'on Supprime l'élément selectionné dans la ListBox.
        UFdech.LBlot.RemoveItem (j)
        End If
    Next j

  3. #3
    Inscrit
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Points : 104
    Points
    104
    Par défaut
    merci ucfoutu de ta reponse
    j'ai bien testé ton code, il me renvoie une erreur causée de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j = UFdech.LBlot.ListCount - 1 to 0 step -1
    merci.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Cà, c'est encore autre chose et laisse entendre que :
    - soit ta listbox ne s'appelle pas exactement LBlot
    - soit qu'elle n'est pas sur un userform nommé exactement UFdech
    - soit qu'elle compte plus de 255 articles alors que J est déclaré en Byte seulement

    Je viens de tester mon code et il fonctionne sans faille.

  5. #5
    Inscrit
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Points : 104
    Points
    104
    Par défaut
    bjr à tous
    merci ucfoutu de tes conseils
    j'ai bien verifié ce que tu m'avais dit mais je pense que mes données sont juste et voici une copie ci-joint pour m'aider s.v.p
    Fichiers attachés Fichiers attachés

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour, Ousk,

    Ce qui m'épate et m'a conduit aux doutes que j'ai exprimés est ceci :
    citation :
    j'ai bien testé ton code, il me renvoie une erreur causée de la ligne

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j = UFdech.LBlot.ListCount - 1 to 0 step -1
    Une erreur avant même de tenter de supprimer ....
    Et là, liée ou non .... faut bien une explication ....

  7. #7
    Inscrit
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Points : 104
    Points
    104
    Par défaut
    merci ouskel'n'or
    et voici ma macro de la combobox CBmodèle

    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
    Private Sub CBmodèle_Change()
    Dim cel As Range
    Dim tableau()
    Dim existe As Boolean
    Dim celtableau As Variant
    Dim str As String
    LBlot.Clear 'mise à zero de cette listbox
    str = CBmodèle.Value 'on donne l'element changé à la variable
    On Error Resume Next
    ReDim tableau(1 To 1)
        'Boucle sur les données de la colonne b, dans la "mouvement"
        For Each cel In Worksheets("action").Range("b2:b" & Worksheets("action").Range("b65536").End(xlUp).Row)
            If cel.Value = str And cel.Offset(0, 3) = "" Then
            existe = False
            'Vérifie si le contenu de la cellule existe déjà dans le tableau
            For i = 1 To UBound(tableau)
                'Si la donnée existe déjà dans le tableau
                If tableau(i) = cel.Offset(0, 1).Value Then
                    existe = True
                    Exit For
                End If
            Next i
            'Si la donnée n'existe pas dans le tableau, on augmente la taille du tableau
            'et on ajoute la donnée.
            If existe = False Then
                ReDim Preserve tableau(1 To UBound(tableau) + 1)
                tableau(UBound(tableau)) = cel.Offset(0, 1)
            End If
            End If
        Next cel
    On Error GoTo 0
    For Each celtableau In tableau
    If celtableau <> "" Then
       'Alimente le listBox
        LBlot.AddItem celtableau
    End If
    Next celtableau
    End Sub
    et aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Initialize()
        With Sheets("modèle")
        UFdech.CBmodèle.List = .Range("A2:A" & .Range("A65535").End(xlUp).Row).Value
        End With
    UFdech.TBdate.Value = Date
    End Sub
    pour te dire : lorsque la proprieté de ma listebox est fmMultiSelectSingle la suppression ça marche très bien pour chaque item selectionné.
    merci.

  8. #8
    Inscrit
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bonjour, Ousk,

    Ce qui m'épate et m'a conduit aux doutes que j'ai exprimés est ceci :
    citation :

    Une erreur avant même de tenter de supprimer ....
    Et là, liée ou non .... faut bien une explication ....
    la suppression se fait seulement sur la 1ere selection et se bloque sur la deuxième.

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Euh...abouhossam,

    Voilà donc un mystère .... !!! ... si tu ne nous as rien caché et que tu n'as pas tenté de modifier le code à ta manière...

    A moins que ....

    Es-tu certain de ce que, le stress aidant, tu n'as pas fait plusieurs tests avec des boutons de lancement différents, puis que (le stress aidant encore) tu ne te mélanges pas les pinceaux entre un bouton et l'autre ?

    J'ai beau tout tenter, le code qui t'a été montré tourne sans faille et aucun de mes essais, même les plus vicieux, ne parvient à le tromper ...

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Une question toute simple : Qu'est censé faire la macro CBmodèle_Change ?
    Pour moi tu renseignes une liste sans doublon avec la colonne C si Str existe et si la colonne E est renseignée... (à quelque chose près)
    Si c'est ça, alors tu as une méthode plus simple et plus rapide avec Find.
    Mais ce n'est pas ça qui règlerait ton pb.
    Je viens de tester ça avec fmMultiSelectExtended

    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
    Private Sub CommandButton1_Click()
        For j = ListBox1.ListCount - 1 To 0 Step -1
            If ListBox1.Selected(j) = True Then
            'on Supprime l'élément selectionné dans la ListBox.
            ListBox1.RemoveItem (j)
            End If
        Next j
    End Sub
     
    Private Sub UserForm_Initialize()
        With Sheets("feuil1")
        ListBox1.List = .Range("A2:A" & .Range("A65535").End(xlUp).Row).Value
        End With
        'ListBox1.Value (ou Text) = Date 'provoque une erreur
    End Sub
    et avec le code d'ucfoutu je n'ai aucun problème

    Facile à tester sur n'importe quel fichier, avec un userform tout neuf, une liste et un bouton

    Tu vas devoir nous en dire plus sur les propriétés que tu as modifiées dans ta liste
    A+

  11. #11
    Inscrit
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Points : 104
    Points
    104
    Par défaut
    merci à vous ouskel'n'or et ucfoutu
    la macro ça marche très bien.
    l'erreur est:
    correction:
    j'ai un problème au niveau déclaration des variables
    veuillez m'aider svp pour bien maitriser les déclarations de mes variables
    merci infiniment.

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

Discussions similaires

  1. [XL-2013] impossible de supprimer des Items dans une listbox à choix multiple
    Par dmoluc dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/11/2013, 16h34
  2. inserer des items dans une listbox en JSP sous Netbeans
    Par carole yao dans le forum NetBeans
    Réponses: 0
    Dernier message: 08/05/2012, 19h26
  3. Supprimer des items dans une drop down liste
    Par msahmi dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/04/2008, 10h59
  4. Sélectionner des Items dans une ListBox
    Par berpi dans le forum Débuter
    Réponses: 3
    Dernier message: 07/02/2008, 22h56
  5. Réponses: 3
    Dernier message: 29/08/2006, 12h50

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