Supprimer des lignes en fonction d'éléménts d'une colonne

Bonjour

J'ai pas mal cherché mais je n'ai rien trouvé qui soit à ma portée.

J'ai une liste (colonne) avec des noms, ceux que je veux garder.

J'ai d'autres colonnes dont la première (A) correspond à plein d'autres noms.

Je cherche à écrire le code qui supprimera les lignes des noms qui ne font pas partie de ma liste.

J'ai ce code qui fonctionne bien:

Sub efface_les_autres_noms()

Dim cell As Range

Dim test As Integer

Dim i As Integer

dl = Range("AD65536").End(xlUp).Row

For i = dl To 2 Step -1

If (Cells(i, 1).Value = "NOM1àenlever") Or (Cells(i, 1).Value = "NOM2àenlever") Or (Cells(i, 1).Value = "NOM3àenlever") Then test = 1

If test = 1 Then Rows(i).Delete

test = 0

Next

End Sub

mais j'aurais aimé pouvoir gérer la liste de noms à enlever autrement (il y en a maintenant 50) et je suis sur qu'il y a plus optimisé

Par avance merci

Cdt

Charles

Bonjour Charles, bonjour le forum,

J'ai une liste (colonne) avec des noms, ceux que je veux garder.

Avec ce genre d'indication, difficile de t'aider... Je te propose un petit fichier exemple si tu souhaites obtenir de l'aide plus rapidement.

En pj un fichier d'exemple

La seconde feuille pour remettre les infos initiales après l’exécution de la macro.

J'ai une piste en passant par la fonction trouve mais je n'arrive pas à la transposer en vba avec ma boucle.

Merci

12test.xlsm (28.31 Ko)

Bonjour Charles, bonjour le forum,

En pièce jointe ton fichier modifié avec le code ci-dessous :

Sub Macro1()
Dim D As Worksheet 'déclare la variable D (onglet Data)
Dim D2 As Worksheet 'déclare la variable D2 (onglet Data (2))
Dim TV As Variant 'déclare la variable TV (Tableau ds Valeurs)
Dim TNG As Variant 'déclare la variable TNG (Tableau des Noms à Garder)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set D = Worksheets("DATA") 'définit l'onglet D
Set D2 = Worksheets("Data (2)") 'définit l'onglet D2
D2.Cells.ClearContents 'efface d'éventuelles anciennes valeurs dans l'onglet D2
TV = D.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
TNG = D.Range("G1").CurrentRegion 'définit le tableau des nom à garder TNG
K = 1 'initalise la variable K
For J = 2 To UBound(TNG, 1) 'boucle 1 : sur toutes les lignes J du tableau des noms à garder TNG (en partant de la seconde)
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If TV(I, 1) = TNG(J, 1) Then 'condition : si les deux valeurs sont égales
            ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau des lignes TL (autant de lignes que TV a de colonne, K colonnes)
            For L = 1 To UBound(TV, 2) 'boucle 3 : sur toutes les colonne L du tableau des valeur TV
                TL(L, K) = TV(I, L) 'récupère dans la ligne L de TL, la valeur en colonne L de TV (=> transposition)
            Next L 'prochaine colonne de la boucle
            K = K + 1 'incrément K (ajoute une colonne au tableau des lignes TL)
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
Next J 'prochaine ligne de la boucle 1
If K > 1 Then 'condition : si K est supérieur à 1
    D2.Range("A1").Resize(1, UBound(TV, 2)).Value = Application.Index(TV, 1) 'renvoie les étiquettes du tableau TV dans la première ligne de l'onglet D2
    D2.Range("A2").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL) 'renvoie dans A2 redimensionnée de l'onglet D2, le tableau TL transposé
End If
End Sub
10charles-v01.xlsm (30.10 Ko)

Bonjour

Juste parfait

Merci beaucoup

Je le garde précieusement pour l'adapter au besoin

J'ai également trouvé une méthode certainement moins élaborée mais qui fonctionne

Une double boucle qui ajoute une valeur dans une nouvelle colonne puis je supprime les lignes dont la valeur de cette colonne est vide

Columns("C:C").Select

Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

dl = Range("A65536").End(xlUp).Row

dl2 = Sheets("LV").Range("A65536").End(xlUp).Row 'les noms que je veux garder sont dans cette feuille et débutent en A2

For i = 2 To dl

For J = 2 To dl2

If Cells(i, 1).Value = Sheets("LV").Cells(J, 1).Value Then

Cells(i, 3).Value = "X"

End If

Next

Next

For i = dl To 2 Step -1

If (Cells(i, 3).Value = "") Then test = 1

If test = 1 Then Rows(i).Delete

test = 0

Next

Rechercher des sujets similaires à "supprimer lignes fonction elements colonne"