Supprimer les ligne si active

Bonjour Bonjour

J'ai besoin d'aide

je souhaite Supprimer les lignes du tableau tableau47 si la colonne 'ACTIVATION' est égale à “ACTIVE”.

Cordialement...

Bonjour,

Je n'ai pas trouvé le tableau47 ni la colonne ACTIVATION

Bonjour fcyspm30,

Merci pour votre réponse rapide J’ai fait une petite confusion.

J'ai oublié un détail je souhaite faire cette tache avec VBA...

Cordialement

...

Re bonjour

Voila un essai.

Merci fcyspm30,

La macro fait le boulot mais pas assez rapide pour permettre au programme de passer les ordres à temps.

Je veux une procédure plus speed parce que j'ai une très longue liste de données à supprimer est-il possible d'avoir un code qui supprime tout d'un coup en moins de 02 secondes ?

Désolé je ne sais pas mieux faire.

Bonsoir à tous,

Avec le filtre :

Sub testDelete()
  Application.ScreenUpdating = False
  With Sheets("PARAMETRE").Range("L32:DK160")
    .AutoFilter 104, "ACTIVE"
    .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
    .AutoFilter
  End With
  Application.ScreenUpdating = True
End Sub

Pour le calcul, passe en mode manuel vu que tu as beaucoup de formules.

klin89

Bonjour à tous,

Une proposition assez similaire à Klin89 mais à partir d'un tableau structuré nommé Tableau47...

A tester...

Sub SupprActive()
 Dim plage As Range
  Application.ScreenUpdating = False
   Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
     With Sheets("PARAMETRE")
      If .ListObjects("Tableau47").DataBodyRange Is Nothing Then Exit Sub
       If .ListObjects("Tableau47").ShowAutoFilter Then .ListObjects("Tableau47").AutoFilter.ShowAllData
       .Range("Tableau47").AutoFilter Range("Tableau47").ListObject.ListColumns("ACTIVATION").Index, "ACTIVE"
         On Error Resume Next
          Set plage = Range("Tableau47").SpecialCells(xlCellTypeVisible)
           If Err = 0 Then
            Range("Tableau47").ListObject.DataBodyRange.Delete
           End If
         On Error GoTo 0
        Range("Tableau47").ListObject.AutoFilter.ShowAllData
     End With
   Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic
 Application.DisplayAlerts = True
End Sub
6linsonn.zip (768.04 Ko)

Cordialement,

Bonsoir,

xorsankukai ta macro va très vite. Te serait-il possible de la commenter? Notamment les lignes entre With End With.

Bonjour xorsankukai,

Le code est génial... Il apporte une solution 1000 fois mieux que ce j'attendais .

Sincèrement tu es très bon.

Bonjour à tous,


fcyspm30 : xorsankukai ta macro va très vite. Te serait-il possible de la commenter?

Sub SupprActive()
 Dim plage As Range
  Application.ScreenUpdating = False  'désactive le rafraichissement de l'écran
   Application.Calculation = xlCalculationManual 'passe le calcul en mode manuel
    Application.DisplayAlerts = False 'désactive les messages d'alerte
     With Sheets("PARAMETRE") 'agit sur cette feuille uniquement
      'si le tableau ne contient aucune donnée, on quitte la procédure
      If .ListObjects("Tableau47").DataBodyRange Is Nothing Then Exit Sub
       ' si le tableau est déjà filtré, on enlève le(s) filtre(s)
       If .ListObjects("Tableau47").ShowAutoFilter Then .ListObjects("Tableau47").AutoFilter.ShowAllData
        'on filtre le tableau sur la colonne ACTVATION avec ACTIVE comme critère
       .Range("Tableau47").AutoFilter Range("Tableau47").ListObject.ListColumns("ACTIVATION").Index, "ACTIVE"
         On Error Resume Next 'si une erreur est générée, on l'ignore
          'définit plage qui contient le résultat du filtre (les cellules visibles après filtre)
          Set plage = Range("Tableau47").SpecialCells(xlCellTypeVisible)
           If Err = 0 Then 'si aucune erreur, donc si il y a des lignes filtrées
            'on efface les données filtrées
            Range("Tableau47").ListObject.DataBodyRange.Delete
           End If
         On Error GoTo 0 'réinitialise la gestion des erreurs
        Range("Tableau47").ListObject.AutoFilter.ShowAllData 'enlève le(s) filtre(s)
     End With
   Application.ScreenUpdating = True 'réactive le rafraichissement de l'écran
  Application.Calculation = xlCalculationAutomatic 'repasse le calcul en automatique
 Application.DisplayAlerts = True 'réactive les messages d'alerte
End Sub

L'utilisation du filtre permet d'éviter de boucler sur chaque ligne et donc de diminuer considérablement le temps d’exécution.

Sinon, il faudrait utiliser des variables tableaux pour travailler en mémoire....mais plus compliqué à mettre en œuvre.


@LINSONN : merci pour ce retour, , j'essaie simplement d' appliquer les enseignements du forum,

Il ne faut pas hésiter à tester, on peut toujours compter sur les pros du forum pour corriger nos erreurs et nous aider à progresser.


Bonne continuation,

Cordialement,

Bonsoir,
Je te remercie, ça semble tellement simple avec les commentaires.

Rechercher des sujets similaires à "supprimer ligne active"