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 SubLorsque 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 SubMais 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 + 2Savez-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