Macro pour filtrer liste adresses email
Bonjour
je suis débutant en macro, j'ai besoin d'aide pour le code :
j'ai une liste de plusieurs milliers d'adresses emails, je souhaite appliquer un filtre qui élimine toutes les adresses comportant des mots clés, par ex : spam
colonne A
merci de votre aide
Salut et bienvenue sur le Forum,
Le code ci-dessous met en évidence les lignes comportant le mot SPAM. Sur cette base, tu peux imaginer remplacer l’instruction MsgBox (i) par n’importe quelles autres actions.
Option Explicit
Sub xx()
Dim i As Integer, j As Integer
Application.ScreenUpdating = True
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
On Error Resume Next
j = WorksheetFunction.Search("spam", Range("A" & i))
If j > 0 Then
MsgBox (i)
End If
j = 0
Next i
End SubOn pourrait aussi imaginer que tu dresses quelque part (par exemple sur une autre feuille) une liste de mots clefs à traiter et que tous ces mots soient pris en compte.
Mais sans voir ton fichier, il est difficile d’en dire plus, ne sachant par exemple pas s’il faut supprimer la ligne entière ou que la cellule comportant le mot-clef, etc.
Cordialement.
Bonjour Yvouille
merci de ton aide et de ta super réactivité
effectivement j'ai une liste de mots clés, la règle de gestion est simple : éliminer tous les emails dans lesquels se trouve et / ou un de ses mots clés
le top serait de tenir la liste des mots clés dans une feuille, ce qui faciliterait leur mise à jour
et d'avoir une macro qui efface la ligne complète si elle y trouve un de ses mots clés
je suis totalement une gauffre débutante dans les macro, aussi je serai très reconnaissant d'avoir un code prêt à copier dans la macro
merci de votre aide
Didier
Yvouille a écrit :Mais sans voir ton fichier, il est difficile d’en dire plus
Je voudrais vraiment voir ton fichier - ou un bout de fichier absolument représentatif - avant d'aller plus loin afin de ne pas avoir de mauvaises suprises par la suite. Je t'ai déjà donné un exemple d'information qui me manque, en voici quelques uns de plus : à partir de quelle ligne sont placées tes adresses ? Comment se nomme ta feuille ? Etc., etc.
Au plaisir de voir ton fichier
oui je comprend Yvouille
je te joint un bout de fichier
c'est au format Csv avec séparateur de colonne ';'
seulement deux colonnes :
A= adresses emails
B= Url
tu vois dans cet extrait des préfixes comme 'copyright', 'defense', 'admin', 'contact me'... qui sont autant de mot clés que je dois lister dans une seconde feuille,
la macro doit élliminer les lignes qui comportent ces mots clés dans l'adresse email de la colonne "A"
merci de ton aide
bien cordialement
Didier
Salut,
Comme tu prétends être une vraie pomme en macro, je te prierais d’indiquer le nom de la feuille à traiter dans la cellule A2 de la feuille Mots-clefs du fichier ci-joint. Autrement tu pourrais modifier le nom de la feuille à traiter directement dans la macro.
Ensuite tu précises tes mots-clefs dans la colonne D et tu lances la macro par le bouton en place sur cette feuille.
La feuille précisée en A2 est alors nettoyée. Attention, s’il y a une seule fois l’un des mots-clefs dans une ligne comportant plusieurs adresses, toute la ligne est effacée.
Attention, j’ai enregistré mon fichier au format .xls et la feuille à traiter doit se trouver dans mon fichier.
On peut imaginer toutes sortes de modification, par exemple que le fichier se trouve sur la feuille nettoyée en fin de macro ou je ne sais quoi de plus.
Cordialement.
Re-bonsoir Yvouille
OK je vais rentrer une liste dans la feuille de référence, et le nom de la feuille à traiter dans la cellule A2 de la feuille mots clés,
comme ça ca me parait super, je teste et je te dis quoi
merci
Didier
j'ai un peu galéré pour réactiver les macros qui étaient désactivées...
j'ai du réactiver "Activer toutes les macros (non recommandé ; risque d’exécution de code potentiellement dangereux) "
la macro fonctionne parfaitement... un vrai bonheur, je peux très souplement compléter ou éditer une liste de mots clés spécifiques à la liste, extra
merci infiniment tu m'as fait gagner un temps considérable, je vais pouvoir trier mes listes
as tu un conseil et une procédure à me donner pour activer les macros pour cette tache, et pas pour le reste ?
bien cordialement
Didier / Chounpit
re-bonjour Yvouille
je me rend compte que dans mes listes j'ai des suffixes pays démontrant que j'ai aussi des emails correspondant à des langues différentes.
mon projet est de créer des listes pour emailing de mes clients dans leur langue, ainsi
serais-t'il possible de créer une macro qui classe des adresses dans des feuilles différentes par suffixe :
.fr
.en
.co.uk
.de
.es
.it
.pt
.ru
.nl
.be
.com +.net +.org
dans ma procédure :
1- je filtre en retirant les adresses indésirables
2- je classe pour avoir des listes propres et à priori d'une même Lang
je n'ose pas abuser de ta disponibilité, mais si tu as quelques minutes, je suis incapable de faire ce code
bien cordialement
Didier
Re,
On pourrait inclure dans la macro une formule qui donnerait le même résultat que la formule placée comme exemple dans le fichier ci-joint, dans la colonne C de la feuille «TEST filtrage emails Chounpit (».
Cette formule recherche le premier point après le signe @ et permet un classement alphabétique.
Tu vois alors déjà un ou deux problèmes, marqués en bleu ou rouge. Faudrait-il plutôt chercher l’extension après le dernier point, par exemple de manière à ne pas avoir chicago.com, mais com ?
Faudrait-il supprimer tous les signes > afin d’éviter d’avoir un classement spécial pour com> ? Y a-t-il d’autres signes qu’il faudrait également supprimer ?
La manière de travailler dépend aussi du nombre de fois que tu vas utiliser cette macro. Si c’est une fois pour toute, peut-être vaut-il mieux travailler avec des formules comme dans le fichier ci-joint, après que la macro ait été lancée pour la première partie du travail.
A te relire.
PS : Pourquoi il n'y a pas de .ch dans ta liste
Bonsoir Yvouille
j'aime beaucoup la Suisse et j'étais chez toi il y a deux semaines à Grenchen au dessus de Neufchatel
j'ai aussi des listes d'emails avec .ch que je dois trier
avant d'aborder la seconde macro, sur la première je me rend compte qu'elle n'elimine pas toutes les lignes ou il y a un mot clé, si le mot clé et accolé à un autre, exemple :
salesbest@kkk.net va rester alors qu'il y a le mot clé 'sales'
il y a t-il un moyen d'identifier le mot comme une suite de lettre meme si il n'en est qu'une partie ?
j'espère etre clair
pour la seconde macro, l'idéal serait de copier les adresses d'un meme pays dans des feuilles differentes, je ne sais pas si c'est possible
bien cordialement
Didier - Chounpit
Salut,
Alors j’accepte de continuer à t’aiderChounpit a écrit :j'ai aussi des listes d'emails avec .ch que je dois trier
Ce n'est presque pas possible, il doit y avoir un autre problème. J’avais fait des essais dans ce sens avant de t’envoyer mon fichier, j’ai refait un essai avec ton nouvel exemple et ça joue chez moi. Tu écris bien sales et non pas 'sales' ? Si jamais fournis-moi le fichier créant problème (ou au moins la ligne dans un fichier réduit).Chounpit a écrit :avant d'aborder la seconde macro, sur la première je me rend compte qu'elle n'elimine pas toutes les lignes ou il y a un mot clé, si le mot clé et accolé à un autre, exemple :
salesbest@kkk.net va rester alors qu'il y a le mot clé 'sales'
Peux-tu me fournir un exemple précis de ce que tu désires ?Chounpit a écrit :il y a t-il un moyen d'identifier le mot comme une suite de lettre meme si il n'en est qu'une partie ?
Oui, c’est tout à fait possible. Mais liquidons déjà les autres problèmes et on verra ça par la suite.Chounpit a écrit :pour la seconde macro, l'idéal serait de copier les adresses d'un meme pays dans des feuilles differentes, je ne sais pas si c'est possible
A te relire.
Bonsoir Yvouille
difficile de te donner un extrait de fichier précis car c'est un constat de masse, par exemple j'ai 'mouliné' une liste de 2500 adresses email, après passage par la macro il en restait 1800, et en parcourant la liste ligne à ligne pour vérifier sa 'propreté' j'ai encore retiré 300 lignes manuellement, dont 270 spécifiques à des entreprises (impossible à lister dans les mots clés car ça sera différent d'une liste à une autre) et une trentaine qui était des situations identiques à 'salesbest' ou encore 'wholesale', 'contactme', etc
je ne sais pas si ça t'aide suffisamment...
bonne soirée
Didier
Si tu fais une copie d'un fichier avec des adresses créant problème, que tu n'en laisse que 5, que tu les modifies afin de les rendres anonymes puis que ces 5 lignes créent encore des problèmes, je pourrai voir ce qui ne joue pas.
Autrement peux-tu me fournir ton fichie en privé ? Si oui, écrit moi un courriel (tu cliques sur l'enveloppe sous mon profil) et je te donnerai une adresse où me l'envoyer.
Bonne journée.
ou es tu Yvouille ?
en France c'est férié le 8 mai, mais pas en Suisse je pense
as tu une idée comment faire une macro qui me trie les adresses email par domaine de pays ?
bonne soirée à toi
cdlt
Didier - Chounpit
Salut,
Je suis là, et toi, où es-tu ? Tu devais répondre à mes dernières questions afin que l'on puisse résoudre le problème en cours
Puis après, comme je te l’ai déjà dit le 6 courant en soirée, on pourra voir pour ce code séparant les domaines sur des feuilles individuelles.
Lis-tu correctement mes messages ?
A te relire.
NB : Le 8 n'est effectivement pas férié en Suisse, par contre demain ce sera l'Ascension et j'aurais congé
bonsoir Yvouille
oui je lis très attentivement tes messages, à part l'avant dernier pour lequel je n'ai pas eu de notification et qui n'apparaissait pas sur le post, je l'ai découvert ce soit avec ton dernier.
c'est bizarre : des adresses ne sont pas retirées et ce n'est pas lié aux mêmes mots clés, à chaque fois différent
voici en pièce jointe une série d'adresses récalcitrantes qui viennent de résister au passage de la macro
ceci dit la macro retire bien 98% des adresses avec les mots clés (j'en ai listé environ 350 dans la colonne D), et après j'ai encore 20% du fichier à retirer manuellement sur des domaines d'entreprise, ce qui n'est pas listable en mot clés
merci de ton aide
Didier - Chounpit
Salut Didier,
Ta pièce jointe n'est pas passée (donc tu n'as pas effectué l'aperçu avant d'envoyer
Cordialement.
EDIT
Re-bonjour,
Comme j’avance plus vite que toi, me voici à nouveau.
Dans le fichier ci-joint - en plus de l’élimination des adresses désirées - une feuille est créé par domaine afin d’y répertorier ses adresses. S’il y a plusieurs adresses sur une ligne, elle se retrouve dans la feuille « xxx ».
J’ai dû renommer les trois feuilles de base afin qu’elles commencent toutes par « Liste », ce qui m’est utile dans la macro.
La feuille dans laquelle se trouvent les adresses à traiter doit nouvellement obligatoirement se nommer « Liste à traiter ».
A te relire.
bonjour Yvouille
ce matin je suis un peu débordé par les contraintes familliales, un enfant qui sort de H suite opératoires
cet après-midi je serai plus dispo au bureau pour tester la macro V4
je tente de te renvoyer la liste des récalcitrants
j'ai fait l'aperçu... avant et après... OK j'ai compris : pas la bonne extension et reffusée par le systeme, ca devrait etre bon maintenant
à tout à l'heure
didier
Salut,
Tu m'envoies une liste de récalcitrants, mais tu ne me dis pas à quels mots-clefs ils résistent
Peux-tu alors placer ces récalcitrants dans le dernier fichier que je t'ai fourni, tu inscrits tes mots-clefs dans la colonne D de la feuille «Liste Mots-clefs» et si ça ne va toujours pas comme tu désires, tu m’envoies ce fichier précis.
A te relire.
bonsoir Yvouille
ok
ci joint la macro avec les adresses recalcritrantes dans la page 1'list to trait'
et les keywords
bizarrement quand on fait un second passage par la macro
une partie des emails sont effacés correctement
si tu peux améliorer la macro c'est génial,
mais dans l'absolu elle fait déjà un super boulot, et je dois quand meme scanner ligne a ligne pour retirer encore des emails sur des domaines en dehors de la cible
en tout, je vais trier un volume d'environ 1M d'adresses, par paquets de 2000
donc tu vois, j'aurai pas fini demain et plus la macro est effisciente mieux ca sera
bien à toi
Didier
j'ai oublié de joindre la liste dans la macro la voici