Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraction email d'une liste

7 réponses
Avatar
pier
Bonjour,=20

De mon logiciel de courrier =E9lectronique j'arrive =E0 extraire une liste =
sous cette forme :

Abanes, Fred (Fred.Abanes@gentris.fr); Abutor, Jocelyne (jocelyne.abutord@g=
entris.fr); Abbadi, Micheline (Micheline.Abbadi@gentris.fr); Abbas, Marcel =
(Marcel.Abbas@gentris.fr); Adam, Chantal (Chantal.Adam@gentris.fr); Amani, =
Hassan (Hassan.Amani@gentris.fr);

Lorsque je copie cette liste sous Excel j'obtiens ce type de r=E9sultat vis=
ible dans ce fichier http://pier.free.fr/extractionemail.xls

Ce que je souhaite c'est extraire les adresses =E9lectroniques pour avoir u=
ne liste avec les adresses dans une seule colonne.

Ma question est de savoir si ce que je souhaite est possible via Excel ?

Si oui, pouvez-vous m'aider =E0 extraire les adresses ou tout au moins m'or=
ienter vers une solution.

D'avance, merci.

Pierre.

7 réponses

Avatar
MichD
Bonjour,

Copie ce code dans un module standard.

J'ai supposé que tes adresses étaient en Colonne A1:Ax de la feuille "feuil1"
Le résultat sera en colonne B1:Bx

Tu dois adapter le nom de l'onglet de la feuille et les plages de cellules selon ton application
'-------------------------------------------------------------
Sub test()
Dim X As String, T As Variant, A As Variant, Tblo()
Dim B As Long, C As Range
With Worksheets("Feuil1") 'Onglet feuille à adapter
For Each C In .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = C.Value
Do While UBound(Split(X, "(")) <> 0
T = Split(X, "(")
A = Split(T(1), ")")
B = B + 1
ReDim Preserve Tblo(1 To B)
Tblo(B) = A(0)
X = Replace(X, T(0), "")
X = Replace(X, A(0), "")
X = Right(X, Len(X) - 2)
Loop
Next
.Range("B1").Resize(B) = Application.Transpose(Tblo)
End With
End Sub
'-------------------------------------------------------------
Avatar
GL
Le 26/05/2014 22:09, MichD a écrit :
Bonjour,

Copie ce code dans un module standard.

J'ai supposé que tes adresses étaient en Colonne A1:Ax de la feuille
"feuil1"
Le résultat sera en colonne B1:Bx

Tu dois adapter le nom de l'onglet de la feuille et les plages de
cellules selon ton application



C'est fou ce que MichD a dans sa besace.
Encore une fois, une expression régulière et c'est réglé.

Une expression régulière pour trouver une adresse e-mail,
on en trouve sur le net ou dans tout logiciel d'apprentissage
des RegEx.

Bref, vu les dernières questions posées sur le forum, ça me
conforte dans l'idée qu'Excel devrait être doté d'urgence
de fonctions regexp natives....

Cordialement.


'-------------------------------------------------------------
Sub test()
Dim X As String, T As Variant, A As Variant, Tblo()
Dim B As Long, C As Range
With Worksheets("Feuil1") 'Onglet feuille à adapter
For Each C In .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = C.Value
Do While UBound(Split(X, "(")) <> 0
T = Split(X, "(")
A = Split(T(1), ")")
B = B + 1
ReDim Preserve Tblo(1 To B)
Tblo(B) = A(0)
X = Replace(X, T(0), "")
X = Replace(X, A(0), "")
X = Right(X, Len(X) - 2)
Loop
Next
.Range("B1").Resize(B) = Application.Transpose(Tblo)
End With
End Sub
'-------------------------------------------------------------
Avatar
pier
Impeccable !

Merci ;o)
Avatar
MichD
Bonjour,

Cela fait quelques fois que tu louanges "RegEx". Qu'est-ce qui t'empêche de proposer une procédure telle que tu la conçois et
nous démontrer les qualités exceptionnelles du "RegEx". Je suis certain que le demandeur ne demande pas mieux d'avoir
plusieurs suggestions différentes pour résoudre sa problématique et qui sait, tu inciteras peut-être un certain nombre de
lecteurs à utiliser ton approche!
Avatar
GL
Le 27/05/2014 00:09, MichD a écrit :
Bonjour,

Cela fait quelques fois que tu louanges "RegEx". Qu'est-ce qui t'empêche
de proposer une procédure telle que tu la conçois et nous démontrer les
qualités exceptionnelles du "RegEx". Je suis certain que le demandeur ne
demande pas mieux d'avoir plusieurs suggestions différentes pour
résoudre sa problématique et qui sait, tu inciteras peut-être un certain
nombre de lecteurs à utiliser ton approche!



Alors voilà : RegexBuddy, c'est LE logiciel pour maîtriser parfaitement
les regex : on tape : "regular expression for email" sur Google et le
premier résultat c'est l'aide de RegexBuddy qui propose :

b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b

Maintenant :

A B
-----------------------------------------------------
| <en B1 je met la chaîne à extraire ci-dessous>
| Abanes, Fred (); Abutor,
| Jocelyne(); Abbadi,
| Micheline (); Abbas,
| Marcel (); Adam,
| Chantal (); Amani,
| Hassan ();
|
2| 1 =REGEXP($B$1;"b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b";A1)
3| 2 =REGEXP($B$1;"b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b";A2)
4| 3 =REGEXP($B$1;"b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b";A3)
5| 4 =REGEXP($B$1;"b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b";A4)

En recopiant vers le bas la formule, on a les adresses email qui
viennent les unes après les autres.

Voilà.

