web-dev-qa-db-fra.com

formule de validation de courrier électronique Excel

J'ai une colonne où les gens entrent leur adresse e-mail manuellement. Je souhaite valider l'adresse e-mail à l'aide de cette formule:

=AND(FIND(“@”,A2),FIND(“.”,A2),ISERROR(FIND(” “,A2)))

mais Excel présente une erreur indiquant que la formule que vous avez saisie contient une erreur. Pour moi, la formule semble bonne. Avez-vous des suggestions?

20
Hassan Ata Ullah

J'ai eu la même erreur pour votre code, et il semble que vous n'ayez PAS de guillemets "simples", ce qui est différent de ce symbole: ".

Essayez mon orthographe: =AND(FIND("@",A2),FIND(".",A2),ISERROR(FIND(" ",A2))) - l'espoir vous aidera!

MODIFIER:

De plus, pensez à utiliser =AND(NOT(ISERROR(FIND("@",A1))),NOT(ISERROR(FIND(".",A1))),ISERROR(FIND(" ",A1))) - qui évitera les erreurs au cas où @ Ou . Seraient manquants. Pourtant, cela passera comme OK aaa@., Mais je suppose que même une telle approche directe a des droits à utiliser)

20
Peter L.

Une autre façon de valider les e-mails dans Excel est d'utiliser le code VBA: voir le code ci-dessous tiré de http://www.vbaexpress.com/kb/getarticle.php?kb_id=281 , cela fonctionne très bien tel quel, et vous pouvez modifier le code en fonction de vos besoins.

Sub email() 
Dim txtEmail As String 
txtEmail = InputBox("Type the address", "e-mail address") 

Dim Situacao As String 

 ' Check e-mail syntax
If IsEmailValid(txtEmail) Then 
    Situacao = "Valid e-mail syntax!" 
Else 
    Situacao = "Invalid e-mail syntax!" 
End If 
 ' Shows the result
MsgBox Situacao 
End Sub 
Function IsEmailValid(strEmail) 
Dim strArray As Variant 
Dim strItem As Variant 
Dim i As Long, c As String, blnIsItValid As Boolean 
blnIsItValid = True 

i = Len(strEmail) - Len(Application.Substitute(strEmail, "@", "")) 
If i <> 1 Then IsEmailValid = False: Exit Function 
ReDim strArray(1 To 2) 
strArray(1) = Left(strEmail, InStr(1, strEmail, "@", 1) - 1) 
strArray(2) = Application.Substitute(Right(strEmail, Len(strEmail) - Len(strArray(1))), "@", "") 
For Each strItem In strArray 
    If Len(strItem) <= 0 Then 
        blnIsItValid = False 
        IsEmailValid = blnIsItValid 
        Exit Function 
    End If 
    For i = 1 To Len(strItem) 
        c = LCase(Mid(strItem, i, 1)) 
        If InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 And Not IsNumeric(c) Then 
            blnIsItValid = False 
            IsEmailValid = blnIsItValid 
            Exit Function 
        End If 
    Next i 
    If Left(strItem, 1) = "." Or Right(strItem, 1) = "." Then 
        blnIsItValid = False 
        IsEmailValid = blnIsItValid 
        Exit Function 
    End If 
Next strItem 
If InStr(strArray(2), ".") <= 0 Then 
    blnIsItValid = False 
    IsEmailValid = blnIsItValid 
    Exit Function 
End If 
i = Len(strArray(2)) - InStrRev(strArray(2), ".") 
If i <> 2 And i <> 3 Then 
    blnIsItValid = False 
    IsEmailValid = blnIsItValid 
    Exit Function 
End If 
If InStr(strEmail, "..") > 0 Then 
    blnIsItValid = False 
    IsEmailValid = blnIsItValid 
    Exit Function 
End If 
IsEmailValid = blnIsItValid 
End Function 

Pour obtenir des instructions, consultez http://www.vbaexpress.com/kb/getarticle.php?kb_id=281#instr

10
Joel

Je suis tombé sur un problème de firstname.lastname@domain@topdomain pour lequel j'ai fait un amendement qui vérifie le bon ordre du @ et le . avec un Like implicite sans VBA.

=AND(NOT(ISERROR(VLOOKUP("*@*.*",A2,1,FALSE))),ISERROR(FIND(" ",A2)))

MODIFIER
"*?@?*.??*" semble être encore plus descriptif tant que les domaines de premier niveau ont au moins deux caractères (à ce jour, ils le sont).

4
user3819867

=AND(IFERROR(FIND(".",A2),FALSE),IFERROR(FIND(".",A2,FIND("@",A2)),FALSE))

Cela validera le. est après le @ qui n'est pas testé sur la réponse acceptée

1
dariogriffo