Supprimer les lignes si le contenu de la cellule n'est pas dans une plage

Bonjour,

J'ai trouvé de nombreuses macros fonctionnelles lorsqu'il s'agit de supprimer les lignes lorsque qu'elle est vide ou qu'elle est > ou < ou <> ou = à un chiffre ou une expression.

Toutefois je n'en ai trouvé ni même réussi à adapter une existante pour qu'elle supprime les lignes si le contenu de la cellule n'est pas dans une plage de données.

Admettons en Feuil1 j'ai une ligne de la colonne A à G par exemple, il faut supprimer dans la colonne A toutes les lignes qui ne correspondent à aucune valeur présentes dans la plage B2:B16 dans la Feuil2.

Est ce possible ou pas du tout ?

Si je m'oriente vers cette solution c'est parce que la liste est variable et non fixe donc impossible à mettre en brut dans une macro.

Merci d'avance pour vos pistes.

Bonjour Excel lent, çà dépend comment on s'y prend !

Comment faut-il comprendre "la liste est variable" ? Une plage nommée conviendrait-elle ? La Plage de la feuille 2 est-elle sur une seule colonne ?
Le contrôle est-il sur la valeur dans la colonne A seulement ? Et dans ce cas, faut-il supprimer toute la ligne ou seulement les cellules de A à G ?
Le plus simple, comme il est dit dans la charte du forum
est de fournir un petit fichier en exemple, avec ce que vous avez ... et ce que vous souhaitez en résultat.
Et pour répondre sans attendre à votre question, oui, c'est possible

Une proposition avec la feuille des valeurs à contrôler "Feuil1", la feuille avec les valeurs de référence "Feuil2", la plage nommée "PLAGE_REFERENCE" qui fait actuellement référence à D1:D10. La feuille "Feuil1 sav" pour relancer le test en copiant les valeurs dans "Feuil1".

La macro "SupprimerLigne" pointe sur "Feuil1".
Le code

Sub SupprimerLigne()
Dim i As Integer, j As Integer, k As Integer
Dim DerLigne As Integer
Dim Fin As Boolean

    With Sheets("Feuil1")
        ' dernière ligne en colonne A
        DerLigne = .Cells(Rows.Count, 1).End(xlUp).Row ' colonne 1
        i = 2 'on suppose qu'il y a une ligne en-tête
        Fin = False
        While Not Fin
            If IsError(Application.VLookup(.Range("A" & i), Range("PLAGE_REFERENCE"), 1, False)) Then
                'on supprime colonne A à G
                 .Range("A" & i & ":G" & i).Delete Shift:=xlUp
                 DerLigne = DerLigne - 1
            Else
                i = i + 1
            End If
            If i > DerLigne Then Fin = True
        Wend
    End With

End Sub

Oh merci beaucoup désolé pour le fichier source j'y penserais la prochaine fois promis !!

C'est exactement ce que je recherchais ! Je vous remercie pour votre solution. Je vais l'étudier de ce pas :)

Rechercher des sujets similaires à "supprimer lignes contenu pas plage"