XL 2016 MACRO suppression ligne sous condition

Bnj

XLDnaute Junior
Bonjour,

J'ai cherché dans le forum car de nombreux posts existent sur le sujet mais aucun ne correspondent à mon cas.
J'ai tenté de rebondir sur quelques posts existants mais cela ne fonctionne pas
Ma recherche est la suivante :
Je possède un tableau (en format tableau) avec de nombreuses lignes (~9000) , je recherche à créer une macro qui supprime une ligne si une cellule (colonne "BM") contient "poste temporaire à supprimer à la bascule"

J'ai tenté une macro mais : debogage !
Sub Filter()

With Sheets("GEST").UsedRange
.AutoFilter
.AutoFilter Field:=65, Criteria1:="=oui"
.Offset(1).SpecialCells(xlCellTypeVisible).Delete
.AutoFilter
End With
End Sub

Si vous pouviez m'aider et m'expliquer, ce serait sympa

MErci
 

Fichiers joints

phlaurent55

XLDnaute Barbatruc
Bonjour Bnj,

essaie ce code:

Code:
Sub Filter()
For i = Range("BM65535").End(xlUp).Row To 4 Step -1
If Cells(i, 65) = "poste temporaire à supprimer à la bascule" Then Rows(i).Delete
Next i
End Sub
à+
Philippe
 

Si...

XLDnaute Barbatruc
Bon_jour
c'est la plage à filtrer With Sheets("GEST").UsedRange et le critère "oui" qui ne conviennent pas.
Ceci passera mieux
VB:
Sub Filter()
  With [gest_soff]
    .AutoFilter Field:=65, Criteria1:="=poste*" 'commence par le mot poste
    .SpecialCells(xlCellTypeVisible).Delete
    .AutoFilter
  End With
End Sub
Un exemple plus élaboré* avec le tableau nommé gest_soff et la colonne X (24) qui induit le message
VB:
 Application.ScreenUpdating = 0: Application.DisplayAlerts = 0 'à supprimer si pas nécessaire
  Application.Calculation = xlCalculationManual 'plus rapide si de nombreuses formules
  On Error Resume Next 'pas de correspondance
  With [gest_soff]
  .AutoFilter 24, "b*": .SpecialCells(12).Delete: .AutoFilter
  End With
  Application.Calculation = xlCalculationAutomatic
End sub
*on peut aussi passer par un tableau VBA pour gagner en rapidité si nécessaire
 

job75

XLDnaute Barbatruc
Re,

Bien que le fichier soit quelque peu bordélique j'ai testé cette macro sur 9000 lignes :
Code:
Sub Supprimer()
Dim t#, f$, n&
t = Timer
Application.ScreenUpdating = False
With Sheets("GEST").ListObjects(1).DataBodyRange
    f = .Cells(1, 65).Formula 'mémorise la formule
    .Columns(65) = .Columns(65).Value 'supprime les formules
    .Sort .Columns(65), Header:=xlYes 'tri pour regrouper et accélérer
    On Error Resume Next 'si aucune SpecialCell
    With .Columns(65).SpecialCells(xlCellTypeConstants).EntireRow
        n = .Rows.Count
        .Delete 'supprime les textes
    End With
    .Cells(1, 65) = f 'restitue les formules
End With
Application.ScreenUpdating = True
MsgBox "Suppression de " & n & " lignes en " & Format(Timer - t, "0.00 \s") 'facultatif, pour tester
End Sub
4500 lignes sont supprimées chez moi en 10 secondes.

Fichier joint.

A+
 

Fichiers joints

Pabloc

XLDnaute Nouveau
Bonjour,

Je me permet de réactiver le sujet, j'ai essayé pas mal de chose sur mon projet, mais le fait que je n'y arrive pas...

La petite précision presque habituelle : VBA =JE SUIS NUL!

J'essaie donc de faire une macro, qui quand je clique sur le bouton "EFFACER", elle me supprime les taches effectuées. voila l'explication, pour gagner du temps je met un fichier en PJ, je pense que ce sera plus clair que toute explication!

D'avance merci pour votre aide.
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Pabloc

Pabloc: Pas glop ;)
L'usage c'est de créer sa propre discussion pour poser sa question.
Ca permets de ne pas se mélanger les pinceaux
(et évite de développer un syndrome du coucou trop prononcé)
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas