XL 2010 Supprimer une ligne dans une listview

TheProdigy

XLDnaute Impliqué
Bonjour tout le monde,

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"

Merci de m'aider
 

Lone-wolf

XLDnaute Barbatruc
Bonjour adil

Regarde dans les discussions similaires. Sinon supprime le If End If

ListView1.ListItems.Remove (ListView1.SelectedItem.Index)

Nbligne = Me.ListView1.SelectedItem.Index
Maligne = Nbligne + 1

Et ton titre c'est: supprimer une ligne dans une feuille avec listview.
 
Dernière édition:

Paritec

XLDnaute Barbatruc
Bonjour à tous
que je valide cela supprime une ligne que je ne connais pas laquelle
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:)
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour adilprodigy
Lone-wolf , 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
Bonne journée
Jean marie
 

TheProdigy

XLDnaute Impliqué
Bonjour adil

Regarde dans les discussions similaires. Sinon supprime le If End If

ListView1.ListItems.Remove (ListView1.SelectedItem.Index)

Nbligne = Me.ListView1.SelectedItem.Index
Maligne = Nbligne + 1

Et ton titre c'est: supprimer une ligne dans une feuille avec listview.
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

Merci
 
Dernière édition:

TheProdigy

XLDnaute Impliqué
Bonjour à tous

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

Merci
 

Paritec

XLDnaute Barbatruc
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:)
 

TheProdigy

XLDnaute Impliqué
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 compris maintenant. Je vais tester et je reviens vers toi.
Merci
 

TheProdigy

XLDnaute Impliqué
Re @Paritec
J'ai compris maintenant. Je vais tester et je reviens vers toi.
Merci
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
 

Paritec

XLDnaute Barbatruc
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:)
 

Si...

XLDnaute Barbatruc
Bon_jour
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
o_O:(:cool:

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.


edit : avec le bon fichier
 

Pièces jointes

  • ListView (UsF).xlsm
    25.8 KB · Affichages: 89
Dernière édition:

Discussions similaires