Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Suppression ligne sur listbox

Guithou

XLDnaute Nouveau
Bonjour à tous,

Voilà je souhaiterai pouvoir supprimer dans mon petit logiciel, que je suis entrain de faire, une ligne d'une listbox et retirer les informations sélectionnées de la feuille excel concernée.
J'ai essayé plusieurs formules, mais sans résultat.
Quelqu'un pourrai me venir en aide svp...
Ci-joint le fichier, et cela ce trouve dans prêt matériel.

Cordialement,

Guillaume
 

Pièces jointes

  • GPMI v2.0.xlsm
    420.7 KB · Affichages: 67

youky(BJ)

XLDnaute Barbatruc
Hello,
A tester ceci
VB:
Private Sub CommandButton7_Click()
'Supprimer une donnée d'une feuille à partir de la listbox, le 04/01/2017 par Guillaume
If ListBox1 = "" Then Exit Sub
I = ListBox1.ListIndex + 2 '+2 car listindex commence à zéro et plus ligne entête
If MsgBox("Voulez-vous supprimer l'article " & Me.ListBox1 & " ?", _
vbQuestion + vbYesNo) <> vbYes Then Exit Sub
Sheets("mat").Rows(I).Delete
UserForm01.CommandButton15 = True
End Sub
runo
 

Guithou

XLDnaute Nouveau
Salut Runo,

Merci pour ton message et pour ton code.
Mais ce code m'efface toute la ligne.
Hors je souhaiterai supprimer seulement les données sélectionnées dans listbox et supprimer celle-ci de la feuil excel. Et non toute la ligne.
 

youky(BJ)

XLDnaute Barbatruc
C'est parti un peu trop vite Hihi....
Quand on comprend mieux la demande c'est mieux
Voici
VB:
Private Sub CommandButton7_Click()
'Supprimer une donnée d'une feuille à partir de la listbox, le 04/01/2017 par Guillaume
If ListBox1 = "" Then Exit Sub
I = (ListBox1.ListIndex * 3) + 2
If MsgBox("Voulez-vous supprimer l'article " & Me.ListBox1 & " ?", _
vbQuestion + vbYesNo) <> vbYes Then Exit Sub
With Sheets("mat")
lig = Application.Match(TextBox1, .[A1:A65000], 0)
If IsNumeric(lig) Then
.Range(.Cells(lig, I), .Cells(lig, 253)).Value = .Range(.Cells(lig, I + 3), .Cells(lig, 256)).Value
End If
End With
UserForm01.CommandButton15 = True
End Sub
Le code décale de 3 colonnes le restant de la ligne pour éviter des vides
Bruno
 

Guithou

XLDnaute Nouveau
Bonjour Bruno,

Merci pour ton cade, ça marche nickel, c'est exactement ce que je souhaitais.
C'est vrai que je n'avais pas assez expliqué avant lol.
Par contre peux-tu mettre des explication à ton code, afin que je puisse le comprendre et apprendre en même temps stp?

Cordialement,
 

youky(BJ)

XLDnaute Barbatruc
C'est très bien de pousser le bouchon un peu plus loin..........
C'est avec plaisir que je donne ces explications
Avec qlq subtilités on arrive souvent au but recherché
je dois connaitre le N° de colonne qui sera supprimé (la 1ère sur les 3 colonnes)
I = (ListBox1.ListIndex * 3) + 2
pourquoi ........*3)+2
si on choisit le 1er élément de la list Listindex renvoie 0
donc (0*3)+2 fait colonne 2
si on choisit le 2ème élément de la list Listindex renvoie 1
donc (1*3)+2 fait colonne 5
si on choisit le 2ème élément de la list Listindex renvoie 2
donc (2*3)+2 fait colonne 8 et ainsi de suite

Pour trouver la ligne de la commande
lig = Application.Match(TextBox1, .[A1:A65000], 0)
ceci renvoie le N° de ligne (on cherche la valeur du textbox en A1:A65000
Note le point avant [A1:A65000] qui indique que l'on affaire à With Sheets("mat")
If IsNumeric(lig) Then
Si lig renvoie une erreur c'est pas trouvé
On pourrait aussi mettre
If Not IsNumeric(lig) Then Msgbox "pas trouvé":exit sub

.Range(.Cells(lig, I), .Cells(lig, 253)).Value = .Range(.Cells(lig, I + 3), .Cells(lig, 256)).Value
on copie que les valeurs des colonnes I+3 à 256 en I à 253 de la ligne lig
pourquoi 253 et 256 >>>pour avoir le même nombre de valeurs
J'ai mis 256 car la version Excel2003 a 256 colonnes maxi
Si version Excel supérieur on peut augmenter et passer à 1000 et 997 sans soucis
Pour l'instant cela limite à 85 articles en commandes
Bruno
 

Guithou

XLDnaute Nouveau
Bonjour Bruno,

Toujours sur le même projet, à partir de ton code, j'ai essayé de la modifier, pour pouvoir modifier les données de la listbox, à partir de mon userform 06.
Malheureusement cela ne fonctionne pas.
Voici le code modifié:
If Userform01.ListBox1 = "" Then Exit Sub
I = (Userform01.ListBox1.ListIndex * 3) + 2
If MsgBox("Voulez-vous supprimer l'article " & Userform01.ListBox1 & " ?", _
vbQuestion + vbYesNo) <> vbYes Then Exit Sub
With Sheets("mat")
lig = Application.Match(TextBox1, .[A1:A65000], 0)
If IsNumeric(lig) Then
.Range(.Cells(lig, I), .Cells(lig, 253)).Value = Textbox15.value
End If
End With

Pourrais-tu de nouveau me donner un coup de main stp.

Cordialement,
 

youky(BJ)

XLDnaute Barbatruc
Voici le code du bouton de l'UserForm06 (Modifier)
VB:
Private Sub CommandButton6_Click()
'Modifier une donnée d'une feuille à partir de la listbox, le 04/01/2017 par Guillaume
If TextBox14 = "" Then Exit Sub
I = (UserForm01.ListBox1.ListIndex * 3) + 2
If MsgBox("Voulez-vous Modifier l'article " & UserForm01.ListBox1 & " ?", _
vbQuestion + vbYesNo) <> vbYes Then Exit Sub
With Sheets("mat")
lig = Application.Match(UserForm01.TextBox1, .[A1:A65000], 0)
If IsNumeric(lig) Then
.Cells(lig, I) = TextBox14: .Cells(lig, I + 1) = TextBox15: .Cells(lig, I + 2) = TextBox16
End If
End With
With UserForm01
lig = .ListBox1.ListIndex
.ListBox1.List(lig, 0) = TextBox14
.ListBox1.List(lig, 1) = TextBox15
.ListBox1.List(lig, 2) = TextBox16
End With
Unload UserForm06
End Sub
Voir fichier si besoin
Bruno
 

Pièces jointes

  • GPMI v2.0 (3).xlsm
    373 KB · Affichages: 71

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…