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
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 SubBonjour,
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.