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
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.
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.
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,
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.
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 .
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.
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.
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,