XL 2019 Vérifier si un Email est valide

Titof06

XLDnaute Junior
Bonjour,

J'ai trouvé ce code si dessous pour vérifier si un Email est valide.
Sauf, que je ne dispose pas de la fonction "IsEmail()" sur mon Excel 2019.

Sub Mail_Ok()
If isEmail(Range("A74")) Then 'Test si A1 contient une adresse email
MsgBox "Oui c'est une adresse email valide :)"
Else
MsgBox "Non ce n'est pas une adresse email valide :-("
End If
End Sub

A74="montest@titof06.fr" au format texte ou string

Si quelqu'un pourrait m'aider, svp, ou me donner une solution ?

Je vous remercie et vous souhaite une agréable journée,

Titof06
 

dysorthographie

XLDnaute Accro
Bonjour,
La fonction IsEmail() n'est pas une fonction native dans Excel ou VBA. Vous pouvez créer votre propre fonction personnalisée pour valider une adresse e-mail en utilisant une expression régulière (RegExp). Voici un exemple de solution :

Code VBA pour valider une adresse e-mail :
Code:
Function IsEmail(ByVal Email As String) As Boolean
    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    
    ' Définir le modèle d'une adresse e-mail valide
    RegEx.Pattern = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$"
    RegEx.IgnoreCase = True
    RegEx.Global = False
    
    ' Valider l'adresse e-mail
    IsEmail = RegEx.Test(Email)
End Function

Exemple d'utilisation dans votre procédure :
Code:
Sub Mail_Ok()
    Dim TestEmail As String
    TestEmail = Range("A74").Value ' Lire l'adresse e-mail depuis la cellule A74
    
    If IsEmail(TestEmail) Then
        MsgBox "Oui, c'est une adresse e-mail valide :)"
    Else
        MsgBox "Non, ce n'est pas une adresse e-mail valide :-("
    End If
End Sub

Explications :

1. Expression régulière :

Le motif ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ vérifie les critères de base pour une adresse e-mail :

Avant le symbole @ : caractères alphanumériques, points, tirets, soulignements, etc.

Après le symbole @ : domaine valide avec au moins un point.

Extension du domaine : au moins 2 caractères (comme .fr ou .com).


2. CreateObject("VBScript.RegExp") :

Crée un objet pour utiliser des expressions régulières dans VBA.

3. Test(Email) :

Retourne `
 

Titof06

XLDnaute Junior
Bonjour,
La fonction IsEmail() n'est pas une fonction native dans Excel ou VBA. Vous pouvez créer votre propre fonction personnalisée pour valider une adresse e-mail en utilisant une expression régulière (RegExp). Voici un exemple de solution :

Code VBA pour valider une adresse e-mail :
Code:
Function IsEmail(ByVal Email As String) As Boolean
    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
   
    ' Définir le modèle d'une adresse e-mail valide
    RegEx.Pattern = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$"
    RegEx.IgnoreCase = True
    RegEx.Global = False
   
    ' Valider l'adresse e-mail
    IsEmail = RegEx.Test(Email)
End Function

Exemple d'utilisation dans votre procédure :
Code:
Sub Mail_Ok()
    Dim TestEmail As String
    TestEmail = Range("A74").Value ' Lire l'adresse e-mail depuis la cellule A74
   
    If IsEmail(TestEmail) Then
        MsgBox "Oui, c'est une adresse e-mail valide :)"
    Else
        MsgBox "Non, ce n'est pas une adresse e-mail valide :-("
    End If
End Sub

Explications :

1. Expression régulière :

Le motif ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ vérifie les critères de base pour une adresse e-mail :

Avant le symbole @ : caractères alphanumériques, points, tirets, soulignements, etc.

Après le symbole @ : domaine valide avec au moins un point.

Extension du domaine : au moins 2 caractères (comme .fr ou .com).


2. CreateObject("VBScript.RegExp") :

Crée un objet pour utiliser des expressions régulières dans VBA.

3. Test(Email) :

Retourne `

Bonjour dysorthographie,



Je vous remercie pour réponse rapide, mais en fait je ne veux pas vérifier si l'adresse mail est correctement inscrite, mais si le mail est valide.

À savoir, si je l'envoie, est-ce que le destinataire recevra ce mail ou si celui-ci reviendra en erreur d'envoi (boite pleine par exemple).



Je vous souhaite une agréable journée,



Titof06
 

fanch55

XLDnaute Barbatruc
Bonjour,
la fonction IsEmail fait partie d'un add-on téléchargeable sur le même site où vous avez trouvé le code.
Cependant, elle ne fait pas mieux que celle proposé par @dysorthographie ( que je salue ) , elle ne fait que vérifier si l'adresse répond à un format précis et non pas qu'elle existe .

Ce que vous voulez, c'est tester si l'adresse existe bien dans le réseau ....
Vous ne pourrez le faire qu'en simulant un envoi de mail en demandant un accusé de réception et décortiquer la réponse quand elle sera retournée ( ce n'est absolument pas de l'immédiat )
Ou utiliser la fonction batch Telnet sur le serveur smtp du destinataire et en décortiquer les messages de retour .
Il existe également des site de vérification en ligne qui fonctionne plus ou moins selon les domaines à interroger .

Bref, rien n'existe dans l'immédiat et je ne pense pas que cela en vaille l'effort .
 

Titof06

XLDnaute Junior
Bonjour,
La fonction IsEmail() n'est pas une fonction native dans Excel ou VBA. Vous pouvez créer votre propre fonction personnalisée pour valider une adresse e-mail en utilisant une expression régulière (RegExp). Voici un exemple de solution :

Code VBA pour valider une adresse e-mail :
Code:
Function IsEmail(ByVal Email As String) As Boolean
    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
  
    ' Définir le modèle d'une adresse e-mail valide
    RegEx.Pattern = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$"
    RegEx.IgnoreCase = True
    RegEx.Global = False
  
    ' Valider l'adresse e-mail
    IsEmail = RegEx.Test(Email)
End Function

Exemple d'utilisation dans votre procédure :
Code:
Sub Mail_Ok()
    Dim TestEmail As String
    TestEmail = Range("A74").Value ' Lire l'adresse e-mail depuis la cellule A74
  
    If IsEmail(TestEmail) Then
        MsgBox "Oui, c'est une adresse e-mail valide :)"
    Else
        MsgBox "Non, ce n'est pas une adresse e-mail valide :-("
    End If
End Sub

Explications :

1. Expression régulière :

Le motif ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ vérifie les critères de base pour une adresse e-mail :

Avant le symbole @ : caractères alphanumériques, points, tirets, soulignements, etc.

Après le symbole @ : domaine valide avec au moins un point.

Extension du domaine : au moins 2 caractères (comme .fr ou .com).


2. CreateObject("VBScript.RegExp") :

Crée un objet pour utiliser des expressions régulières dans VBA.

3. Test(Email) :

