Suppression de lignes suite à la vérif de l'existance d'un texte spécifique

10exemple-macro.xlsx (11.76 Ko)

Bonjour le forum,

J'au un fichier où j'ai des marchand en colonne A, des secteur d'activité en colonne B et des marchandises en colonne C. Je souhaite avoir une macro qui check la marchandise en fonction du secteur d'activité et supprimer les lignes qui correspendent aux marchands qui n'ont pas une marchandise pré définie par exemple : (pour le secteur d'activité des fruits et légumes, vérifier si le marchand à "KIWI" en colonne C si il ne l'a pas il faut supprimer les lignes qui correspondent à ce marchand et IDEM sur le secteur des vetements si on ne trouve pas "JEANS" en marchandise).

Merci de trover l'exemple en pièce jointe

Je serais reconnaissant si quelqu'un d'entre vous pourrait m'aider sur ce point.

Merci d'avance

Bonjour à tous !

Une approche via Power Query (nativement intégré dans Excel 2016) :

Bonjour JFL,

Merci beaucoup pour votre proposition mais j'en ai jamais utilisé power query ça va être difficile donc d'adapter le model à mon fichier original et surtout d'améliorer où faire une maitenance au fichier dans l'avenir. c'est pour ça que j'aimerais bien que la solution soit avec un code VBA quelque chose que j'arrive à mettre à niveau dans l'avenir si besoin.

Cordialement

Bonjour à tous de nouveau !

Alors pour l'horizon VBA, je laisse le soin aux spécialistes de vous apporter la solution attendue !

Bonsoir à tous,

A tester sur une copie de ta feuille :

Option Explicit
Sub supprime()
Dim a, e, i As Long, txt As String, rng As Range
Dim dico1 As Object, dico2 As Object
    Set dico1 = CreateObject("Scripting.Dictionary")
    dico1.CompareMode = 1
    Set dico2 = CreateObject("Scripting.Dictionary")
    dico2.CompareMode = 1
    For Each e In Array("jeans", "kiwi")
        dico1(e) = Empty
    Next
    'la 1ère feuille dans le classeur
    With Sheets(1).Range("a1").CurrentRegion
        a = .Value
        For i = 2 To UBound(a, 1)
            If dico1.exists(a(i, 3)) Then
                txt = Join$(Array(a(i, 1), a(i, 2)), "|")
                dico2(txt) = Empty
            End If
        Next
        For i = 2 To UBound(a, 1)
            txt = Join$(Array(a(i, 1), a(i, 2)), "|")
            If Not dico2.exists(txt) Then
                If rng Is Nothing Then
                    Set rng = .Rows(i)
                Else
                    Set rng = Union(rng, .Rows(i))
                End If
            End If
        Next
    End With
    Application.ScreenUpdating = False
     'If Not rng Is Nothing Then rng.EntireRow.Delete
    If Not rng Is Nothing Then
        rng.Select 'selectionne
    Else
        MsgBox "Pas de données à supprimer"
    End If
    Set dico1 = Nothing: Set dico2 = Nothing
    Set rng = Nothing
    Application.ScreenUpdating = True
End Sub

Te voilà avec une feuille source amputée de certaines lignes.

klin89

Bonjour à tous,

@klin89, merci pour ce code qui fonctionne parfaitement. j'ai juste enlevé le ' qui se trouve avant If Not rng Is Nothing Then rng.EntireRow.Delete pour que ça supprime les lignes et mis ' avant rng.Select 'selectionne .

Merci beaucoup @KLIN89 et @JFL pour vos propositions et bon week end

Bonsoir à tous,
Ce sujet, bien qu'il soit clos, m'a intéressé. Aussi je me permets de donner une autre solution, surement moins performante que celle de Klin89, mais avec mes petites connaissances elle fonctionne.
Cdt
Papy Henri

Bonjour Henri, le fil,

Parfaite la solution. Elle répond plus à la question où on veut supprimer par famille de marchandise (par exemple si kiwi dans habilles elle supprime comme même la ligne et c'est top). le code est facile à comprendre surtout avec les commentaires si besoin d'adaptation.

Merci pour votre générosité messierus :)
bonne semaine

Rechercher des sujets similaires à "suppression lignes suite verif existance texte specifique"