Supprimer subitem en double

Larmada Messages postés 16 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 juin 2012 - 11 juin 2012 à 17:17
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 12 juin 2012 à 07:09
Salut à tous,

Voici mon code pour supprimer les subitems en double...il fonctionnait bien hier mais aujourd'hui sans avir fais de modifs, plus rien...

 
Private Sub SearchButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchButton1.Click

       Dim tmp As String
        Dim k, g As Integer
        k = 0
        Do While k <= ListView4.Items.Count - 1
            tmp = ListView4.Items(k).SubItems(1).Text
            For g = k + 1 To ListView4.Items.Count - 1

                If tmp.Equals(ListView4.Items(g).SubItems(1).Text) Then
                    Dim fi As New FileInfo(ListView4.Items(g).Text)
                    Dim intResponse As Integer
                    intResponse = MsgBox(ListView4.Items(g).Text & vbNewLine & "Do you want to delete the duplicate found in the folder?", _
                    vbYesNo + vbQuestion, _
                    "Duplicate found!")
                    If intResponse = vbYes Then
                        fi.Delete()
                        ListView4.Items.RemoveAt(g)
                        CountLabel1.Text = ListView4.Items.Count.ToString & " Files!"
                    Else
                        Exit Sub
                    End If
                    k -= 1
                    Exit For
                Else
                    MsgBox("No duplicate found in the folder", _
                    vbOKOnly + vbInformation, _
                    "No Duplicate Found!")
                    Exit Do
                End If
            Next
            k += 1
        Loop

    End Sub


J'ai juste une colonne adresse du fichier, et une autre pour le nom du fichier (subitem)

Pouvez vous m'aider ?

Merci d'avance.
Flo'

12 réponses

Utilisateur anonyme
11 juin 2012 à 19:21
Bonsoir,

Commence par activer Option Strict et Option Explicit dans les propriétés de ton projet. Corrige les erreurs et reviens par ici.
0
Larmada Messages postés 16 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 juin 2012
11 juin 2012 à 19:24
Salut,

Merci pour ta réponse ;)

Strict & Explicit sur ON tous les 2, et je ne vois aucune erreur dans le code
0
Larmada Messages postés 16 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 juin 2012
11 juin 2012 à 19:26
J'ai trouvé ceci mais pour les items...et non subitems comme je veux...

Public Sub RemoveDuplicates(ByVal lstView As ListView)
Try
Dim itemI, itemJ As ListViewItem
lstView.BeginUpdate()
For i As Integer = lstView.Items.Count - 1 To 0 Step -1
itemI = lstView.Items(i)
For z As Integer = i + 1 To lstView.Items.Count - 1 Step 1
itemJ = lstView.Items(z)
If itemI.Text = itemJ.Text Then
lstView.Items.Remove(itemJ)
Exit For
End If
Next z
Next (i)
lstView.EndUpdate()
Catch ex As Exception
End Try
End Sub


Private Sub SearchButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchButton1.Click

RemoveDuplicates(ListView2)

End Sub
0
Utilisateur anonyme
11 juin 2012 à 19:33
plus rien...
C'est trop vague, il faut plus d'informations. Sur quelle ligne l'erreur est-elle levée ?
Quel est le message complet de l'erreur ?
0

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

Posez votre question
Larmada Messages postés 16 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 juin 2012
11 juin 2012 à 19:39
Il me renvoie le "Else" car il ne trouve aucune équivalence
0
Utilisateur anonyme
11 juin 2012 à 19:47
Tu fais partir ta boucle à g = k + 1
Si les 2 premiers subitems de ta liste sont égaux, il est normal que Equals de détecte rien.
0
Larmada Messages postés 16 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 juin 2012
11 juin 2012 à 19:51
Même avec 2 subitem en tête et bout de liste il ne trouve aucune équivalence

Merci pour ton aide
0
Utilisateur anonyme
11 juin 2012 à 20:35
Donc, j'ai pris la peine d'analyser tes boucles imbriquées.
Admettons que les 2 premiers subitems soient différents, on arrive au else en question où il y a cette msgbox (style vb6 et obsolète mais bon). Juste après, tu sors de la boucle do/loop. Résultat: 1 seul test à été effectué.
0
Larmada Messages postés 16 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 juin 2012
11 juin 2012 à 20:47
Oui la msgbox est obsolète...

Pourrais tu m'aider à rectifier le code afin qu'il continue à chercher des subitems égaux?
0
Utilisateur anonyme
11 juin 2012 à 20:55
Est-ce toi qui a codé ceci ?
Essaie de supprimer Exit Do. (sans convictions pour le reste...)
0
Larmada Messages postés 16 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 juin 2012
12 juin 2012 à 00:50
Résolu!
Un simple "If" mal placé

Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 juin 2012 à 07:09
Bonjour, Larmada :
Résolu!
Un simple "If" mal placé

mais j'ai lu (ton 1er message) :
il fonctionnait bien hier mais aujourd'hui [quote]sans avir fais de modifs
, plus rien... /quote
et ai "survolé" le code (de ton 1er message également)
Et je crois que l'explication (fonctionnait ===>> ne fonctionne plus ===>> maintenant résolu (if mal placé) ) n'est pas la bonne. Je crois également que le problème reviendra. Je crois qu'il ne se révèle que dans "certains cas"
Change donc ton fusil d'épaule et fait ta boucle "à l'envers" (de bas en hait et non de haut en bas).
Car dans l'état actuel de ton code, chaque ligne :
ListView4.Items.RemoveAt(g)
vient "bousculer" les choses (puisque la numerotation des rangs s'en trouve modifiée).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous