VBA: Vérifier la validité d’une adresse e-mail 17


Vérifier en VBA (et donc également en Excel) si une adresse e-mail est valide n'est pas une chose bien compliquée. Les règles ne sont pas très difficiles – pour une utilisation plus pratique, le code qui suit ne s'applique pas aux adresses e-mail contenant des commentaires et d'autres "spécialités" qui ne sont pas utilisées par 99,9% des utilisateurs.

Règles d'une adresse e-mail correcte

Voici donc les règles de base qui sont utilisées dans la fonction VBA proposée:

  • le nom d'utilisateur peut contenir les caractères: "a -> z", "A -> Z", "0 -> 9", de "-", "_", "." et les caractères spéciaux "!#$%&'*+-/=?^_`{|}~"
  • le nom de domaine peut contenir les caractères: "a -> z", "A -> Z", "0 -> 9", "-" et "."
  • utilisation obligatoire d'un "@"
  • minimum 1 caractère avant "@"
  • le nom de domaine et le suffixe après le "@"
  • le nom de domaine ne peut pas commencer ni se terminer par "-"
  • le suffixe doit contenir au moins deux caractères
  • plusieurs points (".") ne peuvent pas se suivre (ex: "..")

La page Wikipédia avec le détail de toutes les règles de validité d'une adresse e-mail (en anglais).

Ceci peut être vérifié par en coup d’œil en une seconde dans le cas des adresses "classiques" (qui ne contiennent pas les caractères spéciaux). Le problème arrive au cas où vous avez un fichier Excel avec une liste de plusieurs centaines, voire milliers, de clients, de fournisseurs,… À ce moment-là, un coup d’œil ne suffit plus.

Et comme aujourd'hui, les adresses e-mail des clients ou des contacts constituent un bien précieux, notamment dans les entreprises, il vaut mieux d'en prendre soin. Une base de donnée des clients collectée via un formulaire web ne sert pas à grande chose si elle est remplie des adresses e-mail incorrectes.

C'est pourquoi je vous propose une fonction qui fera l'affaire. Cette fonction VBA vérifie la validité d'une adresse e-mail selon les critères cités plus haut. Elle retourne comme résultat le Boolean ("VRAI" ou "FAUX") selon que l'adresse e-mail soit valide ou pas.

Code VBA de la fonction qui vérifie si une adresse e-mail est valide

Cette fonction peut être utilisée dans vos macros VBA ou comme une UDF (User Defined Function) – c'est à dire dans les Feuilles Excel tout comme n'importe quelle autre fonction Excel (voir la capture d'écran).

VBA / Excel: Vérifier adresse e-mail

VBA / Excel: Vérifier adresse e-mail

Voici donc le code VBA…

 

L'exemple de l'utilisation de la fonction AdresseEmailValide dans une procédure (Sub)

Cet exemple vérifie l'a validité de l'adresse "info@monwebsite.fr" et renvoie un message avec le résultat.

À vous de jouer maintenant…

Pour aller plus loin

Et voici quelques liens vers d'autres pages d'Excel-Malin.com qui pourraient vous être utiles…

8 0

Pourrait vous intéresser

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

17 commentaires sur “VBA: Vérifier la validité d’une adresse e-mail

  • Chawki

    Bonjour,

    merci beaucoup pour cet exemple. Pouvez-vous m'expliquer aps à pas comment l'intégrer dans un ficheir Excel?

    Merci beaucoup

  • Chawki

    Bonjour,

    je suis arrivé à intégrer la fonction.

    Un problème: elle ne teste pas la longueur du l'extension domaine, qui devrait être au moins de 2 caractères. "Info@monsiteweb.f" est valide pour la fonction.

    Merci beaucoup

    • excel-malin.com Auteur du billet

      Bonjour,
      content d'entendre que vous avez réussi à intégrer la fonction.
      Merci pour votre remarque pertinente sur la longueur du suffixe.

      J'ai ajouté cette vérification ainsi que trois autres:
      – plusieurs points "." ne peuvent pas se suivre
      – après l'@, il ne peut y avoir qu'un seul point
      – le nom de domaine ne peut pas commencer ni se terminer par un "-"
      & le suffixe doit contenir au moins deux caractères

      La fonction est donc à présent plus fiable qu'auparavant.
      Merci et bien à vous,
      Martin

      • Chawki

        Merci infiniment pour l'ajout.

        Je n'ai aps copié en revanche la partie Sub. Pouvez-vous m'expliquer comment ça amrche?

        Et si possible, dans la colonne A, j'aurai les adresses email (A2, A3 etc.) Dans la colonne B j'ai placé la fonction =AdresseEmailValide(A2)

        Je souhaiuterais appliquer une mise en forme conditionnelle à la colonne A en fonction du résultat affiché par B. Du genre si B"VRAI" ou "TRUE", mettre en forme la cellule en rouge. J'ai essayé la mise en forme conditionnelle avec la syntaxe =B2″VRAI" mais rien ne se passe.

        Merci beaucoup

      • Chawki

        Encore une fois pardon.

        J'ai essayé la nouvelle fonction, mais elle me renvoie "faux" pour les emails valides et #VALEUR! pour les cellules vides ou qui ne contiennent pas d'arobase, alors qu'on pourrait avoir des enregistrements sans adresse email. Voir exemple plus abs, où une adresse correcte est signalée fausse parmi les autres erreurs.

        (Je n'ai pas copié la partie SUB, je ne sais pas comment cela fonctionne ni où la placer dans le module. Une assistance là serait super, voir mon précédent message)

        Quelques exemples:
        aladia87.@hotmailfr FAUX
        andromede3yahoo.fr #VALEUR!
        eva_joly590@msn.com FAUX
        xinaaman@hotmail.f FAUX

        Merci beaucoup

        • excel-malin.com Auteur du billet

          Re-bonjour,
          1) pour la fonction: j'ai été un peu trop rapide et je n'ai pas testé assez. Maintenant c'est corrigé et cela devrait être OK. J'ai testé bien mieux 😉

          2) pour le Sub: en fait, c'est une procédure qui exécute du code. Contrairement à une fonction VBA, on ne peut y accéder différemment (via Alt + F8) à partir d'Excel sans modifier le contenu des Feuilles (tandis qu'une fonction peut être utilisée dans les cellules dans un Classeur tout comme les fonctions de base d'Excel). C'est subtil, je sais 😉

          L'avantage d'un Sub (dans le cas comme celui qui se trouve sur cette page) est que vous ne devez rien changer dans vos fichiers Excel – il suffit de tout simplement copier le code (le Sub et la Function) dans un module et le Sub va fonctionner. Le rôle principal d'une fonction est de prendre une information (un "argument"), la traiter et retourner un résultat. Une "procédure" (donc le Sub) est un peu la "sauce qui se trouve autour" – et sert le plus souvent, comme son nom l'indique, gérer toute la procédure – exemple: une procédure peut ouvrir un fichier, effectuer des calculs, vous informer si tout s'est bien passé, sauvegarder et fermer le fichier.

          Je prépare justement un tutoriel à ce sujet…

          3) le format conditionnel:
          Comme une image vaut 1000 mots, je vous ai fait quelques captures d'écran et les ai mises dans ce fichier PDF

          J'espère que cela vous aide.
          Cordialement, Martin

      • Chawki

        Bonjour,

        C'est curieux, j'ai toujours un problème avec la fonction.

        J'obtiens systématiquement le résultat suivant:

        aladia87.@hotmailfr #NOM?

        J'appelle la fonction dans ma cellule B2 avec la formule suivante: "=AdresseEmailValide(A2)" et ainsi de suite, mais j'obtiens le message #NOM?

        J'ai pourtant recopié l'intégralité de la formule.

        Cordialement,
        Chawki

        • excel-malin.com Auteur du billet

          C'est en effet curieux. Je viens de réessayer sur deux ordinateurs et cela fonctionne…
          Le "#NOM?" signifie que Excel ne trouve pas la fonction en question. Vérifiez deux choses:
          – les macros sont bien autorisées dans la classeur
          – le code de la fonction se trouve dans un Module

          J'ai fait un fichier qui fonctionne chez moi et qui ne contient que la formule sur la vérification des emails. Vous pouvez le télécharger et voir s'il fonctionne chez vous: test_email.xlsm

          Bien à vous, Martin