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 :

Suppression élément listbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Ingenieur Projet
    Inscrit en
    Février 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur Projet
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 29
    Par défaut Suppression élément listbox
    Bonjour a tous et bonne année,

    Ci dessous un petit problème que vous saurez je pense résoudre :

    Voila : Dans un formulaire j'ai :
    - 10 Checkbox numérotés de 1 à 10
    - 10 Combobox numérotés de 1 à 10
    - 10 Listbox numérotés de 1 à 10

    L'objectif est le suivant :

    En cochant la checkbox X, l'utilisateur choisi une valeur dans la combobox X

    La code doit supprimer dans la listbox X la valeur renseigné dans la combobox X
    A noter que la combobox et la listbox ont la meme contenu alimenté par la fonction Additem à l'initialisation du formulaire.

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        For i = 1 To 10
        If B_AJOUT_FP.Controls("Checkbox" & i).Value = True Then     
            For j = B_AJOUT_FP.Controls("ListBox_MC_" & i).ListCount - 1 To 0 Step -1
                If B_AJOUT_FP.Controls("ListBox_MC_" & i).List(j) = B_AJOUT_FP.Controls("ComboBox" & i).Value Then
                    'on Supprime l'élément selectionné dans la ListBox.
                    B_AJOUT_FP.Controls("ListBox_MC_" & i).RemoveItem (j)
                End If
            Next j
        End If
        Next i
    Quoi que je fasse j'ai toujours la même erreur sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    B_AJOUT_FP.Controls("ListBox_MC_" & i).RemoveItem (j)
    Erreur d’exécution '-2147467259 (80004005)' : Erreur non répertoriée.

    J’avoue que le message d'erreur n'aide pas beaucoup.
    Vous auriez une idée ?

    D'avance merci
    Agd

  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
    Voilà ce qui arrive lorsque l'on prend des raccourcis indus et fantaisistes
    Qu'est selon toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B_AJOUT_FP.Controls("ComboBox" & i).Value
    ???
    Pour ton information : c'est, lorsqu'une sélection a été faite dans la combobox OU que l'utilisateur a saisi ce qu'il veut dans la zone d'édition de la combobox --->> TOUT SIMPLEMENT (ET RIEN D'AUTRE) CE QUI FIGURE DANS LA ZONE D'EDITION !
    Sois rigoureux, s'il te plait !
    Je te laisse maintenant réfléchir un peu ... (trop évident).

  3. #3
    Membre averti
    Profil pro
    Ingenieur Projet
    Inscrit en
    Février 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur Projet
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 29
    Par défaut
    Heu.... Bonjour unparia

    La propriété style de ma combobox est sur fmStyleDropDownList et non pas sur fmStyleDropDownCombo si c'est ce a quoi tu faisait allusion => donc pas possibilité pour l'utilisateur de choisir autre chose que ce que la combobox propose.

    Maintenant je n'ais pas la science infuse et tous le monde a le droit de faire des erreurs.
    Si je viens sur un forum c'est pour comprendre, apprendre de mes erreurs et me perfectionner.
    Si c'est évident pour toi ce n'est pas forcement évident pour tous le monde.

  4. #4
    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
    Si une chose est évidente, c'est bien celle-ci :
    on se réfère à l'article d'index n d'une combobox combobox1 ainsi :
    et en aucune manière autrement.
    Précision : il ne s'agit pas là de "science infuse" dont je bénéficierais, mais de ce qui est exposé dans l'aide interne VBA ...

    Quant à :
    ce n'est absolument rien d'autre que ce que contient la zone d'édition de la combobox. Rien d'autre.
    Et ce n'est pas parce-que cette dernière propriété prend également la valeur d'un article éventuellement sélectionné, qu'elle est pour autant, à chaque instant, la valeur de tout article.
    La chose est tellement évidente !
    Et comment, d'ailleurs, imaginer une seule seconde que cette propriété Value pourrait être celle de chaque article dans une boucle ? Par quel miracle ?
    VOILA.
    Et je viens de m'adresser à un débutant. Je l'ai également été, mais n'ai jamais commis, même au tout début, une erreur de cette espèce-là.

    Une dernière chose, ami : si tu fais comme moi (consulter l'aide interne VBA) tu avanceras très vite (aussi vite que j'ai moi-même avancé). Dans le cas contraire, on te verra assez souvent venir ici au prétexte que tu n'as pas "la science infuse". La "science infuse", c'est d'abord et avant tout celle qui résulte de la lecture de ton aide VBA interne, dont aucun forum n'est un substitut.
    La vocation d'un forum n'est pas celle de se substituer à ce "mode d'emploi" qu'est l'aide interne VBA, mais d'aider à la résolution de difficultés en dépit de ce qu'expose cette aide interne.

    Je suis vraiment désolé, crois-moi, d'avoir eu à te préciser ces choses-là.

  5. #5
    Membre averti
    Profil pro
    Ingenieur Projet
    Inscrit en
    Février 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur Projet
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 29
    Par défaut
    Ok.
    Compris ce que tu voulais dire.

    si je boucle au début c'est pour identifier la combobox et la listbox sur lesquels je doit faire mes contrôles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        For i = 1 To 10
        If B_AJOUT_FP.Controls("Checkbox" & i).Value = True Then
    Et comment, d'ailleurs, imaginer une seule seconde que cette propriété Value pourrait être celle de chaque article dans une boucle ? Par quel miracle ?
    Je ne boucle pas sur les éléments de la combobox mais de la listbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            For j = B_AJOUT_FP.Controls("ListBox_MC_" & i).ListCount - 1 To 0 Step -1
    Enfin, quand un utilisateur fait un choix dans la liste d'un combobox, ce qu'il a choisi se trouve bien au final dans la zone d'édition de la combobox ? ou pas ?
    Donc
    c'est bien ce qu'il a choisi ? ou pas ?


    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        'je boucle sur tous les checkbox
        For i = 1 To 10
        'si une checkbox est cochée
        If B_AJOUT_FP.Controls("Checkbox" & i).Value = True Then     
            'je boucle sur tous les item dans la listbox correspondante a la checkbox cochée
            For j = B_AJOUT_FP.Controls("ListBox_MC_" & i).ListCount - 1 To 0 Step -1
                'si un item de la listbox correspond a ce que l'utilisateur a sélectionné dans la combobox (Zone d'édition) correspondant a la checkbox cochée
                If B_AJOUT_FP.Controls("ListBox_MC_" & i).List(j) = B_AJOUT_FP.Controls("ComboBox" & i).Value Then
                    'on Supprime dans la ListBox l'item correspondant a ce que l'utilisateur à sélectionné dans la combobox qui correspondant a la checkbox cochée et c'est la que ca bug
                    B_AJOUT_FP.Controls("ListBox_MC_" & i).RemoveItem (j)
                End If
            Next j
        End If
    pardonne moi si je suis vraiment crétin ... mais je ne vois aucun rapport avec ce que tu me dis et le bug réel qui se produit.

  6. #6
    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
    Tu voudras bien m'excuser, mais je ne vois dans ton code aucun élément qui montre qu'un article a été sélectionné.
    Tout ce que j'y vois, c'est un code qui contient une expression conditionnelle en subordonnant l'exécution au fait qu'une checkbox a été cochée.
    Tu voudras bien, dans ces conditions, montrer (comme il se doit) l'intégralité (depuis sub jusqu'à end sub inclus) de la procédure exécutée.
    Tu voudras bien préciser également dans la foulée, si ton "formulaire" est une feuille de calcul ou un Userform.
    Merci de donner systématiquement ces précisions.

    EDIT : ah oui (oublié ceci) : précise également comment ces deux contrôles (la combobox et la listbox) ont été abondées.

  7. #7
    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
    Ce petit exemple montre bien qu'il n'y a aucun problème lorsque, à la fois :
    - la combobox et la listbox ne sont pas des contrôles "liés"
    - un article de la combobox a bien été sélectionné
    une listbox, une combobox deux boutons de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
      ListBox1.Clear
      ComboBox1.Clear
      For i = 1 To 10
        ListBox1.AddItem i
        ComboBox1.AddItem i
      Next
    End Sub
     
    Private Sub CommandButton2_Click()
        ListBox1.RemoveItem (ComboBox1.ListIndex)
    End Sub
    Aucun problème alors.
    Si tu en as un, il est soit du au fait que la listbox est "liée", soit du au fait qu'aucun article n'a en fait été sélectionné dans la combo.
    Et le code que tu montres n'est à lui seul pas suffisant pour déterminer ce qui ne va pas ailleurs.

    PS : tu observeras au passage que je ne prends aucune "liberté" et m'abstiens (ton aide VBA) de lire la propriété Value. Je m'en tiens à la détermination orthodoxe de chaque article par son INDEX (comme il se doit)

    De manière générale : on ne devrait utiliser cette propriété Value que pour des contrôles de saisie dans la zone d'édition. Toute autre utilisation est abusive et peut, dans certains cas, être traître.
    La zone d'édition est et doit être considérée uniquement comme telle (une zone de saisie et rien d'autre. Une combobox n'est jamais rien d'autre que la combinaison d'une textbox et d'une listbox.
    Il est clair qu'une sélection a pour effet de modifier la zone d'édition, mais en déduire que le contenu de la zone d'édition correspond à un article sélectionné est faux (en ce sens que cette zone d'édition peut tout aussi bien contenir n'importe quoi, sans même avoir sélectionné un article).

    EDIT ma rigueur va même au-delà --->>
    même dans un évènement click d'une listbox ou d'une combobox, alors-même que la propriété Value de ce contrôle sera NECESSAIREMENT celle de l'élément sélectionné, je m'abstiens d'utiliser la propriété value et m'en tiens à la valeur Listndex de la propriété List (ex : listbox1.list(listindex) ). A observer SYSTEMATIQUEMENT cette discipline, je m'impose une méthode qui devient un réflexe.
    Je sais que tu trouveras ici et là, sur les forums, des comportements différents. Ils ne sont tout simplement pas sains et participent dans certains cas, de ceux qui conduisent à confondre cause et effet.
    Le pire est d'utiliser carrément (je le vois trop souvent) l'évènement Change pour "décider" péremptoirement que ce qui figure dans la zone d'édition (la propriété Value, donc) correspond forcément à un article sélectionné !!!!! CE QUI EST UN ABUS, VOIRE UNE ABERRATION !

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/11/2010, 10h02
  2. suppression élément base de données
    Par momomafioso dans le forum ASP.NET
    Réponses: 24
    Dernier message: 15/06/2007, 14h40
  3. Suppression élément dans liste
    Par bugmenot dans le forum C
    Réponses: 12
    Dernier message: 06/12/2005, 19h52
  4. Ajouter des éléments à ListBox
    Par priest69 dans le forum Access
    Réponses: 5
    Dernier message: 20/09/2005, 14h05
  5. Pb ajouter/suppression élément liste
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/09/2005, 15h54

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