C'est ma grande première sur un forum de ce genre. Je viens vers vous car je ne suis pas bien douée en informatique, pourtant je suis certaine qu'il existe une solution toute simple à mon problème.
Voilà, j'ai un fichier excel. Dans ma colonne A, j'ai plein d'adresses mail, mais la personne qui a fait le fichier a mis d'autres détails par endroit comme Nom, Prénom, <>, des phrases,... Mon objectif est de ne récupérer que les adresses mails. Sachant que j'en ai plus de 200 et que le fichier va s'agrandir, j'aimerai trouver une solution pour que le fichier soit bien propre et dépourvu de toutes infos inutiles.
Je précise que je ne suis pas une pro en informatique, je suis plus que débutante, mais pas du toute programmeuse.
Merci par avance de l’aide que vous pourrez m’apporter en espèrant avoir été assez claire.
Ce n’est pas très difficile si les infos superflues sont toujours au même endroit, ou si les données à conserver peuvent être facilement délimitées
Tu peux donner des exemples de lignes “correctes” et des exemples de lignes “à corriger” ?
Bon, j’ai testé ça ne marche pas je dois mal m’y prendre !
J’ai vu qu’on pouvait faire des macros, ça sera pas plus adapté? Je propose…
Par contre mon gros problème est “comment dire que c’est une adresse mail?”
Je veux prendre comme point de référence le @ mais je crois que excel ne comprend pas.
Il doit y avoir un autre terme à utiliser mais lequel :neutre:
Tu peus essayer cette macro à insérer dans la feuille contenant les adresses mails :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim Ref As String
Dim Debut As String
Dim Fin As String
Dim A As String
Dim AdrMail As String
Dim Posit As Double
Dim Ran As Range
Ref = "abcdefghijklmnopqrstuvwxyz1234567890.-_"
For Each Ran In Target
A = Ran.Value
Posit = InStr(A, "@")
Debut = Left(A, Posit - 1)
Fin = Right(A, Len(A) - Posit)
Posit = Len(Debut)
While Posit > 0
If InStr(Ref, Mid(Debut, Posit, 1)) = 0 Then
Debut = Right(Debut, Len(Debut) - Posit)
Posit = 0
Else
Posit = Posit - 1
End If
Wend
Posit = 1
While Posit <= Len(Fin) And InStr(Ref, Mid(Fin, Posit, 1)) <> 0
Posit = Posit + 1
Wend
Fin = Left(Fin, Posit - 1)
AdrMail = Debut & "@" & Fin
Cells(Ran.Row, Ran.Column + 1) = AdrMail
Next Ran
End Sub
Attention : ne teste pas cette macro sur ton fichier d’origine !!!
Commence par faire une copie de ton fichier puis travaille sur cette copie.
Principe de fonctionnement :
on part du “@” et on remonte vers le début jusqu’à ce qu’on trouve un caractère n’appartenant pas à la variable Ref et on ne garde que cette partie que l’on met dans la variable Début.
on part du “@” et on avance vers la fin jusqu’à ce qu’on trouve un caractère n’appartenant pas à la variable Ref et on ne garde que cette partie que l’on met dans la variable Fin.
on concatène le tout que l’on met dans la variable AdrMail sans oublier d’ajouter un “@” entre le début et la fin.
Astuces :
tu peux modifier la variable Ref à ta convenace.
tu peux écrire le résultat où tu veux.
Actuellement le résultat se met automatiquement dans la cellule juste à droite de la cellule d’origine grace à la ligne Cells(Ran.Row, Ran.Column + 1) = AdrMail.
Si tu veux que le résultat écrase le contenu d’origine, tu remplaces alors la ligne ci-dessus par Ran = AdrMail par exemple.
Utilisation :
tu sélectionnes les cellules sur lesquelles tu veux effectuer le travail.
tu fais un clic droit sur une des cellules sélectionnées (ça lance automatiquement le calcul sur la totalité des cellules sélectionnées).
Si tes valeurs respectent toutes la même structure, à savoir
adresse valable à recopier telle quelle
ligne à nettoyer -> la partie à conserver est délimitée par les balises ‘<’ et ‘>’
tu peux facilement faire en excel sans macros (en utilisant STXT comme préconisé plus haut
Mais l’explication me parait quand même un peu courte, donc je te donne une marche à suivre un peu plus détaillée :
En supposant que tes valeurs à transcrire soient dans la colonne A et commencent à la ligne 0
Dans la cellule B1, tu tapes la formule =SI(ESTERR(CHERCHE("<";A1));A1;STXT(A1;CHERCHE("<";A1)+1;CHERCHE(">";A1)-CHERCHE("<";A1)-1))
Puis tu fais un copier/coller de B1 dans B2 B3 …
Ensuite, pour avoir quelque chose d’exploitable sous forme de texte, tu fais un copier/coller valeurs de ta colonne B vers une colonne vierge.
Merci pour toutes ces infos, je n’ai pas été réactive, je n’avais plus internet pendant ces quelques jours, je teste vos deux solutions de ce pas !! Merci
La solution de gcc fonctionne à merveille !!! :clap:
Je vais tout de même tester celle de jacky67 par curiosité.
Merci vraiment beaucoup pour toute cette aide.
:hello: Et bonne année !!!
Je viens de tester celle de jacky67, je suis vite perdue je dois avouer,
même si je pensais qu’une macro était la solution à mon problème,
je ne suis pas capable de l’appliquer :@, merci pour tes conseils !
Mais il est vrai que si on ne le sait pas, on ne peut pas l’inventer, tu as raison.
C’est pour cela que j’avais précisé “macro à insérer dans la feuille contenant les adresses mails”, en mettant “dans la feuille” par opposition à “dans un module”.
Effectivement, j’avais mal interprété ton “dans la feuille”. (j’ai fait l’amalgame entre feuille et classeur)
Je pense quand même que c’est ce genre d’erreur que doit avoir fait Foudl.
C’est fort probable car je sais que mon “dans la feuille” n’est pas clair pour quelqu’un qui ne connait pas les macros sous EXCEL.
En espérant que Foudl (je ne connais pas son niveau de connaissance d’EXCEL) n’ait pas copié la macro réellement dans la feuille (autrement dit dans une ou plusieurs cellules de la feuille de calcul)…
Edité le 04/01/2008 à 16:26