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

XL 2013 Supprimer une ligne d'une feuille de calcul via la sélection dans une listbox

amaurylrbt

XLDnaute Nouveau
Bonjour à tous ! J'ai besoin d'aide...
Je suis sur un gros fichier pour le travail que je ne peux pas poster ici sur lequel se trouve un grand nombre de données,
je souhaite via une listbox dans un userform pouvoir supprimer dans la feuille de calcul la ligne sélectionner dans ma listbox. (Je ne sais pas si je suis très clair...).
Cependant après avoir regarder tout internet depuis deux jours je ne trouve pas la solution...
Je vous laisse mon code pour supprimer en espérant que vous pourrais m'aider.
Merci d'avance.


Private Sub CommandButtonSupprimer_Click()
Dim i As Integer
For i = 1 To Sheets("data").Range("A100000").End(xlUp).Row
If Sheets("data").Cells(i, 1) = prosDS.List(prosDS.ListIndex) Then
Worksheets("data").Range("A1:Y1").Rows(i).Select
Selection.delete
End If
Next i
End Sub
 

amaurylrbt

XLDnaute Nouveau
Voilà :

j'ai : la méthode select de la classe range a échoué

Private Sub CommandButtonSupprimer_Click()
Dim i As Long
For i = 1 To Sheets("data").Range("A100000").End(xlUp).Row
If Sheets("data").Cells(i, 1) = prosDS.List(prosDS.ListIndex) Then
Worksheets("data").Range("A1:Y1").Rows(i).Select
Selection.delete
End If
Next i
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Si j'étais moi, et qu'inexplicablement me prendrait l'envie de passer par un userform pour supprimer une ligne, je m'autoriserai à procéder de la sorte
Je viens de le faire pour valider le code VBA ci-dessous
VB:
Private Sub UserForm_Initialize()
Set f = Sheets(1)
ListBox1.List = Range(f.Cells(2, 1), f.Cells(Rows.Count, 1).End(3)).Value
End Sub
Private Sub ListBox1_Click()
Dim dl&
dl = Cells(Rows.Count, 1).End(3).Row
Ligne = CStr(ListBox1.Value)
Application.ScreenUpdating = False
Range("B2:B" & dl).FormulaR1C1 = "=IF(RC[-1]=" & Ligne & ",""$$$"",0)"
Columns("B:B").SpecialCells(xlCellTypeFormulas, 2).EntireRow.Delete
Columns("B:B").Delete
Application.ScreenUpdating = True
End Sub

Pour tester, ouvrir Excel et dans une feuille vierge, saisir quelques valeurs dans la colonne A en y insérant des doublons puis afficher l'userform et cliquer sur la listbox pour supprimer toutes les lignes dont la valeur en colonne A est égale à la valeur de la ListBox1

PS:Test OK sur Excel 2003
 

amaurylrbt

XLDnaute Nouveau
Je suis désolé mais je suis tout jeune sur vba et là j'ai vraiment pas compris et je crois que je suis mal exprimé,
ma listbox elle est connecté à un filtre :

Public Sub CommandButtonAfficher_Click()
On Error GoTo gestionerreur: 'On déclenche la gestion des erreurs
Feuil1.Range("AA4").Value = ComboBox1.Value 'On affecte le contenue de la comboox
Feuil1.Range("AA5").Value = TextBox1.Value 'On affecte le contenue de la listbox
Call Filtrer 'Lance la macro du même nom
'Supprimer les lignes vide

Set f = Sheets("data")
Tbl1 = f.Range("AC5:BA" & f.[BA65000].End(xlUp).Row).Value
n = 0
For i = 1 To UBound(Tbl1)
If Tbl1(i, 1) <> "" Then n = n + 1
Next i
j = 0
Dim Tbl2: ReDim Tbl2(1 To n, 1 To UBound(Tbl1, 2))
For i = 1 To UBound(Tbl1)
If Tbl1(i, 1) <> "" Then j = j + 1: For k = 1 To UBound(Tbl1, 2): Tbl2(j, k) = Tbl1(i, k): Next k
Next i
Me.prosDS.List = Tbl2

txtTotal.Value = Feuil1.Range("AC6").Value
Exit Sub
gestionerreur:
CreateObject("WScript.Shell").Run "mshta.exe vbscript:close(CreateObject(""WScript.Shell"").Popup(""Résultat"",1,""Real%20Time%20Status%20Message""))"

End Sub


Sub Filtrer()
'Procédure permettant de filtrer les données à partir de la zone de critère
Feuil1.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Feuil1.Range("AA4:AA5"), CopyToRange:=Feuil1.Range("AC4:BA4"), Unique:=False

End Sub


du coup le but c'est de ne plus du tout accéder à la feuil de calcul on ajoute modifie, filtre, et trie tout via le userform mais il n'y a que ma touche supprimer qui ne fonctionne pas.
Je n'ai malheureusement pas bien cmpris le code que tu 'a envoyé donc je n'ai pas réussi à l'utiliser mais merci pour ton implication.
 

Staple1600

XLDnaute Barbatruc
Re,

Comme expliqué précédemment...
Il fallait tester le code sur un classeur vierge (ou si tu tu préfères un nouveau classeur)
Classeur qui sert juste à illustrer le fonctionnement de ma proposition VBA.

Donc dans un nouveau classeur, inseréer un userform, sur cet userform mettre une ListBox
Pour te simplifier la tâche, lance ensuite cette petite macro
VB:
Sub pour_faire_le_test()
[A1] = "ENTETE": [A2:A57] = "=MOD(ROW()-1,5)": [A2:A57] = [A2:A57].Value
End Sub
Ensuite affiche l'userform, et clique sur une valeur dans la ListBox

PS: Ces macros sont simplement illustratives d'une manière de faire ce qu'indique le titre de ta question.

NB: En refaisant le test, je me suis aperçu d'un petit inconvénient que je te laisse découvrir.
 

Discussions similaires

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