VBA: Extraire une chaîne de caractères délimitée

Voici une puissante fonction VBA pour la manipulation de texte. Elle extrait une chaîne de caractères délimitée par deux autres chaînes.

Pour faire court:
la fonction que je vous ai préparée retournera le texte qui se trouve entre les deux textes adjacents que vous aurez spécifiés. Ainsi, si vous voulez extraire la chaîne "cde" de la chaîne originale "abcdef" – il suffit d'utiliser la fonction qui suit avec pour limites "b" et "f".

NB: Pour la chaîne originale "abbcdef", on obtiendra le même résultat ("cde") avec des limites "ab" et "f".

Cette fonction peut être très pratique lors d'un scraping de contenu d'un site internet, pour analyser des fichiers de log ou encore pour "nettoyer" des données.

Je vous avoue que, personnellement, je me sers de cette fonction quasi quotidiennement!

Détails de la fonction pour trouver un texte délimité en VBA

  • Il est possible d'utiliser une seule limite (voir le tableau plus bas) ou même aucune – les deux limites sont des paramètres optionnels.
  • La fonction retourne une erreur dans le cas où une des limites n'est pas trouvé où dans les cas illogiques où la limite de début se trouve après la limite de fin.
  • La fonction est évidemment utilisable avec un texte qui contient des espaces (exemple: "Code produit: P001")

Utilisation dans une Feuille Excel en tant que UDF

Vous pouvez utiliser cette fonction à l'intérieur de votre code VBA mais également en tant que UDF (Fonction définie par l'utilisateur) dans vos Feuilles. Vous pourrez ainsi utiliser cette fonction avec le contenu des cellules.

Comment insérer une nouvelle fonction utilisateur?

  1. Ouvrez l'éditeur VBA (Alt+F11)
  2. Insérez un nouveau module (Menu: Insertion -> Module)
  3. Collez le code de la fonction dans le module
  4. Fermez al fenêtre de l'éditeur VBA et sauvegardez votre fichier Excel

Dans votre Feuille, l'utilisation ressemblera à ceci:

VBA / Excel: Extraire une chaîne de caractères délimitée

Le texte d'origine est contenu dans une cellule, les "délimiteurs" sont fixes dans la fonction

Excel/VBA: Extraire un texte à partir d'un autre texte

Le texte d'origine ainsi que les deux délimiteurs se trouvent dans les cellules

Comme vous voyez, rien de bien compliqué!

 

Le code VBA de la fonction qui extrait un texte délimité

Et voici donc le code VBA dont vous aurez besoin…

 

Selon vos besoins, vous pouvez modifier le comportement en cas d'erreur: la fonction retourne l'erreur "#N/A" (Error 2042) mais par une simple modification, elle peut retourner une chaîne vide (""). Il suffit d'échanger le commentaire dans les lignes suivantes:

Exemple d’utilisation de la fonction ExtraireChaineDelimitee()

Un exemple d'utilisation en pratique de la fonction ExtraireChaineDelimitee() pour que vous puissiez vous faire une idée.

 

Exemples de résultats (chaînes de caractères) obtenus grâce à cette fonction VBA

Si nous prenons comme base la chaîne "abcdef", voici ce que l'on obtiendra avec les différentes possibilités:

  • ExtraireChaineDelimitee("abcdef", "ab", "ef")    ==> "cd"
  • ExtraireChaineDelimitee("abcdef", "", "ef")        ==> "abcd"
  • ExtraireChaineDelimitee("abcdef", , "ef")           ==> "abcd"
  • ExtraireChaineDelimitee("abcdef", "abc", "")      ==> "def"
  • ExtraireChaineDelimitee("abcdef", "ab")            ==> "cdef"
  • ExtraireChaineDelimitee("abcdef")                     ==> "abcdef"
  • ExtraireChaineDelimitee("abcdef", "bc", "xyz")   ==> erreur #N/A
  • ExtraireChaineDelimitee("abcdef", "ef", "ab")     ==> erreur #N/A
  • ExtraireChaineDelimitee("abcdef", "cd", "cd")    ==> erreur #N/A

Pour conclure…

Cette fonction, en plus d'être utile, démontre les possibilités des UDF (Fonctions définies par l'utilisateur). Si vous trouvez un cas intéressant de l'utilisation pratique de cette fonction, n'hésitez pas à en faire part aux autres  dans les commentaires…

Pour aller plus loin en VBA

Comme vous avez pu constater, le code VBA sur cette page utilise largement la fonction InStr(). En savoir plus sur la fonction VBA InStr.

D'autres liens utiles:

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

12 commentaires sur “VBA: Extraire une chaîne de caractères délimitée”