extraire chaîne de caractères (formule)

C@thy

XLDnaute Barbatruc
Bonjour le forum,

je viens de faire une recherche dans le forum mais il semble que ce que je recherche ne s'y trouve pas...:(

je souhaiterais récupérer
1- tout ce qui se trouve derrière l'@
2- le 1er mot derrière l'@ (entre l'@ et le point)

de préférence par formule...

j'hésite entre le CHERCHE, le TROUVE, le SUBSTITUTE:confused::confused:

ex. toto.titi@xld.lemeilleursite.fr -> 1) xld.lemeilleursite.fr 2) xld

de même tout ce qui est derrière le = dans
bidule(1) = bla bla bla -> bla bla bla
bidule(999) = bling bling -> bling bling

Merci à vous si vous avez une idée sur la question.

Bises

C@thy
 

Staple1600

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Bonsoir à tous


Abba l’académisme, (surtout que jamais il n'y ait une VBA Star'Ac)

Une autre fonction personnalisée (pour le plaisir de croiser du beau monde, et pour agrandir encore un peu l"horizion)
Code:
Function xcathy(r$)
xcathy = Split(Split(r, "@")(1), ".")(0)
End Function
Code:
Sub test()
Dim Email$, i As Byte
Email = "pascal.dupont@direction.finances.gouv.fr/pascal.dupont@finances.gouv.fr"
For i = 0 To 1
MsgBox xcathy(CStr(Split(Email, "/")(i)))
Next i
End Sub
Dans ce cas, renvoie direction puis finances


PS: JNP, un petit pattern tout frais sorti de ton VBE, peut-être ;) ?
( à moins que david84 passe avant toi avec le sien ;) :p )
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Re
dans le cadre des exemples présentés et pour faire plaisir à staple:rolleyes:, à tester (en attendant que Jean-Noël passe par-là:)) :
Code:
Function RegMail(Chaine As Range) As String
Dim oRegExp, Match, Matches
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
    .Global = True
   .Pattern = "^([\w\.\-]+@)([a-zA-Z0-9]+)(\.[a-zA-Z0-9\-]+)+$"
    Set Matches = .Execute(Chaine)
End With
RegMail = oRegExp.Replace(Chaine, "$2")
End Function
A+
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Waooooo très fort ton reggae, David!!!
Personnellement je suis fan de ce qu'on peut faire avec ça, ça m'éclate toujours autant,
même si d'autres solutions sont plus courtes (en nombre d'instructions)...

Vous êtes tous très forts, un grand bravo et Merci à vous tous car tout fonctionne parfaitement

Bises et bonne journée

C@thy
 

david84

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Re c@thy,
Personnellement je suis fan de ce qu'on peut faire avec ça, ça m'éclate toujours autant
Bon, là je ne l'ai pas proposé mais l'intérêt principal d'un RegExp dans ce cas c'est que la même fonction un peu modifiée pourrait te traiter :
1- tout ce qui se trouve derrière l'@
2- le 1er mot derrière l'@ (entre l'@ et le point)
et en plus t'indiquer si la chaîne proposée est bien une adresse mail valide du point de vue syntaxique.
A+
 

david84

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Re c@thy
il serait bien que tu ailles jusqu'au bout...
Bon alors essayons : si je comprends bien ta demande, tu veux extraire certaines parties d'adresses mail d'un ministère.

