XL 2016 Interdire l'ajout d'un item dans Listbox s'il existe

piga25

XLDnaute Barbatruc
Bonjour,
Je rencontre un petit problème dont je n'arrive pas a trouver la solution.
Je souhaite interdire l'ajout d'un item dans une Listbox en fonction d'une valeur d'une Textbox. Cela fonctionne seulement en partie. En effet, cela ne prends pas en compte les items déjà présents dans cette Listbox mais uniquement ceux qui viennent d'être ajoutés.
Comment faire pour que cela prenne bien en compte tous les items même ceux déjà présents dans la ListBox

VB:
Private Sub CommandButton1_Click()
If Me.TB2 = "" Then Me.ListBox1.ListIndex = -1: Exit Sub
For i = 0 To ListBox3.ListCount - 1 'on boucle sur tout les items de la listbox3
    If ListBox3.List(i, 1) = Me.TB2 Then Exit Sub   'si l'item est déjà en listbox3 on sort
Next i
'sinon on ajout l'item
ListBox3.AddItem
  pos = Me.ListBox3.ListCount - 1
    Me.ListBox3.List(pos, 0) = Me.TB1 'N° Equipe
    Me.ListBox3.List(pos, 1) = Me.TB2 'N° planning
    Me.ListBox3.List(pos, 2) = Me.TB3 'Nom
    Me.ListBox3.List(pos, 3) = Me.TB4 'Prénom
    Me.ListBox3.List(pos, 4) = Me.TB5 ' SSF
ListBox2.AddItem
  pos = Me.ListBox2.ListCount - 1
    Me.ListBox2.List(pos, 0) = Me.TB1 'N° Equipe
    Me.ListBox2.List(pos, 1) = Me.TB2 'N° planning
    Me.ListBox2.List(pos, 2) = Me.TB3 'Nom
    Me.ListBox2.List(pos, 3) = Me.TB4 'Prénom
    Me.ListBox2.List(pos, 4) = Me.TB5 ' SSF
  Me.TB2 = ""
  Me.TB3 = ""
  Me.TB4 = ""
  Me.TB5 = ""
Me.ListBox1.ListIndex = -1
Me.CommandButton5.Visible = True
End Sub
 
Dernière édition:
Solution
Bonjour @piga25, le Fil, le Forum

J'ai essayé ton truc, je choisis l'équipe 1 et ensuite je veux ajouter le Nom4, Planning 1, en effet il l'ajoute dans la ListBox2 alors qu'il est déjà là...
Mais bon je ne comprends pas ta logique, tu check la ListBox3...

Moi j'ai fait ceci, ne sâchant pas en fait la finalité entre ces deux ListBox2 et 3, je suis radical !

VB:
Private Sub CommandButton1_Click()

For i = 0 To ListBox2.ListCount - 1 'on boucle sur tout les items de la listbox3
    If CStr(ListBox2.List(i, 1)) = CStr(Me.TB2.Text) Then
    MsgBox "doublon dans ListBox2 Planning = " & CStr(Me.TB2)
    Exit Sub
    End If
Next i


For i = 0 To ListBox3.ListCount - 1
    If CStr(ListBox3.List(i, 1)) = CStr(Me.TB2.Text) Then
    MsgBox...

_Thierry

XLDnaute Barbatruc
Bonjour @piga25, le Fil, le Forum

J'ai essayé ton truc, je choisis l'équipe 1 et ensuite je veux ajouter le Nom4, Planning 1, en effet il l'ajoute dans la ListBox2 alors qu'il est déjà là...
Mais bon je ne comprends pas ta logique, tu check la ListBox3...

Moi j'ai fait ceci, ne sâchant pas en fait la finalité entre ces deux ListBox2 et 3, je suis radical !

VB:
Private Sub CommandButton1_Click()

For i = 0 To ListBox2.ListCount - 1 'on boucle sur tout les items de la listbox3
    If CStr(ListBox2.List(i, 1)) = CStr(Me.TB2.Text) Then
    MsgBox "doublon dans ListBox2 Planning = " & CStr(Me.TB2)
    Exit Sub
    End If
Next i


For i = 0 To ListBox3.ListCount - 1
    If CStr(ListBox3.List(i, 1)) = CStr(Me.TB2.Text) Then
    MsgBox "doublon dans ListBox3 Planning = " & CStr(Me.TB2)
    Exit Sub
    End If
Next i

'etc............

Bonne journée
@+Thierry
 
Dernière édition:

jmfmarques

XLDnaute Accro
Cela ne prend pas en compte les items et sous items déjà présent dans la listbox3 mais uniquement ceux rajoutés.
Pas chez moi. Avec mon code (testé, re testé et re re testé) aucun doublon possible en seconde colonne, tout simplement (qu'il s'agisse d'ajouts nouveaux ou de la totalité des articles).
J'espère que tu n'es pas en train de parler d'autre chose que d'articles présents à l'instant de ce code, seuls bien évidemment contrôlables.
j'en déduis que ton problème est ailleurs, vraisemblablement dans des ajouts paraissant être identiques mais ne l'étant en réalité pas (espaces, casse, etc .. ?)
 
Dernière édition:

piga25

XLDnaute Barbatruc
Re
C'est bien un problème texte / numérique
en effet si je mets la condition du contrôle que sur du texte (le Nom et le Prénom), il n'y plus de problème.
VB:
Private Sub CommandButton1_Click()
If Me.TB2 = "" Then Me.ListBox1.ListIndex = -1: Exit Sub
  ListBox3.ColumnCount = 5
  ListBox3.TextColumn = 3 ' Colonne Nom
  ListBox3.TextColumn = 4 ' Colonne Prénom
  ListBox3.ListIndex = -1
  On Error Resume Next
  ListBox3.Text = TB3.Text 'Contrôle le Nom
  ListBox3.Text = TB4.Text 'Contrôle le Prénom
  On Error GoTo 0
  If ListBox3.ListIndex = -1 Then
    ListBox3.AddItem TB1.Text 'N° équipe
    ListBox3.List(ListBox3.ListCount - 1, 1) = TB2.Text 'N° planning
    ListBox3.List(ListBox3.ListCount - 1, 2) = TB3.Text 'Nom
    ListBox3.List(ListBox3.ListCount - 1, 3) = TB4.Text 'Prénom
    ListBox3.List(ListBox3.ListCount - 1, 4) = TB5.Text 'N° pref
  End If
  'ListBox3.ListIndex = -1
  Me.TB2 = ""
  Me.TB3 = ""
  Me.TB4 = ""
  Me.TB5 = ""
 Me.CommandButton5.Visible = True
End Sub
 

Discussions similaires