Fonction VBA : regexExtract

La fonction VBA regexExtract extrait une ou plusieurs parties d'une chaîne de caractères en utilisant des expressions régulières.

Utilisation :

regexExtract(texte, expression_régulière)

Si vous ne savez pas ce qu'est une expression régulière ou si vous ne savez pas comment en écrire une, commencez par bien lire le tutoriel de la fonction REGEXMATCH de Google Sheets avant de poursuivre.

Extraction sans parenthèses

La fonction regexExtract extrait ici le premier groupe de caractères en majuscules :

Sub exemple()
    
    texte = "ABC-7-DEFG-76-IJ"
    
    'Premier groupe de caractères en majuscules
    MsgBox regexExtract(texte, "[A-Z]+")
    
End Sub
excel vba ref regexextract
La regex ne contient ici aucune parenthèse, la valeur extraite est donc renvoyée directement sous forme de texte.

Extraction avec parenthèses

La fonction regexExtract doit extraire maintenant le premier groupe de caractères en majuscules en ignorant le premier (en vérifiant qu'il soit bien précédé par un caractère non alphanumérique).

Pour éviter de conserver le caractère non alphanumérique de test, des parenthèses sont utilisées pour définir la partie à conserver :

Sub exemple()
    
    texte = "REF = ABC-7-DEFG-76-IJ"
    
    'Premier groupe de caractères en majuscules à l'intérieur du texte
    arrayDebug regexExtract(texte, "\W([A-Z]+)")
    
End Sub
excel vba majuscules regexextract
Lorsqu'une regex contient des parenthèses, la ou les valeurs extraites sont renvoyées sous forme de tableau (pour afficher le contenu du tableau dans cet exemple, la fonction arrayDebug est utilisée).

Extraction cette fois-ci des 3 groupes de caractères en majuscules à l'aide de 3 paires de parenthèses :

Sub exemple()
    
    texte = "REF = ABC-7-DEFG-76-IJ"
    
    '3 groupes de caractères en majuscules à l'intérieur du texte
    arrayDebug regexExtract(texte, "\W([A-Z]+)[^A-Z]+([A-Z]+)[^A-Z]+([A-Z]+)")
    
End Sub
excel vba msgbox array regexextract

Si vous ne souhaitez pas obtenir un résultat sous forme de tableau, précisez simplement un séparateur en 3e argument :

Sub exemple()
    
    texte = "REF = ABC-7-DEFG-76-IJ"
    
    '3 groupes de caractères en majuscules à l'intérieur du texte
    MsgBox regexExtract(texte, "\W([A-Z]+)[^A-Z]+([A-Z]+)[^A-Z]+([A-Z]+)", ", ")
    
End Sub
excel vba msgbox regexextract

Plus d'exemples

D'autres exemples d'expressions régulières sont disponibles sur la page de la fonction REGEXREPLACE de Google Sheets (ces regex sont utilisables avec regexExtract).

Remarque : cette fonction nécessite l'installation du pack de fonctions XLP (un add-in gratuit pour Excel qui ajoute 92 nouvelles fonctions).