Modification dans listview filtrée

Bonjour,

J'ai une listview(lv2) qui affiche uniquement les lignes correspondant à un numéro d'adhérent sélectionnée dans une autre listview(lv1).

Pour filtrer lv2 j'ai donc le code suivant:

 Sub Remplir_Liste(ByVal Quoi As String) 'filter Lv2 en fonction de l'adhérent sélectionné

    Dim cellule As Integer, Compteur As Integer

    Sheets("Feuil2").Activate
    With Lv2
        .ListItems.Clear
        For cellule = 3 To Cells(65535, 3).End(xlUp).Row    ' Step 1 'on rajoute 2 car il commence à partir de la ligne 3

                If Range("B" & cellule) = Quoi Then
                    .ListItems.Add , "A" & cellule, Range("A" & cellule)
                    Compteur = .ListItems.Count
                    .ListItems(Compteur).ListSubItems.Add , "B" & cellule, Range("B" & cellule)
                    .ListItems(Compteur).ListSubItems.Add , "C" & cellule, Range("C" & cellule)
                    .ListItems(Compteur).ListSubItems.Add , "D" & cellule, Range("D" & cellule)
                    .ListItems(Compteur).ListSubItems.Add , "E" & cellule, Range("E" & cellule)
                End If

        Next cellule

    End With

End Sub

Lorsque je veux modifier une ligne de lv2, j'utilise le code suivant:

Private Sub CmdValModifCotis_Click()

Dim i As Byte, L As Long
Application.ScreenUpdating = False

L = Usf1.Lv2.SelectedItem.Index + 2

Sheets("Feuil2").Activate
Range("A" & L).Value = TextBox1.Value
Range("B" & L).Value = TextBox2.Value
Range("C" & L).Value = TextBox3.Value
Range("D" & L).Value = TextBox4.Value
Range("E" & L).Value = TextBox5.Value

Me.Hide

Call Usf1.lv1_ini
Call Usf1.Remplir_Liste(TextBox2.Text)

End Sub

Mais bien sûr ça ne marche pas puisque les numéros de ligne dans la listview et ceux d'excel ne correspondent plus une fois le listview filtrer.

Je pense qu'il faudrait que la modification se fasse en fonction de la valeur dans la première colonne sachant que celle-ci est unique pour chaque ligne mais je ne sais pas comment faire.

Je vous remercie de l'aide que vous pourrez m'apporter.

Bonjour

Je vois dans le code que tu inscris une clé qui représente l'adresse de la ligne

.ListItems.Add , "A" & cellule, Range("A" & cellule)

Quand tu veux faire une modification utilises cette clé

L = Mid(Usf1.Lv2.SelectedItem.Key),2)

Tu auras le numéro de la ligne

Bonjour Banzai64,

Tout d'abord, merci de vous être penché sur mon problème. Mais j'ai le message d'erreur suivant "Erreur de compilation: Attendu : fin d'instruction".

J'ai pourtant recopié le code suivant

L = Mid(Usf1.Lv2.SelectedItem.Key),2)

à la place de

L = Usf1.Lv2.SelectedItem.Index + 2

Savez-vous où j'ai pu me tromper ?

Merci

Bonjour

Désolé c'est de ma faute

J'ai écris cela de mémoire et comme je n'avais pas de fichier pour tester

Une parenthèse de trop

L = Mid(Usf1.Lv2.SelectedItem.Key,2)

Même si Mid retourne une chaîne, elle sera transformée en nombre (tu as typé L en Long)

Merci beaucoup

ça marche impeccable.

Entre temps, j'avais essayé ça et ça marchait aussi (piqué sur un autre post où vous étiez aussi intervenu):

Dim i As Integer, L As Long
Application.ScreenUpdating = False

i = Usf1.Lv2.SelectedItem.Index
L = Mid(Usf1.Lv2.ListItems(i).Key, 2)

Pour ce qui est de typer L en Long, je ne sais pas si c'est bien ou pas, j'avoue que je n'y connais pas grand chose.

En tout cas, merci beaucoup pour vos réponses éclairées.

Cordialement

Rechercher des sujets similaires à "modification listview filtree"