VBA Supprimer des lignes selon le contenu de la cellule

Bonjour,

J'ai un fichier Fichier.xls qui contient deux feuilles, Feuille1 et Feuille2.

A/ Sur la Feuilles1 j'ai 4 colonnes avec la colonne B ("B2:B5420" & LastRow) qui contient des chiffres. ' La ligne 1 ce sont des en-têtes

B/ Sur la Feuille2 j'ai 2 colonnes avec la colonne A ("A32:A61") qui contient des chiffres. ' La ligne 1 ce sont des en-têtes

Ce que je cherche c'est de supprimer sur la Feuille1 toutes les lignes correspondantes à la colonnes B ("B2:B5420" & LastRow) et qui sont différentes pour un chiffre donné sélectionné à partir de la colonne A ("A32:A61") de la Feuille2.

C à d : Si Feuille1.Cells(ligneF1, 2).Value <> Feuille2.Cells(ligneF2, 1).Value Alors supprimer toute la ligne de la Feuille1.

J'ai essayé avec ce code que je trouve logiquement correct mais rien.

Sub Suppression()

'Suppression sur la feuille "1" des lignes différentes du num sélectionné
            Workbooks("Fichier.xlsx").Sheets(1).Activate

            DerLg = Workbooks("Fichier.xlsx").Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

            Dim Plage As Range, Num As Long, i As Long, j As Long

            Workbooks("Fichier.xlsx").Sheets(2).Activate

                For j = 32 To 61

                NAdht = Workbooks("Fichier.xlsx").Sheets(2).Cells(j, 1)

            Workbooks("Fichier.xlsx").Sheets(1).Activate

                Set Plage = Workbooks("Fichier.xlsx").Sheets(1).Range("B2:B" & DerLg)

                    For Each Cellule In Plage

                        For i = DerLg To 2 Step -1

                        If Cells(Cellule.Row, 2).Value <> Num Then Rows(i).EntireRow.Delete

                        Next i

                    Next

                Next j

End Sub

Merci par avance pour votre retour.

Salut,

Num est censé avoir quelle valeur ? Je ne vois pas le moment ou tu lui en donnes une .. :/

En général, si tu veux voir si ton code fonctionne bien, utilise le mode pas à pas, et regarde si tes variables sont bien initialisées avec les valeurs que tu souhaite .. ici, je pense que Num garde une valeur "vide" ce qui perturbe un peu ton code.

Bibu

Bonjour BibuNesco,

Merci pour ton retour.

Dsl j'ai oublé de modifier dans mon code la variable Num qui est en faite NAdht.

En faite toujours rien.

Sub Suppression()

'Suppression sur la feuille "1" des lignes différentes du num sélectionné
            Workbooks("Fichier.xlsx").Sheets(1).Activate

            DerLg = Workbooks("Fichier.xlsx").Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

            Dim Plage As Range, Num As Long, i As Long, j As Long

            Workbooks("Fichier.xlsx").Sheets(2).Activate

                For j = 32 To 61

                Num = Workbooks("Fichier.xlsx").Sheets(2).Cells(j, 1)

            Workbooks("Fichier.xlsx").Sheets(1).Activate

                Set Plage = Workbooks("Fichier.xlsx").Sheets(1).Range("B2:B" & DerLg)

                    For Each Cellule In Plage

                        For i = DerLg To 2 Step -1

                        If Cells(Cellule.Row, 2).Value <> Num Then Rows(i).EntireRow.Delete

                        Next i

                    Next

                Next j

End Sub

@+

Sinon, tu peux t'inspirer de ce topic là, qui est sensiblement la même problématique :

https://forum.excel-pratique.com/excel/traitement-d-une-colonne-avec-une-liste-160385

Bibu

Bonjour BibuNesco,

Je te remercie pour ta réponse.

J'ai modifié ce code et j'ai essayé avec mais il ne me supprime pas sur la Feuille1 toutes lignes pour un Numéro sélectionné sur la Feuille2, comme ainsi :

