Supprimer des lignes dans une liste à certaine conditions

Bonjour à tous,

Je me tourne vers le forum après avoir essayé sans résultat de créer une macro en VBA. Je suis peu expérimenter en VBA donc j'ai fait comme je pouvais en fonction de ce que j'ai trouvé comme info sur le web.

Mon problème est le suivant, j'extrait un liste formatée d'une base de donnée et je dois supprimer toutes les lignes inutiles sur l'ensemble des sheets du workbook. Le nombre de sheet ainsi que le nombre de colonnes et de lignes par sheet étant variable.

Cette liste se présente de la façon suivante:

  • colonne A = liste des codes option
  • colonne(s) B (à ... ) = différentes version(s) de l'article vendu
  • Dernière colone = status
23classeur3.xlsx (116.22 Ko)

Pour chaque code option j'ai plusieur lignes contenant des symboles indiquant dans quels cas elle est standard ou optionnelle sur l'article vendu. Ce qui crée des cellules vides entre les codes dans la colonne A.

Je voudrais créer une macro qui vérifie si le status du code option = "Valide".

Si oui, je souhaite conserver la ligne ainsi que toutes les lignes qui suivent et se rapportent au code.

Si non, je souhaite supprimer ces lignes.

J'avais imaginé créer des boucles imbriquées mais mon code n'a pas l'air de marcher.

Ce serait sympa si quelqu'un pouvait y jeter un oeil.

Bonne soirée

Robin

Sub Suppression_Code_unvalid()

Dim DerCell As Long
DerCell = Range("C" & Rows.Count).End(xlUp).Row

' Cherche les cellules non-vide dans la colonne A à partir de A20
Range("A20").Select

' Exécuter la macro jusqu'à atteindre la dernière ligne non vide de la colonne "C"

Do Until Range("B" & Rows.Count).End(xlUp).Row

    ' Début de If 1
    ' Si la cellule "A" est non-vide, alors on vérifie si la valeur de la ligne dans la colonne D = "Valide"
    If Not (IsEmpty(ActiveCell)) Then

        ' Début de If 2
        ' Si la valeur de "D" vaut "Valide" alors on cherche la cellule non-vide suivante dans la colonne A
        If ActiveCell.End(xlToRight).Select = Valide Then
        ActiveCell.End(xlToLeft).Select

            ' Parcourir les cellules vers le bas jusqu'à la cellule non-vide suivante
            Do While Not (IsEmpty(ActiveCell))
            ActiveCell.Offset(1, 0).Select
            Loop

        ' Sinon, retour à la colonne A
        ' Selectionner les cellules vers le bas jusqu'à la cellule non-vide suivante et les supprimer
        Else: ActiveCell.End(xlToLeft).Select

            Do While Not (IsEmpty(ActiveCell))
            Range(ActiveCell, ActiveCell.Offset(1, 0)).Select
            ActiveCell.EntireRow.Delete
            Loop

        ' fin de If 2
        End If

    Else

     Do While Not (IsEmpty(ActiveCell))
     ActiveCell.Offset(1, 0).Select
     Loop

    End If

Loop

End Sub

Bonjour

A tester

Bonjour,

Merci beaucoup Banzai64 ça fonctionne très bien pour le fichier que j'ai envoyé.

Par contre, impossible d'utiliser la macro avec un autre fichier du même format.

J'ai à chaque fois le MsgBox avec l'avertissement suivi du End Sub...

Un tuyaux sur la manière dont je pourrais solutionner ça?

Bonne journée à tous.


J'ai trouvé!

La colonne Status était mal nomée...

Encore un tout grand merci à toi Banzai64.

Rechercher des sujets similaires à "supprimer lignes liste certaine conditions"