Extraction et tri de données dans excel

Bonjour !

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” ?

Vous êtes rapides!!! C’est génial!! :super:

Alors voilà un exemple de ligne correcte : gilles.guerin16@wanadoo.fr
et un exemple de ligne incorrecte : NS4.x doesn’t use the@import.com

Ce qui m’intéresse étant uniquement l’adresse mail, le problème étant que les infos bonnes
et mauvaises sont dans la même colonne.

fonction STXT (Texte; n°de depart;Nb Car) pour extraire ce que tu veux

a+

Ne jamais mettre d’adresse email en clair sur un forum, sauf si on aime les pub de viagra. :wink:

Vu que la question n’a rien à voir avec Windows lui-même, je déplace le sujet.
Windows [:fleche] Logiciel Général
:jap:

Merci pour toutes ces infos, mais je ne comprends pas vraiment la fonction. :confused:

Pourriez vous la mettre en situation par rapport aux données que je vous ai envoyé svp?
Et désolée d’avoir perturbé le forum.

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:

Je pense effectivement qu’il est préférable de faire une macro.

Dans ta macro tu peux rechercher la position du “@”, ça te donne déjà un point de repère. :wink:

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.

  • Et enfin tu effaces tes colonnes A et B

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 :slight_smile:


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 !

Il suffit pourtant de recopier la macro telle quel, puis sélectionner les cellules à modifier et faire un clic droit dans une de ces cellules.

Encore faut-il recopier au bon endroit.
Si tu recopies ce code en tant que macro, c’est à dire dans un module, il y a peu de chances qu’il fonctionne.

Le nom de la macro dit par lui-même où la copier. :wink:

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)… :frowning:
Edité le 04/01/2008 à 16:26