Supprimer des lignes à partir d'une liste de mots clés

kitten13

XLDnaute Nouveau
Bonjour,

à partir de la fonction que @Boisgontier a créée, j’aimerais supprimer les lignes dont la cellule de la colonne A contient l’un des mots clés prédéfinie dans une liste (Renault, fiat, BMW, etc.).

Mais je sèche sur la façon de boucler sur un array avec la fonction Like...

Merci pour votre aide ;)

Code:
Sub supLignesRapide2()
  Application.ScreenUpdating = False
  a = Range("A1:A" & [A65000].End(xlUp).Row)
  For i = LBound(a) To UBound(a)
    If a(i, 1) Like "*Renault*" Then a(i, 1) = "sup" Else a(i, 1) = 0
  Next i
  Columns("b:b").Insert Shift:=xlToRight
  [B1].Resize(UBound(a)) = a
  [A1].CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess
  On Error Resume Next
  Range("B1:B65000").SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
  Columns("b:b").Delete Shift:=xlToLeft
End Sub
 
Dernière édition:

kitten13

XLDnaute Nouveau
Re : Supprimer des lignes à partir d'une liste de mots clés

Bonjour,

J'ai besoin de votre aide quelqu'un pourrait m’éclairer, ça pourra servir à d'autre membre.

je viens de faire ceci mais ça me supprime toute les lignes au lieu de celle qui contienne uniquement l'un des mots clés dans la première cellule.


Code:
Option Explicit
Option Base 1
Sub DeleteIfKeywords()
	Dim r As Long, lr As Long, n As Long, k, i As Long
	Application.ScreenUpdating = False
	k = Array("Fiat", "Renault")
	lr = Cells(Rows.Count, 1).End(xlUp).Row
	For r = lr To 2 Step -1
	  n = 0
	  For i = LBound(k) To UBound(k)
		If InStr(Cells(r, 1), k(i)) = 0 Then
		  n = n + 1
		  Exit For
		End If
	  Next i
	  If n = 0 Then Rows(r).Delete
	Next r
	Application.ScreenUpdating = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Supprimer des lignes à partir d'une liste de mots clés

Bonjour à tous

kitten13
Pourquoi ne pas utiliser un filtre avancé (en VBA ou pas) ?
Combien de mots dans ta colonne A ?
colonne A contient l’un des mots clés prédéfinie dans une liste (Renault, fiat, BMW, etc.).

Si tu avais pris le soin de joindre un fichier exemple
(comme conseillé lorsque que tu crées un discussion, cf image ci-dessous),tu aurais surement plus de réponses dans ton fil, non ?
NouvelleDiscuss.jpg
 

Pièces jointes

  • NouvelleDiscuss.jpg
    NouvelleDiscuss.jpg
    38.4 KB · Affichages: 60
  • NouvelleDiscuss.jpg
    NouvelleDiscuss.jpg
    38.4 KB · Affichages: 53

kitten13

XLDnaute Nouveau
Re : Supprimer des lignes à partir d'une liste de mots clés

Bonjour,

tout d'abord merci de votre réponse.

je débute en VBA (découverte avant hier seulement)

Pourquoi ne pas utiliser un filtre avancé (en VBA ou pas) ?
Parce que je souhaite faire la suppression directement sur un traitement de 30 000 lignes en moyenne... Je préfère donc réduire autant que possible le nombre d'étape pour y arriver...

Combien de mots dans ta colonne A ?
La colonne A contient des noms de société (2 à 6 mots) en moyenne

Si tu avais pris le soin de joindre un fichier exemple
Je pense aussi, j'ai ajouter un échantillon en pièce jointe.

Je viens de faire ceci mais toujours rien:
Code:
Dim Element As Variant
Dim Lign As Integer
For Lign = 1 To 2000
    For Each Element In Array("Fiat", "Renault")
        If Cells(Lign, 1) = Element Then
            Rows(Lign).Delete
        End If
    Next Element
Next Lign

Merci encore pour aide

cdlt
 
Dernière modification par un modérateur:

Staple1600

XLDnaute Barbatruc
Re : Supprimer des lignes à partir d'une liste de mots clés

Re

je débute en VBA (découverte avant hier seulement)
Certes, mais tu ne débutes pas en lecture, non ?

Recliques sur l'image de mon précédent message et joins un fichier conforme à ce qu'on peut lire sur l'image ...:rolleyes:

