Supprimer des cellules d'une colonne en fonction d'une liste

eric57

XLDnaute Occasionnel
Bonsoir le Forum

Je travail sur des colonnes que je dois "nettoyer" c'est à dire vider des cellules contenant des données inutiles ( et souvent reccurent)

Je cherche une macro pouvant "nettoyer" ma colonne A en fonction d'une liste de mots connus

J'y arrive avec cette macro toute simple,
Code:
Sub nettoyage()
Dim Pl As Long

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

   For i = 1 To Pl      
        If Range("A" & i) = "AGORA" Or Range("A" & i) = "5PRG" Or Range("A" & i) = "60CM" Then
        Range("A" & i) = Empty
        End If
        Next
End Sub

mais le nombre de mots à supprimer augmente vite, et je souhaite plutôt le faire à partir d'une liste existante dans la même feuille sur une autre colonne . Cette liste pouvant être complétée au fur et à mesure par de nouveaux mots.

Merci pour votre aide

Eric
 

Jacky67

XLDnaute Barbatruc
Bonjour,
Avec une liste de mots nommée dynamiquement "liste"
et 3 variantes:)
Code:
Sub nettoyage()
Dim i As Long
With Feuil1
For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
If IsNumeric(Application.Match(.Range("a" & i).Value, [liste], 0)) Then
.Range("a" & i) = "" ' efface le contenu
' .Range("a" & i).Delete Shift:=xlUp 'pour supprimer la cellule
' .Rows(i).Delete ' pour supprimer la ligne
End If
Next
End With
End Sub
 

Pièces jointes

  • nettoyage.xlsm
    16.7 KB · Affichages: 33

Jacky67

XLDnaute Barbatruc
RE...
Sur la feuille même cette formule ne sert que visuellement pour te montrer qu'elle existe.

Dans l'exemple donné, la liste de mots nommée dynamiquement est celle située en G1:G3
On dit "dynamiquement" parce que l'on peut
-Rajouter des mots
-La déplacer
-Même sur une autre feuille
-Le tout sans avoir a modifier le code vba
Dans le code 'exemple' on lui fait appel par son nom entouré de crochet [liste] (qui peut aussi s'écrire range("liste"))
Cette plage nommée est conçue par le menu ==> Formules==>gestionnaire de noms
Elle a comme nom "liste" et fait référence à la formule =DECALER(Feuil1!$G$1;;;NBVAL(Feuil1!$G:$G))

Bon courage
et
bonne nuit
 

eric57

XLDnaute Occasionnel
Merci pour tes explications. Effectivement cela fonctionne bien

MAis j'ai du coup une autre question.

Pour alimenter ma liste , est-il possible de copier-coller des cellules sélectionnées et les ajouter à la liste,

ActiveCell ne prenant que la cellule "active" et non l'ensemble des cellules sélectionnées
 

Jacky67

XLDnaute Barbatruc
Merci pour tes explications. Effectivement cela fonctionne bien

MAis j'ai du coup une autre question.

Pour alimenter ma liste , est-il possible de copier-coller des cellules sélectionnées et les ajouter à la liste,

ActiveCell ne prenant que la cellule "active" et non l'ensemble des cellules sélectionnées
Re...
De quelle liste parles-tu ?
Que Souhaites-tu faire exactement ?
 

eric57

XLDnaute Occasionnel
La liste dynamique doit être alimentée avec les mots à supprimer. ( en colonne G)
Actuellement on fait tout" bêtement" un copier coller des mots . Ils sont au départ dans la colonne "A" .
Idéalement il faudrait qu'on fasse une sélection des cellules non adjacentes, et que cette sélection se rajoute en bas de la Liste .
 

Jacky67

XLDnaute Barbatruc
La liste dynamique doit être alimentée avec les mots à supprimer. ( en colonne G)
Actuellement on fait tout" bêtement" un copier coller des mots . Ils sont au départ dans la colonne "A" .
Idéalement il faudrait qu'on fasse une sélection des cellules non adjacentes, et que cette sélection se rajoute en bas de la Liste .

Re...
Si j'ai bien compris...
Ceci ajoute à la liste des noms (Nommée "liste") ceux sélectionnés dans la colonne A, sans faire de doublon.
VB:
Sub AjoutDesExclut()
Dim C As Range
With Feuil1
For Each C In Selection
If Not IsNumeric(Application.Match(C, [liste], 0)) And C.Column = 1 Then
.Range("G" & .Cells(.Rows.Count, "g").End(xlUp).Row + 1) = C
End If
Next
End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 188
dernier inscrit
evebar