Extraire des adresses email à partir d’un texte donné, Excel VBA

Extraire des adresses email à partir d’un texte donné, Excel VBA

Voici un code VBA détaillé qui extrait les adresses email à partir d’un texte donné dans Excel. Ce code utilise des expressions régulières (RegEx) pour rechercher et extraire les adresses email d’un bloc de texte.
Explication :
En VBA, nous pouvons utiliser les Expressions régulières (RegEx) pour rechercher des motifs dans une chaîne de texte. Une adresse email suit un format standard, comme utilisateur@domaine.com, et les expressions régulières sont parfaites pour identifier ce genre de motif.
Ce code crée une fonction VBA qui :
1. Accepte un bloc de texte en entrée.
2. Recherche les adresses email dans ce texte à l’aide d’une expression régulière.
3. Extrait toutes les adresses email valides trouvées.
4. Retourne une liste de ces adresses email.
Prérequis :

  • Vous devez activer la référence Microsoft VBScript Regular Expressions 5.5 dans l’éditeur VBA d’Excel. Pour ce faire :

1. Dans l’éditeur VBA, allez dans OutilsRéférences.
2. Faites défiler la liste et cochez Microsoft VBScript Regular Expressions 5.5.
3. Cliquez sur OK.
Voici le code complet :
Code VBA : Extraire les adresses email d’un texte

Option Explicit
' Cette fonction extrait toutes les adresses email d'un texte donné.
Function ExtraireEmails(texte As String) As String
    Dim regEx As Object
    Dim matches As Object
    Dim match As Variant
    Dim listeEmails As String
    Dim patternEmail As String
    ' Définir le motif pour une adresse email de base
    patternEmail = "([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})"
    ' Créer un objet RegExp
    Set regEx = CreateObject("VBScript.RegExp")
    ' Définir les propriétés de l'expression régulière
    regEx.IgnoreCase = True       ' Ignorer la casse lors de la recherche (par exemple, 'exemple.com' et 'Exemple.com' sont considérés comme identiques)
    regEx.Global = True           ' Trouver toutes les occurrences dans le texte, pas juste la première
    regEx.Pattern = patternEmail  ' Définir le motif de l'expression régulière
    ' Exécuter l'expression régulière sur le texte donné
    Set matches = regEx.Execute(texte)
    ' Initialiser une chaîne vide pour stocker les résultats
    listeEmails = ""
    ' Boucle à travers tous les résultats et les ajouter à la chaîne de résultats
    For Each match In matches
        listeEmails = listeEmails & match.Value & vbCrLf
    Next match
    ' Retourner la liste des emails sous forme de chaîne
    If Len(listeEmails) > 0 Then
        ' Supprimer le dernier retour à la ligne pour la propreté
        listeEmails = Left(listeEmails, Len(listeEmails) - 2)
    End If
    ExtraireEmails = listeEmails ' Retourner la liste des emails
    ' Nettoyage
    Set regEx = Nothing
    Set matches = Nothing
End Function
' Tester la fonction
Sub TesterExtraireEmails()
    Dim texteAAnalyser As String
    Dim emailsExtraire As String
    ' Exemple de texte contenant des emails
    texteAAnalyser = "Voici des emails : john.doe@example.com, jane_doe@domaine.co.uk, et test123@xyz.org."
    ' Appeler la fonction pour extraire les emails
    emailsExtraire = ExtraireEmails(texteAAnalyser)
    ' Afficher les emails extraits dans la fenêtre immédiate (Ctrl + G)
    Debug.Print emailsExtraire
End Sub

Explication détaillée du code :
1. Motif de l’Expression Régulière :
Le motif utilisé ici est conçu pour correspondre aux adresses email standards :

2. patternEmail = « ([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}) »

  • [a-zA-Z0-9._%+-] : Correspond à tout caractère alphanumérique et à certains caractères spéciaux (point, souligné, pourcentage, plus, et tiret).
  • + : Assure que le groupe de caractères précédent apparaisse au moins une fois.
  • @ : Correspond au symbole @.
  • [a-zA-Z0-9.-] : Correspond au nom de domaine, qui peut inclure des lettres, des chiffres, des points et des tirets.
  • \. : Correspond littéralement au point . (dot).
  • [azA-Z]{2,4} : Correspond au domaine de premier niveau (TLD), comme .com, .org, etc., avec une longueur minimale de 2 caractères et maximale de 4.

3. Création de l’objet RegExp :
Nous créons un objet RegExp et le configurons :

Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True    ' Ignorer la casse lors de la correspondance
regEx.Global = True        ' Trouver toutes les correspondances dans le texte, pas juste la première
regEx.Pattern = patternEmail ' Définir le motif de l'expression régulière

4. Exécution de l’expression régulière :
La méthode Execute exécute l’expression régulière sur le texte fourni. Elle retourne toutes les correspondances trouvées dans le texte :

Set matches = regEx.Execute(texte)
5. Construction du résultat :
Nous parcourons la collection matches, qui contient toutes les adresses email trouvées, et les ajoutons à la chaîne listeEmails :

For Each match In matches
listeEmails = listeEmails & match.Value & vbCrLf
Next match
Chaque adresse email est séparée par un retour à la ligne (vbCrLf).
6. Retour des emails extraits :
Après avoir parcouru toutes les correspondances, nous retournons la liste des adresses email sous forme de chaîne. Nous supprimons également le dernier retour à la ligne pour que la sortie soit propre :

If Len(listeEmails) > 0 Then
    listeEmails = Left(listeEmails, Len(listeEmails) - 2)
End If

7. Test de la fonction :
Dans la sous-routine TesterExtraireEmails, nous fournissons un texte exemple contenant des adresses email. La fonction ExtraireEmails est appelée, et le résultat est imprimé dans la fenêtre immédiate :

Debug.Print emailsExtraire
Exemple de sortie :
Pour le texte d’exemple suivant :
Voici des emails : john.doe@example.com, jane_doe@domaine.co.uk, et test123@xyz.org.
La sortie dans la fenêtre immédiate (Ctrl + G) sera :
john.doe@example.com
jane_doe@domaine.co.uk
test123@xyz.org
Notes :

  • Personnalisation du Motif : Vous pouvez personnaliser l’expression régulière pour correspondre à des formats d’email plus complexes si nécessaire. Par exemple, vous pouvez vouloir permettre des domaines de premier niveau plus longs, comme .photography ou .technology.
  • Performances : Cette approche fonctionne bien pour des textes de taille raisonnable. Pour de très grands blocs de texte ou des analyses fréquentes, des optimisations peuvent être envisagées.
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x