XL 2013 Supprimer item listbox (selon récurisvité ?)

boby63

XLDnaute Nouveau
Bonjour
Je crois que le problème que je vous soumet concerne la récursivité.
Dans la BD jointe une liste d'items (sans doublons) qui peuvent être reliés à un autre item.
En ouvrant le formulaire, je cherche l'item que je souhaite relier (pour la première fois ou pour modifier la liaison).
Sélectionnons "item 5" dans le combo1 par exemple : il ne peut pas être relié à lui-même donc je l'exclue de la listbox
Mais je souhaiterai aussi enlever de la listbox l'item 6 puisqu'il ne peut pas devenir fils de son fils, mais aussi en cascade, les items 7, 8 et 9 puisque eux aussi sont reliés "en cascade" à l'item 5.
J'espère avoir été clair car ce n'est pas si simple à expliquer ....
 

Pièces jointes

  • Boucle supp item.xlsm
    22.9 KB · Affichages: 17

Paf

XLDnaute Barbatruc
Bonsoir,

un essai:

Dans Private Sub ComboBox1_Change(), remplacer
VB:
For i = ListBox1.ListCount - 1 To 0 Step -1
    If ListBox1.List(i, 0) = Me.ComboBox1 Then ListBox1.RemoveItem (i) 'supprimer item choisi dans Combo (pour ne pas pouvoir le relier à lui-même)
Next i
par
VB:
SuppItem ComboBox1.Value

rajouter la fonction suivante dans la feuille de code de l'userform :
VB:
Function SuppItem(Valeur)
 ListBox1.Value = Valeur
 idx = ListBox1.ListIndex
 ProchaineValeur = ListBox1.List(idx, 1)
 ListBox1.RemoveItem (idx)
 If ProchaineValeur = ComboBox1.Value Or ProchaineValeur = "" Then
    Exit Function
 Else
     SuppItem ProchaineValeur
 End If
End Function

à tester .

A+
 

boby63

XLDnaute Nouveau
Merci de te pencher sur mon problème
Hélas Erreur 380 "Impossible de définir la propriété value. Valeur de propriété non valide."
Avec en jaune ListBox1.Value = Valeur quelque soit le choix fait dans Combo

VB:
Function SuppItem(Valeur)
   [COLOR=rgb(247, 218, 100)] ListBox1.Value = Valeur[/COLOR]
    idx = ListBox1.ListIndex
    ProchaineValeur = ListBox1.List(idx, 1)
    ListBox1.RemoveItem (idx)
    If ProchaineValeur = ComboBox1.Value Or ProchaineValeur = "" Then
       Exit Function
    Else
        SuppItem ProchaineValeur
    End If
End Function
 

Paf

XLDnaute Barbatruc
Ca fonctionne tel quel avec votre classeur et Excel 2007.

Où avez vous copier la fonction?

Elle doit être copiée dans la même feuille que les différentes sub du userform et non dans un module standard.

A+
 

Paf

XLDnaute Barbatruc
Ce n'est qu'une impression......
Relisez ma première réponse : il y a 3 lignes à remplacer par une nouvelle.

Et vous avez remplacé la deuxième par la nouvelle et donc conservé la boucle for i...

lors de la première itération tout se passe bien, mais à la deuxième les éléments à supprimer n'existant plus, il y a plantage....

Bonne nuit
 

boby63

XLDnaute Nouveau
Oups désolé, suis vraiment nul !!!!
Par contre, ça ne répond pas à ma demande, certainement en raison d'une mauvaise explication au départ.
Je vous joint une adaptation d'un fichier du site de J. Boisgontier concernant cette récursivité.

Exemple 1 : je sélectionne "bouchez" dans le combo, et en possibilité de père à rattacher, il est évident que je ne peut avoir que Droc et item 13 à 16 comme choix de père puisque tous les autres sont soit déjà soit ses enfants soit ses descendants (je ne doit pas pouvoir choisir Aubert, Marie, Bellanger, etc ...)

Exemple 2 : si je choisi "Gidel" dans le combo, doivent être exclus comme choix "Bourgeat" et "Aubert"

J'espère avoir été plus clair cette fois-ci. Merci
 

Pièces jointes

  • recursif3.xlsm
    34.3 KB · Affichages: 7

Paf

XLDnaute Barbatruc
Merci pour le lien sur la récursivité qui n'est qu'un moyen, le principal est ce que vous voulez obtenir.....

Mais je souhaiterai aussi enlever de la listbox l'item 6 puisqu'il ne peut pas devenir fils de son fils, mais aussi en cascade, les items 7, 8 et 9 puisque eux aussi sont reliés "en cascade" à l'item 5.
J'espère avoir été clair car ce n'est pas si simple à expliquer ....

Le code présenté répond à cette demande ? non?
 

boby63

XLDnaute Nouveau
Bonjour
Non pas du tout : par exemple si je choisi "Gidel" dans le combo, il ne devrait pas me présenter "Aubert" (par contre il a bien enlevé Bourgeat de la liste)
Bonne journée
 

Pièces jointes

  • recursif3 (1).xlsm
    33.6 KB · Affichages: 6

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 851
dernier inscrit
vaiata