Bonjour à toutes et à tous.
J'ai besoin d'aide pour une nouvelle macro.
Je cherche à supprimer des lignes dont les cellules contiennent certains mots.
Par exemple supprimer les lignes en fonction d'une liste de nom.
Merci beaucoup.
Christophe
Bonjour à toutes et à tous.
J'ai besoin d'aide pour une nouvelle macro.
Je cherche à supprimer des lignes dont les cellules contiennent certains mots.
Par exemple supprimer les lignes en fonction d'une liste de nom.
Merci beaucoup.
Christophe
Bonjour,
Essaie la macro suivante :
Si les valeurs recherchées font partie de la valeur de la cellule, mais ne sont pas forcément égales à la valeur de la cellule, remplace "xlWhole" par "xlPart" (à deux endroits).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Dim Liste As Range, c As Range, x As Range 'la liste des valeurs à supprimer se trouve sur Feuil2 en colonne A With Sheets("Feuil2") Set Liste = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)) End With 'les lignes à supprimer sont sur Feuil1 With Sheets("Feuil1") 'boucle sur les valeurs de la liste For Each c In Liste 'recherche des valeurs sur Feuil1 Set x = .Cells.Find(c.Value, , , xlWhole) Do While Not x Is Nothing 'suppression de la ligne x.EntireRow.Delete Set x = .Cells.Find(c.Value, , , xlWhole) Loop Next c End With
j'ai essayé mais cela ne marche pas
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Dim Liste As Range, c As Range, x As Range 'la liste des valeurs à supprimer se trouve sur Feuil2 en colonne A With Sheets("Feuil2") Set Liste = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)) End With 'les lignes à supprimer sont sur Feuil1 With Sheets("Feuil1") 'boucle sur les valeurs de la liste For Each c In Liste 'recherche des valeurs sur Feuil1 Set x = .Cells.Find(c.Value, PIERRE, PAUL, xlWhole) Do While Not x Is Nothing 'suppression de la ligne x.EntireRow.Delete Set x = .Cells.Find(c.Value, PIERRE, PAUL, xlWhole) Loop Next c End With
Il faut le mettre dans un module ou comme d'habitude.
Souvent mes codes commencent par Sub
Merci
Bonjour,
Regarde si ça convient. Remplacer Mot1 et Mot2 par les mots que tu cherche :
Hervé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Sub Supprimer() Dim I As Long Dim NbLig As Long 'en Feuil2 et colonne A With Worksheets("Feuil2") NbLig = .Cells(.Rows.Count, 1).End(xlUp).Row 'pour la suppression, toujours commecer par la fin For I = NbLig To 1 Step -1 'si la cellule en cours de la colonne A contient Mot1 ou Mot2 'la ligne entière est supprimée If .Cells(I, 1) = "Mot1" Or .Cells(I, 1) = "Mot2" Then .Cells(I, 1).EntireRow.Delete End If Next I End With End Sub
Je suis désolé mais cela ne marche pas
où alors je fais pas ce qui faut
Re,
Dans quelle colonne se trouvent les mots que tu recherche, combien y a t-il ? Et quels sont-ils ?
Hervé.
Bonjour,
peut-être ainsi ,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub EFFACE() Dim X As Range, C As Range With Sheets("Feuil2") For Each X In .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)) For Each C In Sheets("Feuil1").Cells.SpecialCells(xlCellTypeConstants) If C Like X Then Rows(C.Row).Delete Next Next End With End Sub
Pour quelqu'un qui débute, il y a des syntaxes qui peuvent surprendre.
les définitions type SpecialCells(xlCellTypeConstants peuvent être difficult..
Je vais essayer d'être clair avec ma solution .
il y plusieurs éléments de difficultés :
-Trouver une méthodes qui fonctionne avec N mot à rechercher
- si possible la méthode doit permettre de rechercher sur les lignes entière o non et proposer le match case ou non ( maj ..).
Ensuite la dernière difficulté est celle qui consiste à supprimer des lignes ; lorsqu'on travaille avec un with , on ne peut supprimer des lignes sur la plagecar sinon le find ne fonctionne pas .
Voi ma méthode , la plus explicite possible:
nc : en fonction de la version d'excel , le chiffre 65536 doit être modifié; Je travailler sur Excel 2003.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Sub Effacer_mot_dune_liste2() Dim Ligne_à_supprimer() As Integer Dim nb_ligne_sup As Integer: nb_ligne_sup = 0 Dim Liste As Range, c As Range, x As Range Liste_mot = Array("PIERRE", "PAUL") 'les lignes à supprimer sont sur Feuil12 , colonne A Set Plage = Worksheets("Feuil12").Range("A1", Worksheets("Feuil12").Range("A65536").End(xlUp)) With Plage For Each mot In Liste_mot Set x = .Find(What:=mot, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) If Not x Is Nothing Then prem_occurence = x.Address Do nb_ligne_sup = nb_ligne_sup + 1 ReDim Preserve Ligne_à_supprimer(1 To nb_ligne_sup) Ligne_à_supprimer(nb_ligne_sup) = x.Row Set x = .FindNext(x) Loop While Not x Is Nothing And x.Address <> prem_occurence End If Next mot End With ' Si les valeurs recherchées If nb_ligne_sup > 0 Then For n = nb_ligne_sup To 1 Step -1 Worksheets("Feuil12").Rows(Ligne_à_supprimer(n)).EntireRow.Delete Next MsgBox " Nombre de ligne supprimée(s) : " & nb_ligne_sup End If End Sub
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager