Médiaforma

VBA Excel – Tester la validité d’une adresse e-mail

Cet article va vous montrer comment tester la validité d’une adresse e-mail saisie par l’utilisateur dans une zone de texte. La couleur d’arrière-plan de la zone de texte sera verte si l’adresse est correcte, rouge sinon.

Pour faciliter la comparaison entre la saisie et le modèle attendu, nous allons utiliser une expression régulière. Pour cela, nous allons piocher dans les caractères de remplacement du tableau suivant :

Expression Signification Exemple
^ Début de la chaîne ^a sera vrai si la chaîne commence par un a
$ Fin de la chaîne t$ sera vrai si la chaîne se termine par un t
. N’importe quel caractère a, b, z, T, 1, @, etc
? Répète 0 ou 1 fois le caractère précédent xy? Signifie x ou xy
* Répète 0, 1 ou plusieurs fois le caractère précédent xy* signifie x, xy, xyy, xyyy, etc.
+ Répète 1 ou plusieurs fois le caractère précédent xy+ signifie xy, xyy, xyyy, etc.
\ Le caractère d’échappement \ autorise l’utilisation de caractères réservés \. Est équivalent au point décimal
[xyz] Un caractère unique de l’expression [xyz] signifie x, y ou z
[^xyz] Un caractère unique à l’exclusion des caractères de l’expression [^xyz] signifie un caractère quelconque sauf x, y et z
[a-z] Un caractère unique compris entre les deux bornes [a-zA-Z] signifie une lettre minuscule ou majuscule quelconque
exp1|exp2 exp1 ou exp2 PHP4|PHP5 signifie PHP4 ou PHP5
{min, max} Répétition du caractère précédent entre min et max fois x{2,3} signifie xx ou xxx

x{1,} signifie x, xx, xxx, xxxx, etc.

x{,3} signifie chaîne vide, x, xx ou xxx

Pour savoir si une adresse e-mail est valide, vous pouvez utiliser l’expression régulière suivante :

^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$

Examinons cette séquence :

  • L’adresse e-mail commence (^) par un nombre quelconque de lettres minuscules, de chiffres, de points décimaux et de caractères de soulignement : ^[a-z0-9._-]+
  • Elle est suivie du caractère @
  • D’une séquence de deux ou plus de deux lettres minuscules, chiffres, points décimaux ou caractères de soulignement : [a-z0-9._-]{2,}
  • D’un point décimal : \.
  • Et enfin d’une séquence de 2 à 4 lettres qui termine ($) l’adresse e-mail: [a-z]{2,4}

Cette courte introduction aux expressions régulières étant terminée, nous allons maintenant nous intéresser à son utilisation en VBA.

Dans un premier temps, vous devez valider l’utilisation de la bibliothèque Microsoft VBScript Regular Expression 5.5. Rendez-vous dans la fenêtre Microsoft Visual Basic pour Applications. Lancez la commande Références dans le menu Outils. La boîte de dialogue Références s’affiche. Déplacez-vous dans la zone de liste pour atteindre l’entrée Microsoft VBScript Regular Expression 5.5 et cochez la case qui la précède :

Validez en cliquant sur OK. Ça y est, vous pouvez utiliser des expressions régulières dans le code VBA du classeur.

Insérez une zone de texte dans la feuille. Pour cela, basculez sur l’onglet Développeur du classeur, cliquez sur l’icône Insérer du groupe Contrôles et cliquez sur Zone de texte, sous Contrôles ActiveX :

Assurez-vous que l’icône Mode Création est enfoncée (onglet Développeur, groupe Contrôles), puis double-cliquez sur la zone de texte. La procédure TextBox1_Change() est créée. Complétez-la comme ceci :

Private Sub TextBox1_Change()

    Dim reg As New VBScript_RegExp_55.RegExp

    reg.Pattern = "^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$"

    If reg.Test(TextBox1.Text) = True Then

      TextBox1.BackColor = RGB(0, 255, 0)

    Else

      TextBox1.BackColor = RGB(255, 0, 0)

    End If

End Sub

Examinons ce code.

La première ligne définit l’objet regexp reg :

Dim reg As New VBScript_RegExp_55.RegExp

La deuxième instruction définit l’expression régulière et l’affecte à la propriété Pattern de l’objet reg :

reg.Pattern = "^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$"

Le bloc If suivant applique la méthode Test() de l’objet reg à la zone de texte. Si la valeur retournée est True, la zone de texte correspond au modèle de l’expression régulière. Dans ce cas, l’arrière-plan de la zone de texte est coloré en vert :

If reg.Test(TextBox1.Text) = True Then

  TextBox1.BackColor = RGB(0, 255, 0)

Si la valeur retournée est False, la zone de texte ne correspond pas au modèle de l’expression régulière. Dans ce cas, l’arrière-plan de la zone de texte est coloré en rouge :

Else

  TextBox1.BackColor = RGB(255, 0, 0)

End If