debutant94100
Messages postés8Date d'inscriptionmercredi 23 juillet 2008StatutMembreDernière intervention25 juillet 2008
-
24 juil. 2008 à 12:48
Profil bloqué -
24 juil. 2008 à 15:09
Bonjour,
Voila j'ai une listbox avec des valeurs dedant (LstDispoSecteur)
Je souhaite supprimer les doublons
Pour cela j'appelle une fonction SupDoubles ( voir code )
Seulement un message d'erreur apparait et je ne comprends pas pkoi
Message d'erreur : Incompatibilité type
En indiquant le code : Call SupDoubles(LstDispoSecteur)
Voila le code presque complet :
Private Sub ValiderPersonnels_Click()
..............
Call SupDoubles(LstDispoSecteur)
.................
end sub
Private Sub SupDoubles(lst As ListBox)
Dim iPos As Integer
iPos = 0
'Si la listbox est vide il quitte la fonction
If lst.ListCount < 1 Then Exit Sub
Do While iPos < lst.ListCount
lst.Text = lst.List(iPos)
'Verifie si le text existe deja
If lst.ListIndex <> iPos Then
'Si c'est le cas il supprime et garde la position iPos...
lst.RemoveItem iPos
Else
'Si ce n'est pas le cas il change la position iPos...
iPos = iPos + 1
End If
Loop
'Utiliser pour désélectionner la dernière ligne
lst.Text = "-"
End Sub
Excuses- moi je n'avais pas testé ton code et il marche nickel
Pourquoi mettre la vérification de doublon en fonction ?
Une fonction renvoie un paramètre et là il n'y a aucun paramètre à renvoyer
sinon tu peux faire ainsi
dim functdouble as boolean
functdouble = SupDoubles(Lst As ListBox) : renvoit True ou False si il y a eu des doublons(True) ou non(False)
Private Function SupDoubles(lst As ListBox)
Dim iPos As Integer
SupDoubles = false
iPos = 0
'Si la listbox est vide il quitte la fonction
If lst.ListCount < 1 Then Exit Sub
Do While iPos < lst.ListCount
lst.Text = lst.List(iPos)
'Verifie si le text existe deja
If lst.ListIndex <> iPos Then
'Si c'est le cas il supprime et garde la position iPos...
supDoubles = True
lst.RemoveItem iPos
Else
'Si ce n'est pas le cas il change la position iPos...
iPos = iPos + 1
End If
Loop
'Utiliser pour désélectionner la dernière ligne
lst.Text = "-"
End Sub
Salut debutant94100
Il faut faire une double boucle imbriquée
- une pour explorer chaque ligne de la listbox
- la seconde boucle est imbriquée dans la première et compare la ligne n° iPos avec toutes les lignes suivantes
Teste le code suivant
Private Sub SupDoubles(Lst As ListBox)
Dim iPos As Integer, i As Integer
Dim nbligne As Long
Dim chn As String
iPos = 0
'Si la listbox est vide il quitte la fonction
If Lst.ListCount < 1 Then Exit Sub
nbligne = Lst.ListCount
Do While iPos < nbligne - 2
chn = Lst.List(iPos)
'Verifie si cette ligne existe dans les lignes suivantes
i = iPos + 1
Do While i <= nbligne - 1
If Lst.List(i) = chn Then
'Si c'est le cas il supprime la ligne
Lst.RemoveItem i
Lst.Refresh
nbligne = nbligne- 1
Else
i = i + 1
End If
Loop
iPos = iPos + 1
Loop