interdire la sélection d'un item de la listebox1 si celui-ci ne figure pas dans la listbox2

piga25

XLDnaute Barbatruc
Bonjour le Forum

J'ai encore un petit soucis avec mes listbox.
J'aimerai qu'un message s'affiche lorsque l'on sélectionne un Item de la listbox Dest et que celui-ci ne figure pas dans la listBox Main. Par contre si l'item figure bien dans l'autre listbox on continu le code.

J'ai essayé ceci à partir d'un code qui me permet de faire une boucle sur les deux listebox et repérer les items qui ni figure pas.

VB:
Private Sub Dest_MouseUp1(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim i&, a&, n&
    For a = Me.Dest.ListCount - 1 To 0 Step -1
        For i = 0 To Me.Main.ListCount - 1
            If Me.Main.List(i, 0) = Me.Dest.List(a, 1) Then n = n + 1
        Next i
        If n = 0 Then Me.Dest.Selected(a) = True
        MsgBox " vous ne pouvez pas sélectionner ce sauveteur "
        n = 0
    Next a
End Sub

merci

Edit: La recherche doit se faire sur la colonne 0 de la listbox Main et sur la colonne 1 de la listbox Dest
 

job75

XLDnaute Barbatruc
Bonjour piga25, Bruno,

En fait avec le Dictionary et ListIndex plus besoin de boucle dans l'USF, le résultat est immédiat :
VB:
Private Sub Dest_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Not d.exists(Dest.List(Dest.ListIndex, 1)) Then
    Dest.Selected(Dest.ListIndex) = False 'désélectionne
    MsgBox "Vous ne pouvez pas sélectionner ce sauveteur" 'inutile, on voit bien que la sélection est impossible...
End If
End Sub
Fichier (3).

A+
 

Pièces jointes

  • USF(3).xlsm
    28.2 KB · Affichages: 10

piga25

XLDnaute Barbatruc
Bonjour Gérard, Bruno, le Forum
En effet, mais à la condition que mes listes soient entrée comme tablo. Là j'aurai un problème, car une sera variable, c'est à dire la list "Dest" qui elle va chercher les données sur la feuille en fonction d'un choix de destination.
Mais l'idée est très bonne pour deux listes uniques et fixes.
 

eriiic

XLDnaute Barbatruc
J'ai bien lu tes explications, mais je ne vois pas en quoi ça empêche de ne mettre que les items concernés et de tenir à jour ceux-ci.
Il faut les ajouter un par un avec AddItem en testant plutôt qu'en bloc avec une plage.
eric
 

piga25

XLDnaute Barbatruc
Bonjour Eric, Gérard, Bruno, le forum
J'ai bien lu tes explications, mais je ne vois pas en quoi ça empêche de ne mettre que les items concernés et de tenir à jour ceux-ci.
Il faut les ajouter un par un avec AddItem en testant plutôt qu'en bloc avec une plage.
Le mieux c'est que je mette une copie du fichier car je pense que cela ne soit pas possible, je peux me tromper.
Sur la feuille Accueil, clic sur EVENEMENT puis sur l'icone Spéléo en bleu. Le choix des différentes positions des sauveteurs se fait avec les bouton radio.
Il y a surement à améliorer, c'est loin d'être parfait.
 

Pièces jointes

  • Main courante 2019 version 6.03.xlsm
    406.6 KB · Affichages: 8

eriiic

XLDnaute Barbatruc
Si j'ai bien compris c'est séquentiel (?)
Ce que j'imagine alors c'est un tableau, en mémoire ou sur feuille selon que tu doives mémoriser la situation ou pas (coupure alimentation etc), où tu déplaces les noms à gauche ou à droite selon le déplacement effectué dans la boite de dialogue.

Ex :
2019-04-02_17-58-27.png


Si tu es dans la phase Inscription <--> Départ tu as le contenu de tes 2 listebox de gauche et de droite pour les initialiser.
Seuls nom2, nom3 et nom4 peuvent aller à droite, seul nom7 ( ou + nom6 et nom8 si tu veux pouvoir annuler plusieurs niveaux d'écart) peut aller à gauche
A chaque clic sur -> ou <- tu mets à jour tes listbox et tu déplaces le nom d'une colonne d'un coté ou de l'autre.
Tu as en permanence les noms valides pour les 2 listes.
 

piga25

XLDnaute Barbatruc
Re,
Oui c'est le principe. C'est ce qui est fait actuellement via l'userform et avec la possibilité de mettre un groupe de personnes directement (multi-selection). Pour verrouiller le truc, ce que j'avais prévu (le but de ce fil) c'était au cas ou une personne avait été sélectionnée puis basculée dans l'autre liste, avoir la possibilité de la retirer (uniquement celles qui venaient d'être ajoutées et non celles qui y figuraient déjà).
Je suis obligé de passer par l'userform pour une question de simplicité pour les futurs utilisateurs.
Autre avantage de ceci, je peux travailler en multi-colonnes (chaque liste n'a pas forcement le même nombres de colonnes)
Est-ce que ta proposition peut faire cela?
 

Discussions similaires

Statistiques des forums

Discussions
312 360
Messages
2 087 598
Membres
103 604
dernier inscrit
CAROETALEX59