Bonjour,
Je souhaite créer une macro si cellule dans tel colonne contient "un mot" supprimer la ligne correspondante. Aider moi svp
Bonjour,
Je souhaite créer une macro si cellule dans tel colonne contient "un mot" supprimer la ligne correspondante. Aider moi svp
Bonjour,
un exemple avec les filtres automatiques :
- la feuille s'appelle "LaFeuille"
- la colonne où chercher le mot : colonne 3 (colonne C)
- le mot à chercher : "toto"
je te laisse remplacer dans le code ces trois choses pour adapter à ton cas
J'ai supposé que :
- les données commencent dès la colonne A, à partir de la ligne 2
- il n'y a aucune ligne vide
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 Sub Test() Dim Plage As Range Dim LaColonne As Integer Dim LeMot As String Dim NomFeuille As String NomFeuille = "LaFeuille" LeMot = "toto" LaColonne = 3 With ThisWorkbook.Worksheets(NomFeuille) ' plage des données Set Plage = .Cells(2, 1).Resize(.UsedRange.Rows.Count - 1, .UsedRange.Columns.Count) With .Range("A1") ' retrait des filtres s'il y en a .AutoFilter ' application du filtre .AutoFilter LaColonne, LeMot On Error Resume Next ' tentative de suppression des résultats Plage.SpecialCells(xlCellTypeVisible).EntireRow.Delete ' s'il n'y avait pas de résultat : on l'indique If Err <> 0 Then MsgBox "Pas de résultat" On Error GoTo 0 ' suppression des filtres .AutoFilter End With End With End Sub
Ce n'est pas ça que je veux. Je veux juste supprimer la ligne dans laquelle le mot débit ok apparrer. Il n'y a pas de filtre
Bonjour,
euh .... même si ça ne concerne qu'une seule cellule (fallait le deviner, t'as mangé des mots dans ta présentation), mon code fonctionnerait quand même à mon sens
l'as-tu testé au moins ?
et puisque tu cherches une seule cellule connue... là faut juste faire un test direct de la valeur
ça ressemblerait à ça (à adapter au contexte)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 With ThisWorkbook.Worksheets("LaFeuille").Range("A1") If .Value = "Le Mot" Then .EntireRow.Delete End With
Désolé jme suis mal exprimé. C'est presque ça sauf que je veux que dans la feuille toute les lignes qui contiennent les mots "débit ok" soit supprimées.
Alors essaye mon premier code !
je l'ai même commenté, si tu l'avais lu, tu aurais vu :
1) on met un filtre automatique pour afficher uniquement les lignes qui contiennent "toto" dans la colonne 3
2) on supprime ces lignes
3) on enlève le filtre
ce qui est toujours pas clair, c'est l'histoire de la colonne ... à lire ton premier message, il faut faire la recherche dans une seule colonne
et à lire ton dernier, la recherche doit se faire dans toutes les colonnes
précise ce point
[QUOTE=joe.levrai;8501955]Bonjour,
un exemple avec les filtres automatiques :
- la feuille s'appelle "LaFeuille"
- la colonne où chercher le mot : colonne 3 (colonne C)
- le mot à chercher : "toto"
je te laisse remplacer dans le code ces trois choses pour adapter à ton cas
Bonjour, je m'incruste
Juste pour connaitre les variantes pour 2 colonnes (ou n?), et pour 2 mots (ou n éventuellement) ?
En tout cas merci, top !
(et bravo pour ta patience avec ton interlocuteur d'origine...)
Bonne soirée,
Marc
Bonjour à vous, Bonjour au FoRhum,
Pour ma part.
Sur une plage "classique"
Je procède au remplacement des cellules dont la ligne est à supprimer par un blanc ("")
J'utilise la propriété SpecialCells pour supprimer en un bloc les lignes entières de ces cellules
A adapter.
Ici, suppression des lignes dont la colonne 2 des voitures est égale à "ford"
En ce qui concerne les tables de données (tableau structuré)
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 Option Explicit Public Sub suppr_voiture() Dim dernl As Long With Worksheets(1) dernl = .Cells(.Rows.Count, 2).End(xlUp).Row With .Range("B2:B" & dernl) .Replace what:="ford", replacement:="" .SpecialCells(xlCellTypeBlanks).EntireRow.Delete End With End With End Sub
Ici va ma préférence. ("Y a plus" de Derlign, End(xlUp)....)
Il faut en effet filtrer le tableau (le filtre étant présent par défaut).
La suppression porte sur le corps de cellules du tableau filtré.
2 remarques:
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 Option Explicit Public Sub suppr_voiture_tablo() Application.DisplayAlerts = False Dim lechamp As String, lecritère As String 'Nom du champ choisi (entête de colonne) lechamp = "voiture" 'Critère pour suppression de ligne lecritère = "ford" Dim numchamp As String With ThisWorkbook.Worksheets(2).ListObjects("Tableau1") 'Recherche du numéro de champ numchamp = .ListColumns(lechamp).Index 'Effacement du filtre si déjà présent If Worksheets(2).FilterMode = True Then .AutoFilter.ShowAllData 'Filtre du tableau structuré .Range.AutoFilter Field:=numchamp, Criteria1:=lecritère 'Suppression du corps de cellules .DataBodyRange.Delete 'Effacement du filtre pour visualisation des données restantes .AutoFilter.ShowAllData End With Application.DisplayAlerts = True End Sub
1 - La propriété de l'objet Application est neutralisée afin d'éviter le pop-up de confirmation de suppression de ligne entière
2 - La méthode Delete appliquée au corps de cellules du tableau structuré n'affecte que les cellules visibles.
Cette 2ème remarque m'amène à préconiser l'effacement systématique du filtre éventuel d'un tableau structuré, au préalable, avant d'y affecter méthodes et propriétés
Partager