NB: On peut très bien utiliser le filtre avancé pour supprimer des lignes (sinon l'aurai-je proposé... ?)
 

camarchepas

XLDnaute Barbatruc
Re : Supprimer des lignes à partir d'une liste de mots clés

Bonjour,

Voici une solution parmi tant d'autre :

Code:
Sub Supprime()
Dim Element As Variant
Dim Lign As Integer
For Lign = 1 To 2000
    For Each Element In Array("Fiat", "Renault")
        If InStr(1, Cells(Lign, 1), Element) > 0 Then
            Rows(Lign).Delete
        End If
    Next Element
Next Lign
End Sub
 

kitten13

XLDnaute Nouveau
Re : Supprimer des lignes à partir d'une liste de mots clés

Re


Certes, mais tu ne débutes pas en lecture, non ?

Recliques sur l'image de mon précédent message et joins un fichier conforme à ce qu'on peut lire sur l'image ...:rolleyes:

NB: On peut très bien utiliser le filtre avancé pour supprimer des lignes (sinon l'aurai-je proposé... ?)

Merci d’éviter d’être agressive avec vos remarques... et d’être tolérant envers les nouveaux venu s'il vous plait...

Règle n°1
1 – Les forums doivent rester conviviaux. Donc, les échanges doivent être courtois, respectueux et garder la bonne humeur. Les propos agressifs ne sont donc pas tolérés.



@camarchepas merci pour votre aide, en lisant votre code je viens de comprendre mes erreurs (la logique)...

Je test et je vous fait un retour, merci encore.

cdlt
 
Dernière édition:

kitten13

XLDnaute Nouveau
Re : Supprimer des lignes à partir d'une liste de mots clés

Bonjour,

Voici une solution parmi tant d'autre :

Code:
Sub Supprime()
Dim Element As Variant
Dim Lign As Integer
For Lign = 1 To 2000
    For Each Element In Array("Fiat", "Renault")
        If InStr(1, Cells(Lign, 1), Element) > 0 Then
            Rows(Lign).Delete
        End If
    Next Element
Next Lign
End Sub

Votre code fonctionne très bien, cependant il est sensible à la CASE et ne prend donc pas en compte le mot clé "Fiat" si le terme est formater en majuscule "FIAT"...
 

camarchepas

XLDnaute Barbatruc
Re : Supprimer des lignes à partir d'une liste de mots clés

Evolution 1

Code:
Sub Supprime()
Dim Element As Variant
Dim Lign As long' Integer ' Permettra de traiter plus de 32000 si nécessaire
For Lign = 1 To 2000
    For Each Element In Array("FIAT", "RENAULT")
        If InStr(1, ucase(Cells(Lign, 1)), Element) > 0 Then
            Rows(Lign).Delete
        End If
    Next Element
Next Lign
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Supprimer des lignes à partir d'une liste de mots clés

Re


Donc avec le filtre élaboré en VBA qui supprime des lignes
Code:
Sub Macro1()
Dim pf As Range
[F2].FormulaR1C1 = _
        "=ISERR(SEARCH(""renault"",RC[-5]))+ISERR(SEARCH(""fiat"",RC[-5]))=1"
Range("A1:D21").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("F1:F2"), Unique:=False
Set pf = [_FilterDataBase]
pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
ActiveSheet.ShowAllData: [F2].Clear
End Sub

kitten13:
Tu attends que le modérateur supprime ta PJ, ou tu joins toi-même une version anonymisée ...:rolleyes:
 

kitten13

XLDnaute Nouveau
Re : Supprimer des lignes à partir d'une liste de mots clés

Evolution 1

Code:
Sub Supprime()
Dim Element As Variant
Dim Lign As long' Integer ' Permettra de traiter plus de 32000 si nécessaire
For Lign = 1 To 2000
    For Each Element In Array("FIAT", "RENAULT")
        If InStr(1, ucase(Cells(Lign, 1)), Element) > 0 Then
            Rows(Lign).Delete
        End If
    Next Element
Next Lign
End Sub


Ah j’étais justement en train de chercher sur internet le type d’opérateur (ucase) à utiliser pour rendre insensible à la casse...

Merci camarchepas, j'ai appris beaucoup aujourd'hui... Le langage VBA me plait, je vais approfondir mes connaissance...
 

Staple1600

XLDnaute Barbatruc
Re : Supprimer des lignes à partir d'une liste de mots clés

Re

kitten13
Je ne suis pas agressif (tout au plus ironique parfois ou souvent)
Tu es libre de ne pas apprécier mon ironie ou mon humour ;)
Mais en attendant , tes données n'étaient pas anonymes, non ?
Alors pour rappel
- DONNEES CONFIDENTIELLES : Ne laissez AUCUNE donnée personnelle ou confidentielle (noms, adresses, N° de téléphone, entreprises...) dans vos pièces jointes. Vous mettriez Excel-Downloads en contravention avec la loi Informatique et Liberté et votre fichier devrait être enlevé.

NB: Tu as testé mon code VBA avec le filtre élaboré ?

[note pour plus tard à moi-même]
Ne pas titiller kitten13, sinon il va être chafouin.
Tu me diras avec seulement 8 messages au compteur, il peut pas connaitre l'énergumène que je suis
Mince v'la ti pas que je parle de moi à la troisième personne
[/note pour plus tard à moi-même]
 
Dernière édition:

Discussions similaires

Réponses
19
Affichages
2 K
Réponses
13
Affichages
2 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 393
Messages
2 088 006
Membres
103 695
dernier inscrit
acimi