Donc, la fonction suivante :
- extrait les 2 parties demandées
- si l'adresse mail traitée n'est pas configurée comme adresse ministère (xxx@xxx.xxx.xxx), cela doit te ramener "adresse mail invalide" (si l'adresse mail est une adresse perso de type xxx@xxx.xxx ou xxx.xxx@xxx.xxx, elle est traitée comme une adresse invalide).
Bon, après je ne dis pas que le pattern est complètement au point (on peut être plus précis et ne cibler que certains noms de domaines par exemple, ou ne rendre valide qu'une adresse mail comportant un point entre 2 sous-chaines placées avant l'arobas puisque ce type d'adresse est écrite avec le prénom et le nom séparés par un point (aaa.xxx@ ou aaa-zzz.xxx@ si prénom composé ou aaa.yyy-zzz si nom composé ou aaa-bbb.zzz-xxx si prénom et nom composés) et je n'ai pas la dextérité de Jean-Noël en la matière, mais c'est juste pour te montrer et que tu te mettes au RegExp (cela fera 1 de plus au club:eek:).

Donc, tu rentres cette fonction à tirer vers le bas et vers la droite et tu testes :
Code:
Function RegMail2(Chaine As Range, Rang As Integer) As String
Dim oRegExp, Match, Matches
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
    .Global = True
    .Pattern = "^([a-zA-Z0-9_\.\-]+@)(([a-zA-Z0-9]+)(\.(([a-zA-Z0-9\-])+\.)+(com|org|net|gov|biz|info|name|aero|fr|be|co.uk|it|es|de|info)))+$"
    Set Matches = .Execute(Chaine)
End With
If Matches.Count = 0 Then
RegMail2 = "Adresse non valide"
ElseIf Rang - 1 < 2 Then RegMail2 = oRegExp.Replace(Chaine, "$" & Rang + 1)
End If
End Function
A+
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Bonjour


Je ne doute pas de la probité morale de Cathy mais mon bon David84, on ne sait jamais.
Soyons exhaustif et ajustons le pattern.
.Pattern = "^([a-zA-Z0-9_\.\-]+@)(([a-zA-Z0-9]+)(\.(([a-zA-Z0-9\-])+\.)+(com|org|net|gov|biz|info|name|aero|fr|be|co.uk|it|es|de|info|sex|xxx)))+$"


PS1: Ce n'est que de l'humour...

PS2: JNP a du oublier son pattern dans le freezer ;)

PS3: Bien content si le club des regexpiens xldiens s'agrandit ;)
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Re JM
Ah, bien vu, j'avais oublié certaines extensions possibles toujours utiles si l'on veut traiter le sujet en profondeur...:rolleyes:
JNP a du oublier son pattern dans le freezer
tant qu'il n'est pas enfermé dedans avec;)
Bien content si le club des regexpiens xldiens s'agrandit
Perso, j'en ai compté 4 sur le forum, mais la mayonnaise va finir par prendre:cool:.

A+
 

C@thy

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Je ne doute pas de la probité morale de Cathy
PS1: Ce n'est que de l'humour... ;)

Arf et Niark... c'est un raccourci de la pensée de JM...

PS2: JNP a du oublier son pattern dans le freezer ;)
à mon avis, il est resté accroché à la patèr(n)e...;)

Soyons exhaustif et ajustons le pattern.
.Pattern = "^([a-zA-Z0-9_\.\-]+@)(([a-zA-Z0-9]+)(\.(([a-zA-Z0-9\-])+\.)+
(com|org|net|gov|biz|info|name|aero|fr|be|co .uk|it|es|de|info|sex|xxx)))+$"
Staple, tu es très pattern à liste ...exhaustive

Bises :):cool:

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : extraire chaîne de caractères (formule)

Coucou me revoilou,

j'ai avancé sur le sujet mais... agrrrr... ça ne marche pas
il ne doit pas manquer grand chose, je pense...
Code:
Public D1 As Date, D2 As Date, an As Integer
Sub CalculJoursOuvres()
D1 = DateSerial(2011, 12, 22)
D2 = DateSerial(2011, 12, 26)
Toto = NBJoursOuvres(D1, D2)
MsgBox Toto
End Sub

Function NBJoursOuvres(D1, D2)
Dim I As Long
an = Year(Date)
    For I = D1 To D2
         NBJoursOuvres = NBJoursOuvres + (Weekday(CDate(I)) <> 1 And _
                           Weekday(CDate(I)) <> 7) And CDate(I) <> Fer(an) * True
    Next
End Function

Function Paq(ByVal an As Integer) As Date
Paq = DateSerial(an, 3, 23) + ((2 * (an Mod 4) + (4 * (an Mod 7) + _
   (6 * (((19 * (an Mod 19)) + 24) Mod 30) + 5))) Mod 7) + _
   ((19 * (an Mod 19) + 24) Mod 30) - 1
End Function

Function Fer(an%) 'liste de tous les jours fériés
Dim pq
pq = Paq(an)
Fer = Array(CLng(DateSerial(an, 1, 1)), CLng(DateSerial(an, 5, 1)), CLng(DateSerial(an, 5, 8)), CLng(DateSerial(an, 7, 14)), CLng(DateSerial(an, 8, 15)), CLng(DateSerial(an, 11, 1)), CLng(DateSerial(an, 11, 11)), CLng(DateSerial(an, 12, 25)), CLng(pq) + 1, CLng(pq) + 39, CLng(pq) + 50)
End Function
j'ai une incompatibilité de type (encore un sale type!!!)

Je précise que les 2 dates sont dans la même année (année en cours).

Bises

C@thy
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 825
Membres
104 677
dernier inscrit
soufiane12