suppression ligne sous condition

roni

XLDnaute Nouveau
Bonjour,

Je voudrai supprimer les lignes d'un tableau déjà trié par la colonne E avec comme condition 9 en colonne E et garder les autres lignes .

Merci d'avance
 

Staple1600

XLDnaute Barbatruc
Re, bonjour Lone-Wolf

@Lone-wolf
Plaisanteries mises à part, après avoir lu le code de job75, j'ai remisé le mien au placard ;)
Mais pour répondre à ta question, voici ma macro customisée à ton attention :)
NB: à tester sur le fichier joint par le demandeur (car macro basée sur la structure de celui-ci)
VB:
Sub MacroSpecialLoupSolitaire()
Dim Lig&, LASTEXIT2NOWHERE As Range
Lig = Cells(Rows.Count, 5).End(xlUp).Row - 1
Set LASTEXIT2NOWHERE = Cells(3, Columns.Count)
With LASTEXIT2NOWHERE
    .Resize(Lig - 1).FormulaR1C1 = "=IF(RC5=9,""Lone-Wolf"",0)"
    .SpecialCells(-4123, 2).EntireRow.Delete
    .ClearContents
End With
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re Jean Marie

@Staple1600

Dans le cas ou la personne veux choisir un nombre, sans aller modifier la macro. Moi j'ai essaié en mettant en nombre en M1, et dans la formule précédente R[1]C[8]. Je ne sais pas si on écrit comme ceci; et la macro me donne une erreur.

Edit: Merci pour avoir mis mon pseudo comme nom de macro. ;)

Réédit: j'ai trouvé. "=IF(RC5=R1C13,""Lone-Wolf"",0)"
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@Lone_Wolf
Je te laisse tester ;)
Tu lances la macro test1 ou test2
Code:
Sub test1()
'exemples de syntaxe : suppression en colonne 2, valeur par défaut: 9
preparation
LoupSolitaireVeutDuParamétrable "2"
End Sub
Sub test2()
'exemples de syntaxe : ici suppression en colonne 5 si 3
preparation
LoupSolitaireVeutDuParamétrable "5", "3"
End Sub

Private Sub LoupSolitaireVeutDuParamétrable(Colonne, Optional Valeur_Pour_Suppression As String = 9)
Dim Lig&, LASTEXIT2NOWHERE As Range
Lig = Cells(Rows.Count, 1).End(xlUp).Row - 1
Set LASTEXIT2NOWHERE = Cells(2, Columns.Count)
On Error Resume Next
With LASTEXIT2NOWHERE
    .Resize(Lig).FormulaR1C1 = _
        "=IF(RC" & Colonne & "=" & Valeur_Pour_Suppression & ",""Lone-Wolf"",0)"
    .SpecialCells(-4123, 2).EntireRow.Delete
    .CurrentRegion.ClearContents
End With
End Sub

Private Sub preparation()
Sheets.Add
Application.ScreenUpdating = False
[A1] = "ITEM1": [A1].AutoFill [A1:H1], 0
[A2:H81].FormulaR1C1 = "=MOD(ROW()*COLUMN(),9)+1"
[A2:H81].Value = [A2:H81].Value
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@Lone-wolf
Comme son nom l'indique, elle prépare le terrain, c'est à dire qu'elle créé des données pour test
Cela évite qu'éventuellement un jour peut-être un futur lecteur de ce fil qui testerai la seule macro nommée LoupSolitaireVeutDuParamétrable sur une feuille vide ou sur une feuille ne contenant pas de nombres vienne ici écrire:
"Staple1600: désolé mais ta macro ne marche pas"
;)
 

job75

XLDnaute Barbatruc
Bonjour roni, JM, Lone-wolf,

@ JM, avec ton code, si le tableau est très grand et non trié sur la colonne E, la suppression des lignes peut prendre beaucoup de temps.

Ici on accélère avec un tri pour regrouper les valeurs d'erreur en bas du tableau :
Code:
Sub Supprimer_9_colonne_E()
With Feuil1.UsedRange 'CodeName de la feuille
    If Application.CountIf(.Columns(5), 9) = 0 Then Exit Sub
    With .Columns(.Columns.Count + 1) 'colonne auxiliaire
        Application.ScreenUpdating = False
        If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
        .FormulaR1C1 = "=IF(RC5=9,1/0)"
        .Value = .Value 'supprime les formules
        .EntireRow.Sort .Cells, xlAscending, Header:=xlYes 'tri pour accélérer
        .SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
        .ClearContents
    End With
    With .Parent.UsedRange: End With 'actualise les barres de défilement
End With
End Sub
Fichier joint.

A
 

Pièces jointes

  • TEST(1).xls
    101 KB · Affichages: 20

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 195
Membres
103 153
dernier inscrit
SamirN