Retourne `

Bonjour,
la fonction IsEmail fait partie d'un add-on téléchargeable sur le même site où vous avez trouvé le code.
Cependant, elle ne fait pas mieux que celle proposé par @dysorthographie ( que je salue ) , elle ne fait que vérifier si l'adresse répond à un format précis et non pas qu'elle existe .

Ce que vous voulez, c'est tester si l'adresse existe bien dans le réseau ....
Vous ne pourrez le faire qu'en simulant un envoi de mail en demandant un accusé de réception et décortiquer la réponse quand elle sera retournée ( ce n'est absolument pas de l'immédiat )
Ou utiliser la fonction batch Telnet sur le serveur smtp du destinataire et en décortiquer les messages de retour .
Il existe également des site de vérification en ligne qui fonctionne plus ou moins selon les domaines à interroger .

Bref, rien n'existe dans l'immédiat et je ne pense pas que cela en vaille l'effort .
Bonjour fanch55,

Je vous remercie pour cette réponse claire et précise.

Je ne connais pas TelNet et je n'ai que des bases de Batch.

Je vais chercher.

Je vous remercie encore et vous souhaite une agréable journée,

Titiof06
 

dysorthographie

XLDnaute Accro
Il n'est pas possible de "pinguer" une adresse e-mail directement comme on le fait avec une adresse IP ou un nom de domaine. Les raisons principales sont les suivantes :

1. Différence entre adresse e-mail et serveur :

Une adresse e-mail (utilisateur@domaine.com) n'est pas une ressource réseau directement accessible. Ce que vous pourriez éventuellement tester, c'est si le domaine associé (domaine.com) est actif.


2. Validation au niveau des serveurs de messagerie :

Pour valider une adresse e-mail, il faudrait interagir avec le serveur de messagerie via des protocoles comme SMTP. Cela nécessite un échange réel avec le serveur, qui peut être configuré pour refuser ou ignorer ces requêtes pour éviter les abus.


3. Problèmes de confidentialité et de sécurité :

Vérifier l'existence d'une adresse e-mail en interrogeant des serveurs peut être considéré comme une violation de la confidentialité et est souvent bloqué par les serveurs.

Alternative : Vérification du domaine

Vous pouvez vérifier si le domaine d'une adresse e-mail est actif (accessible via un ping). Voici un exemple VBA pour tester le domaine :
Code:
Private Declare Function Ping Lib "wininet.dll" Alias "InternetCheckConnectionA" _
    (ByVal lpszUrl As String, ByVal dwFlags As Long, ByVal dwReserved As Long) As Boolean

Function IsDomainReachable(ByVal Email As String) As Boolean
    Dim Domain As String
    Dim AtPos As Long
    
    ' Extraire le domaine de l'adresse e-mail
    AtPos = InStr(Email, "@")
    If AtPos = 0 Then
        IsDomainReachable = False
        Exit Function
    End If
    Domain = Mid(Email, AtPos + 1)
    
    ' Ajouter "http://" pour effectuer le ping
    If Ping("http://" & Domain, 0, 0) Then
        IsDomainReachable = True
    Else
        IsDomainReachable = False
    End If
End Function

Exemple d'utilisation :

Sub TestEmailDomain()
    Dim Email As String
    Email = "test@domaine.com"
    
    If IsDomainReachable(Email) Then
        MsgBox "Le domaine est accessible."
    Else
        MsgBox "Le domaine n'est pas accessible."
    End If
End Sub
Étapes importantes pour une vérification avancée :

1. Utilisation de protocoles SMTP :

Vous pouvez établir une connexion avec un serveur SMTP pour simuler une tentative d'envoi.

Cela nécessite un serveur SMTP configuré et peut être complexe à implémenter en VBA.



2. Services tiers :

Il existe des services en ligne comme Hunter.io ou NeverBounce, qui peuvent valider les e-mails via des requêtes API.

Pour un usage VBA simplifié, valider le format de l'e-mail et tester l'accessibilité du domaine est souvent suffisant pour des besoins de base. Si vous souhaitez une vérification plus approfondie, cela dépasse les capacités simples de VBA et nécessite des bibliothèques ou outils spécialisés.
 

Titof06

XLDnaute Junior
Il n'est pas possible de "pinguer" une adresse e-mail directement comme on le fait avec une adresse IP ou un nom de domaine. Les raisons principales sont les suivantes :

1. Différence entre adresse e-mail et serveur :

Une adresse e-mail (utilisateur@domaine.com) n'est pas une ressource réseau directement accessible. Ce que vous pourriez éventuellement tester, c'est si le domaine associé (domaine.com) est actif.


2. Validation au niveau des serveurs de messagerie :

Pour valider une adresse e-mail, il faudrait interagir avec le serveur de messagerie via des protocoles comme SMTP. Cela nécessite un échange réel avec le serveur, qui peut être configuré pour refuser ou ignorer ces requêtes pour éviter les abus.


3. Problèmes de confidentialité et de sécurité :

Vérifier l'existence d'une adresse e-mail en interrogeant des serveurs peut être considéré comme une violation de la confidentialité et est souvent bloqué par les serveurs.

Alternative : Vérification du domaine

Vous pouvez vérifier si le domaine d'une adresse e-mail est actif (accessible via un ping). Voici un exemple VBA pour tester le domaine :
Code:
Private Declare Function Ping Lib "wininet.dll" Alias "InternetCheckConnectionA" _
    (ByVal lpszUrl As String, ByVal dwFlags As Long, ByVal dwReserved As Long) As Boolean

Function IsDomainReachable(ByVal Email As String) As Boolean
    Dim Domain As String
    Dim AtPos As Long
   
    ' Extraire le domaine de l'adresse e-mail
    AtPos = InStr(Email, "@")
    If AtPos = 0 Then
        IsDomainReachable = False
        Exit Function
    End If
    Domain = Mid(Email, AtPos + 1)
   
    ' Ajouter "http://" pour effectuer le ping
    If Ping("http://" & Domain, 0, 0) Then
        IsDomainReachable = True
    Else
        IsDomainReachable = False
    End If
End Function

Exemple d'utilisation :

Sub TestEmailDomain()
    Dim Email As String
    Email = "test@domaine.com"
   
    If IsDomainReachable(Email) Then
        MsgBox "Le domaine est accessible."
    Else
        MsgBox "Le domaine n'est pas accessible."
    End If
End Sub
Étapes importantes pour une vérification avancée :

1. Utilisation de protocoles SMTP :

Vous pouvez établir une connexion avec un serveur SMTP pour simuler une tentative d'envoi.

Cela nécessite un serveur SMTP configuré et peut être complexe à implémenter en VBA.



2. Services tiers :

Il existe des services en ligne comme Hunter.io ou NeverBounce, qui peuvent valider les e-mails via des requêtes API.

Pour un usage VBA simplifié, valider le format de l'e-mail et tester l'accessibilité du domaine est souvent suffisant pour des besoins de base. Si vous souhaitez une vérification plus approfondie, cela dépasse les capacités simples de VBA et nécessite des bibliothèques ou outils spécialisés.
Bonjour dysorthographie,

Je vous remercie pour ces informations pertinentes et très utiles.

Je vais utiliser votre solution pour les noms de domaines.

Pour les autres adresses mails, j'ai cru comprendre qu'en cas d'erreur d'envoi de mail, un numéro d'erreur est généré.
Je vais traiter ces retours d'erreurs de mails via ces erreurs renvoyés.

Je vous remercie et vous souhaite une agréable fin de journée,

Titof06
 

Discussions similaires

Réponses
6
Affichages
380

Membres actuellement en ligne

Statistiques des forums

Discussions
314 898
Messages
2 114 009
Membres
112 072
dernier inscrit
Onyx