Si sur la Feuille1 la Cells(ligneFeuille1, 2).Value <> sur la Feuille2 la Cells(ligneFeuille2, 1).Value Alors supprimer toute la ligne de la Feuille1.

Pour plus d'info, ci-joint le fichier "Infos.xls" pour avoir une idée sur ce que je cherche.

Donc par exemple pour le Numéro 617 sur la Feuille2 s'il est sélectionné dans une boucle, il faut que sur la Feuille1 je trouve seulement les 27 lignes correspondantes au Numéro 617 et les autres seront supprimées et ainsi de suite selon le choix du numéro voulu sur la Feuille2.

Ci-dessous ton codé modifié comme suggéré :

Sub Test()

ThisWorkbook.Sheets(2).Activate

For l = 6 To 6 'En prenant par exemple le Numéro 617

Range("A" & l).Select

            Dim Ws_Feuille1 As Worksheet
            Set Ws_Feuille1 = Workbooks("Infos.xlsx").Worksheets(1)

            Dim Ws_Feuille2 As Worksheet
            Set Ws_Feuille2 = Workbooks("Infos.xlsx").Worksheets(2)

            Derlig_Feuille1 = Ws_Feuille1.Range("A" & Rows.Count).End(xlUp).Row

            Derlig_Feuille2 = Ws_Feuille2.Range("A" & Rows.Count).End(xlUp).Row

            Dim tab_Feuille2() As Variant
            tab_Feuille2 = Ws_Feuille2.Range("A2", "A" & Derlig_Feuille2)

            For i = Derlig_Feuille1 To 2 Step -1

                CompteEgalite = 0

                For j = LBound(tab_Feuille2, 1) To UBound(tab_Feuille2, 1)

                    If Ws_Feuille1.Range("B" & i) = tab_Feuille2(j, 1) Then
                        CompteEgalite = CompteEgalite + 1
                    End If

                Next j

                If CompteEgalite <> 0 Then
                    Ws_Feuille1.Range("A" & i).EntireRow.Delete
                End If

            Next i

Next l

End Sub

@+

0infos.xlsx (9.78 Ko)

Bonjour BibuNesco,

C'est bon j'ai réussi à modifier le code comme mentionné ci-dessous et supprimer les lignes selon la règle ci-desous :

C à d : Si Feuille1.Cells(ligneF1, 2).Value <> Feuille2.Cells(ligneF2, 1).Value Alors supprimer toute la ligne de la Feuille1.

Sub Test()

ThisWorkbook.Sheets(2).Activate

For l = 6 To 6 'En prenant par exemple le Numéro 617

Range("A" & l).Select

            Dim Ws_Feuille1 As Worksheet
            Set Ws_Feuille1 = Workbooks("Infos.xlsx").Worksheets(1)

            Dim Ws_Feuille2 As Worksheet
            Set Ws_Feuille2 = Workbooks("Infos.xlsx").Worksheets(2)

            Derlig_Feuille1 = Ws_Feuille1.Range("A" & Rows.Count).End(xlUp).Row

            Derlig_Feuille2 = Ws_Feuille2.Range("A" & Rows.Count).End(xlUp).Row

            Dim tab_Feuille2() As Variant
            tab_Feuille2 = Ws_Feuille2.Range("A2", "A" & Derlig_Feuille2)

            For i = Derlig_Feuille1 To 2 Step -1

                CompteEgalite = 0

                    If Ws_Feuille1.Range("B" & i) = tab_Feuille2("A" & l) Then
                        CompteEgalite = CompteEgalite + 1
                    End If

                Next j

                If CompteEgalite = 0 Then
                    Ws_Feuille1.Range("B" & i).EntireRow.Delete
                End If

            Next i

Next l

End Sub

Merci pour ton aide précieuse et pour ton code qui m'a beaucoup aidé à atteindre mon objectif

Rechercher des sujets similaires à "vba supprimer lignes contenu"