La première fois, ça paraît abscons, mais comme les regex sont partout
(sed, grep, n'importe quel éditeur de texte même Word qui propose la
recherche par "caractères génériques" qui est un ersatz d'expressions
régulières avec une syntaxe à la noix de coco mais bon...) quand on
commence à les maîtriser, on ne peut plus s'en passer.


Le tout, c'est d'ajouter la référence "Microsoft VBScript Regular
Expressions 5.5" à son classeur (Menu Outil de l'éditeur VBA) ou
mieux, à son fichier .xlam de macros préférées (comme ça les RegEx
sont accessibles depuis n'importe quel classeur)

Et de définir les 3 fonctions générales que j'ai déjà postées sur le
forum :
REXGEXPCMP pour comparer (p. ex.: est-ce une adresse email valide)
REGEXP pour extraire (typiquement les adresses email)
REGEXPREP pour faire des substitutions en utilisant les regex.

Ce sont ces 3 fonctions qui manquent en natif.

(voir mon message du 21/05/2014 sous "Extraction de caractères à
l'intérieur d'une chaîne") pour la définition des 3 fonctions en VBA.

Bonne soirée.
Avatar
Jacquouille
Bonjour
Au siècle dernier, un Canadien, bien connu de nos services, avait déjà
planché sur ce problème. Si c'est pour faire une formule et la tirer vers le
bas, il n'y a de neuf que la longueur de la formule.
Je me souviens en effet, que l'on avait proposé d'extraire tous les
caractères situés entre les deux parenthèses, dont la position dans la
chaine était calculée ......
Pas grâve, l'homme a l'habitude de refaire le monde et de réinventer la roue
à chaque fois.

Avec Marcel ... en A1 -->
=STXT(A1;CHERCHE("(";A1;1)+1;CHERCHE(")";A1;1)-CHERCHE("(";A1;1)-1)
Sans logiciel extérieur mais avec 6 caractères de plus-->


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."


"GL" a écrit dans le message de groupe de discussion :
5383d56d$0$2928$

Le 27/05/2014 00:09, MichD a écrit :
Bonjour,

Cela fait quelques fois que tu louanges "RegEx". Qu'est-ce qui t'empêche
de proposer une procédure telle que tu la conçois et nous démontrer les
qualités exceptionnelles du "RegEx". Je suis certain que le demandeur ne
demande pas mieux d'avoir plusieurs suggestions différentes pour
résoudre sa problématique et qui sait, tu inciteras peut-être un certain
nombre de lecteurs à utiliser ton approche!



Alors voilà : RegexBuddy, c'est LE logiciel pour maîtriser parfaitement
les regex : on tape : "regular expression for email" sur Google et le
premier résultat c'est l'aide de RegexBuddy qui propose :

b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b

Maintenant :

A B
-----------------------------------------------------
| <en B1 je met la chaîne à extraire ci-dessous>
| Abanes, Fred (); Abutor,
| Jocelyne(); Abbadi,
| Micheline (); Abbas,
| Marcel (); Adam,
| Chantal (); Amani,
| Hassan ();
|
2| 1 =REGEXP($B$1;"b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b";A1)
3| 2 =REGEXP($B$1;"b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b";A2)
4| 3 =REGEXP($B$1;"b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b";A3)
5| 4 =REGEXP($B$1;"b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}b";A4)

En recopiant vers le bas la formule, on a les adresses email qui
viennent les unes après les autres.

Voilà.

La première fois, ça paraît abscons, mais comme les regex sont partout
(sed, grep, n'importe quel éditeur de texte même Word qui propose la
recherche par "caractères génériques" qui est un ersatz d'expressions
régulières avec une syntaxe à la noix de coco mais bon...) quand on
commence à les maîtriser, on ne peut plus s'en passer.


Le tout, c'est d'ajouter la référence "Microsoft VBScript Regular
Expressions 5.5" à son classeur (Menu Outil de l'éditeur VBA) ou
mieux, à son fichier .xlam de macros préférées (comme ça les RegEx
sont accessibles depuis n'importe quel classeur)

Et de définir les 3 fonctions générales que j'ai déjà postées sur le
forum :
REXGEXPCMP pour comparer (p. ex.: est-ce une adresse email valide)
REGEXP pour extraire (typiquement les adresses email)
REGEXPREP pour faire des substitutions en utilisant les regex.

Ce sont ces 3 fonctions qui manquent en natif.

(voir mon message du 21/05/2014 sous "Extraction de caractères à
l'intérieur d'une chaîne") pour la définition des 3 fonctions en VBA.

Bonne soirée.








---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
GL
Le 27/05/2014 14:17, Jacquouille a écrit :
Bonjour
Au siècle dernier, un Canadien, bien connu de nos services, avait déjà
planché sur ce problème. Si c'est pour faire une formule et la tirer
vers le bas, il n'y a de neuf que la longueur de la formule.
Je me souviens en effet, que l'on avait proposé d'extraire tous les
caractères situés entre les deux parenthèses, dont la position dans la
chaine était calculée ......
Pas grâve, l'homme a l'habitude de refaire le monde et de réinventer la
roue à chaque fois.



Jolie introduction !

Avec Marcel ... en A1 -->
=STXT(A1;CHERCHE("(";A1;1)+1;CHERCHE(")";A1;1)-CHERCHE("(";A1;1)-1)
Sans logiciel extérieur mais avec 6 caractères de plus-->




Je me rebelle : VBScript Regular Expression 5.5 est une référence Office

*On ne peut pas parler de "logiciel extérieur".*

C'est juste que ces andouilles de micromou n'ont pas fourni l'interface
utilisateur Excel (ie les 3 fonctions REGEXP/REGEXPCMP/REGEXPREP)

Sinon tout y est (enfin presque : on peut toujours râler contre la
/saveur/ des RegEx de VBScript, en comparaison à gnu, mais c'est une
autre question...)

Bonne journée.