XL 2016 VBA :Inputbox et adresse mail

dodineau

XLDnaute Occasionnel
Bonjour,
Je cherche depuis longtemps mais impossible de trouver une solution.
J'ai un inputbox dans lequel je voudrais saisir uniquement des adresses mail valides.
Je n'arrive pas à trouver la formule en VBA pour faire cette vérification.
Merci pour votre aide.
A+
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, dodineau

•>dodineau
Une première piste
VB:
Sub test()
Dim strEmail$
SaisieMail:
strEmail = InputBox("Renseignez l'adresse mail, svp.", "Saisie Mail", "prenom.nom@domain.fr")
If StrPtr(strEmail) = 0 Then
Exit Sub
ElseIf IsEmailAddress(strEmail) = False Then
MsgBox "Adresse mail incorrecte!", vbCritical, "Erreur saisie"
GoTo SaisieMail
End If
MsgBox strEmail ' pour test
End Sub
Function IsEmailAddress(txt As String) As Boolean
With CreateObject("VBScript.RegExp")
 .Pattern = "^[\w-\.]+@([\w-]+\.)+[A-Za-z]{2,3}$"
 IsEmailAddress = .test(txt)
End With
End Function
NB: ne fonctionne que sur Windows.

PS: Le pattern reste à peaufiner (car il valide des emails alors qu'il ne devrait pas)
 

dodineau

XLDnaute Occasionnel
Bonjour et merci pour cette réponse.
C'est un peu compliqué pour moi , je ne connais pas certaines fonction de cet exemple (StrPtr).
J'ai tout de même essayé ce code et il y a un faux mail qui passe si par exemple on commence l'adresse par un point, il y en a peut-être d'autres mais je n'ai pas tout essayé.
A+
 

Staple1600

XLDnaute Barbatruc
Bonjour zebanx

•>zebanx
Je te demande une petite faveur, stp
Tu peux publier la fonction dans le corps du message, stp?
Afin que je puisse comparer le pattern utilisé.
Merci d'avance.
PS: je limite le nombre de téléchargements de PJ, car avec le confinement , j'ai le temps de faire le ménage sur mon HD.
 

zebanx

XLDnaute Accro
Bonjour zebanx

•>zebanx
Je te demande une petite faveur, stp
Tu peux publier la fonction dans le corps du message, stp?
Afin que je puisse comparer le pattern utilisé.
Merci d'avance.
PS: je limite le nombre de téléchargements de PJ, car avec le confinement , j'ai le temps de faire le ménage sur mon HD.

Ok ;) (référence : .. regular 5.5 coché mais c'était déjà le cas très surement dans ton exemple).
Ca fait longtemps que pas utilisé les regex, bien rouillé de mon côté !

VB:
Public Function ValidateEmailAddress(ByVal strEmailAddress As String) As Boolean
    On Error GoTo Catch

    Dim objRegExp As New RegExp
    Dim blnIsValidEmail As Boolean

    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;]{0,1}\s*)+$"

    blnIsValidEmail = objRegExp.test(strEmailAddress)
    ValidateEmailAddress = blnIsValidEmail

    Exit Function

Catch:
    ValidateEmailAddress = False
    MsgBox "Module: " & MODULE_NAME & " - ValidateEmailAddress function" & vbCrLf & vbCrLf _
        & "Error#:  " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
 

Staple1600

XLDnaute Barbatruc
Re

Merci pour ta célérité ;)
Du coup, j'emprunte ton pattern pour peaufiner la fonction du message#2 ;)
VB:
Function IsEmailAddress(txt As String) As Boolean
With CreateObject("VBScript.RegExp")
 .Pattern = "^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;]{0,1}\s*)+$"
 IsEmailAddress = .test(txt)
End With
End Function
 

Discussions similaires

Réponses
1
Affichages
107
Compte Supprimé 979
C

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16