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?
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)
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
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).
=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