Pb d'appel de fonction

Résolu
debutant94100 Messages postés 8 Date d'inscription mercredi 23 juillet 2008 Statut Membre Dernière intervention 25 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

Merci de votre aide

5 réponses

Profil bloqué
24 juil. 2008 à 14:49
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

VB.NET and VB6 are good : moi je prends les 2

GRENIER Alain
3
Profil bloqué
24 juil. 2008 à 14:07
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

End Sub

VB.NET and VB6 are good : moi je prends les 2

GRENIER Alain
0
debutant94100 Messages postés 8 Date d'inscription mercredi 23 juillet 2008 Statut Membre Dernière intervention 25 juillet 2008
24 juil. 2008 à 14:14
Bonjour Galain,

Non le code fonctionne parfaitement car je l'ai testé dans mon prg et ca me convient

Je voulais juste passer la vérification de doublon en fonction.

Et c'est juste l'appelle de ma fonction qui plante

Et je ne sais pas pkoi

Merci de ton aide

Bien Cdt
0
debutant94100 Messages postés 8 Date d'inscription mercredi 23 juillet 2008 Statut Membre Dernière intervention 25 juillet 2008
24 juil. 2008 à 15:04
OK merci pour ton aide, ca fonctionne

cdt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Profil bloqué
24 juil. 2008 à 15:09
Dans réponse acceptée remplacez functdouble = SupDoubles(Lst As ListBox) par functdouble = SupDoubles((LstDispoSecteur)

LstDispoSecteur = nom de la listbox dans l'exemple d'origine de ce post

pour débutant94100 bien content que cela fonctionne

VB.NET and VB6 are good : moi je prends les 2

GRENIER Alain
0
Rejoignez-nous