J'ai réussi à appliquer un code qui supprime une ligne sélectionnée d'une listview.
VB:
Private Sub CommandButton2_Click()
Dim Nbligne As Integer
If Me.ListView1.ListItems.Count = 0 Then
Exit Sub
Else
Nbligne = Me.ListView1.SelectedItem.Index
Maligne = Nbligne + 1
' Me.CommandButton1.Locked = False
' Me.CommandButton2.Locked = False
End If
If MsgBox("Voulez-vous valider cette opération?", vbYesNo, "Validation") = vbYes Then
Sheets("Annuaire").Rows(Maligne).EntireRow.Delete
MsgBox ("La ligne a été supprimée avec succés")
Unload Me
UsfListView.Show
End If
Mon problème est que la suppression se fait même en ne sélectionnant aucune ligne le bouton est actif et supprime une ligne que je n'ai pas sélectionnée.
quand je sélectionne une ligne et que je valide la suppression cela fonctionne parfaitement mais quand je ne sélectionne aucune ligne et que je valide cela supprime une ligne que je ne connais pas laquelle
Normalement, il doit bloquer et me dire "Attention il faut sélectionner la ligne à supprimer"
De mémoire dans une listview la première ligne est toujours considérée comme sélectionnée à l'ouverture
donc la ligne supprimée doit être la ligne 1 !!!!
Essaye de rajouter à la fin de l'ouverture de ta listview
VB:
ListView1.ListItems(1).Selected = False
et, teste de nouveau pour voir si une ligne dans ta feuille disparaît
Par contre quand tu supprimes une ligne comme tu le fais dans la feuille, il faudra en cas de suppression ou recharger la listview pour prendre en compte le changement ou supprimer la ligne aussi dans la listview!!
a+
Papou
Lors du chargement ou de la suppression de lignes dans une listview
comme le dit Papou :
la première ligne est automatiquement sélectionnée
j'utilise donc ceci en fin de procédure
Ex:
VB:
ListView1.ListItems(1).Selected = False 'on désélectionne la première ligne de la ListView
ListView1.SelectedItem = Nothing
Bonjour @Lone-wolf
Vous avez raison pour le titre . J'ai exécuté ton conseil, j'ai éliminé le IF, le problème persiste toujours
VB:
Private Sub CommandButton2_Click()
Dim Nbligne As Integer
'If Me.ListView1.ListItems.Count = 0 Then
'Exit Sub
'Else
ListView1.ListItems.Remove (ListView1.SelectedItem.Index)
Nbligne = Me.ListView1.SelectedItem.Index
Maligne = Nbligne + 1
' Me.CommandButton1.Locked = False
' Me.CommandButton2.Locked = False
'End If
If MsgBox("Voulez-vous valider cette opération?", vbYesNo, "Validation") = vbYes Then
Sheets("Annuaire").Rows(Maligne).EntireRow.Delete
MsgBox ("La ligne a été supprimée avec succés")
Unload Me
UsfListView.Show
End If
End Sub
De mémoire dans une listview la première ligne est toujours considérée comme sélectionnée à l'ouverture
donc la ligne supprimée doit être la ligne 1 !!!!
Essaye de rajouter à la fin de l'ouverture de ta listview
VB:
ListView1.ListItems(1).Selected = False
et, teste de nouveau pour voir si une ligne dans ta feuille disparaît
Par contre quand tu supprimes une ligne comme tu le fais dans la feuille, il faudra en cas de suppression ou recharger la listview pour prendre en compte le changement ou supprimer la ligne aussi dans la listview!!
a+
Papou
Merci @Paritec Merci @ChTi160
ou faut-il placer ton code dans le code suivant?
VB:
Private Sub CommandButton2_Click()
Dim Nbligne As Integer
If Me.ListView1.ListItems.Count = 0 Then
Exit Sub
Else
Nbligne = Me.ListView1.SelectedItem.Index
Maligne = Nbligne + 1
' Me.CommandButton1.Locked = False
' Me.CommandButton2.Locked = False
End If
If MsgBox("Voulez-vous valider cette opération?", vbYesNo, "Validation") = vbYes Then
Sheets("Annuaire").Rows(Maligne).EntireRow.Delete
MsgBox ("La ligne a été supprimée avec succés")
Unload Me
UsfListView.Show
End If
End Sub
Re Tous
on t'a expliqué que le code il faut le rajouter au chargement de la listview
tu ne joins pas ton fichier donc cherche ou est initialisé ta listview!!!!
elle est dans un userform? sur une feuille? comment veux-tu que l'on devine??
Une seule certitude c'est pas dans ton CommandButton2_Click() cela c'est certain.
a+
Papou
Re Tous
on t'a expliqué que le code il faut le rajouter au chargement de la listview
tu ne joins pas ton fichier donc cherche ou est initialisé ta listview!!!!
elle est dans un userform? sur une feuille? comment veux-tu que l'on devine??
Une seule certitude c'est pas dans ton CommandButton2_Click() cela c'est certain.
a+
Papou
Re @Paritec
J'ai appliqué dans la fin du chargement du listview mais ça beug au niveau de ligne de la procédure du bouton CommandButton2_Click()au niveau de la ligne
VB:
Nbligne = Me.ListView1.SelectedItem.Index
Je pense parce que on a désactivé la sélection de la première ligne de la listview
Merci
Re adilprodigy le forum
bah oui c'est complètement normal, c'est ce que l'on voulait faire, ne plus avoir de ligne sélectionnée.
Maintenant il faut faire un test sur le Commandbutton2 et justement si pas de ligne sélectionnée, ou un message, ou purement et simplement exit sub, le but est bien de ne plus rien effacer involontairement !!!!
a+
Papou
Re adilprodigy le forum
bah oui c'est complètement normal, c'est ce que l'on voulait faire, ne plus avoir de ligne sélectionnée.
Maintenant il faut faire un test sur le Commandbutton2 et justement si pas de ligne sélectionnée, ou un message, ou purement et simplement exit sub, le but est bien de ne plus rien effacer involontairement !!!!
a+
Papou
Comme je l'avais dit à adilprodigy dans un autre fil, le contrôle ListView a une portabilité défaillante.
Dans mon exemple*, la première ligne n'est activée que si on le demande .
En le téléchargeant, quelqu'un constate-t-il autre chose avec sa version (Excel, OCX ...) ? Merci pour toute réponse.
* dans celui-ci, la suppression d'une ligne n'est pas appelée par un bouton supplémentaire.