Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 '-------------------------------------------------------------
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
'-------------------------------------------------------------
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 '-------------------------------------------------------------
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 '-------------------------------------------------------------
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
'-------------------------------------------------------------
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 '-------------------------------------------------------------
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!
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!
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!
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.
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 (Fred.Abanes@gentris.fr); Abutor,
| Jocelyne(jocelyne.abutord@gentris.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);
|
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.
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.
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
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-->
Marcel.Abbas@gentris.fr
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$426a74cc@news.free.fr...
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 (Fred.Abanes@gentris.fr); Abutor,
| Jocelyne(jocelyne.abutord@gentris.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);
|
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
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
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.
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-->
Marcel.Abbas@gentris.fr
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...)
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...)