InStrRev() – Fonction VBA de recherche dans un texte

La fonction VBA InStrRev() permet de tester si un texte contient une chaîne de caractères spécifiée et si oui, elle permet de savoir où cette chaîne se trouve dans le texte. Contrairement à son "jumeau", la fonction InStr(), la recherche des correspondances avec InstrRew() s'effectue dans le sens inverse – c'est-à-dire en commençant à fin du texte dans lequel on cherche.

Cette fonction est moins connue que InStr() mais elle peut s'avérer très utile dans certaines situations.

Syntaxe de la fonction VBA InStrRev()

x = InStrRev(LeTextePrincipal, LaChaineRecherchee, DebutDeRecherche, TypeDeComparaison)

Dans l'éditeur VBA, les paramètres de la fonction InStrRev() ont les noms (en anglais) suivants:

x = InStrRev(StringCheck, StringMatch, Start, Compare)

L'explication des paramètres de la fonction InStrRev()

  • LeTextePrincipal ("StringCheck"): ceci est le texte dans lequel la recherche se fait. Paramètre obligatoire.
  • LaChaineRecherchee ("StringMatch"): ceci est le texte (la chaîne de caractères) que l'on essaie de trouver. Paramètre obligatoire.
  • DebutDeRecherche ("Start"): le numéro (de type Long) du caractère à partir duquel la recherche doit se faire. N'oubliez pas que la recherche se fait "à partir de la droite" mais la valeur de DebutDeRecherche est comptée à partir de gauche! Voir les exemples plus bas. Si aucune valeur n'est indiquée ou si vous indiquez "-1", la recherche se fait dans tout le texte. Paramètre optionnel.
  • TypeDeComparaison ("Compare"): paramètre technique pour choisir entre recherche Textuelle et Binaire. En gros, ce paramètre détermine si la recherche doit ou pas sensible aux minuscules/majuscules. Paramètre optionnel. Deux valeurs sont disponibles:
    • vbBinaryCompare (ou sa représentation numérique = 0) – avec cette valeur, la recherche EST sensible aux majuscules et minuscules. Ceci est la valeur par défaut.
    • vbTextCompare (ou sa représentation numérique = 1) – avec cette valeur, la recherche N'EST PAS sensible aux majuscules et minuscules.

L'illustration pratique de toutes les possibilités se trouve plus bas, dans la section avec des Exemples d'utilisation.

Valeurs possibles de résultat de la fonction InStrRev()

Selon le contenu des deux textes (chaînes de caractères), plusieurs résultats sont possibles. En voici la liste…

  • Si LeTextePrincipal ("StringCheck") est vide, la fonction retournera comme résultat 0
  • Dans le cas où  LaChaineRecherchee ("StringMatch") est vide et DebutDeRecherche est "-1" ou omis, la fonction retournera comme résultat la longueur de la chaîne principale (LeTextePrincipal). Si DebutDeRecherche est une valeur différente de "-1", la fonction retournera la valeur de DebutDeRecherche.
  • Si LaChaineRecherchee ("StringMatch") ne se trouve pas dans LeTextePrincipal ("StringCheck"), la fonction retournera comme résultat 0
  • Si LaChaineRecherchee ("StringMatch") se trouve dans LeTextePrincipal ("StringCheck"), la fonction retournera comme résultat le numéro de la position par laquelle commence LaChaineRecherchee ("StringMatch") – attention, il s'agit de la position à partir de la gauche!

Les exemples suivent pour montrer les différentes possibilités…

Exemples d'utilisation de la fonction InStrRev()

Les exemples suivants vous permettront de vous faire une idée de différent cas qui peuvent se produire lors de l'utilisation de la fonction VBA InStrRev(). Chaque cas est accompagné d'une explication.

 

Exemple de fonction & résultat Explication
InStrRev("Ceci est un test.", "test") = 13 On recherche "test" dans la chaîne "Ceci est un test." Le mot "test" est trouvé et la fonction retourne comme résultat 13 ce qui correspond à l'emplacement du début du mot recherché.
InStrRev("Ceci est un test.", "livre") = 0 On recherche "livre" dans "Ceci est un test.". Le mot n'est pas trouvé et la fonction retourne le résultat = 0
InStrRev(1, "test", "Ceci est un test.") = 0 Une erreur habituelle: on inverse la chaîne recherchée et le texte dans lequel on cherche. Ici donc, on recherche "Ceci est un test." dans "test". Comme "Ceci est un test." n'est pas trouvé, la fonction retourne le résultat = 0
InStrRev("réf: 123-A-126", "a",  -1, vbBinaryCompare) = 0 On recherche "a" dans "réf: 123-A-126". Comme le type de comparaison est vbBinaryCompare (et donc sensible aux majuscules et minuscules), le "a" n'est pas trouvé. La fonction retourne le résultat = 0
InStrRev("réf: 123-A-126", "a", -1, vbTextCompare) = 10 On recherche "a" dans "réf: 123-A-126". Comme le type de comparaison est vbTextCompare (et donc insensible aux majuscules et minuscules), le "a" est trouvé et la fonction retourne le résultat = 10
InStrRev("réf: 123-A-126", "-", -1) = 11 On recherche "" dans "réf: 123-A-126" dans le texte entier (valeur de DebutDeRecherche = -1). La recherche s'effectue de la droite donc comme premier est trouvé le second caractère "-" de la chaîne: c'est-à-dire à la position n°11 (=> le résultat est compté depuis le début de la chaîne à partir de la gauche).
InStrRev("réf: 123-A-126", "-", 10) = 9 On recherche "" dans "réf: 123-A-126" mais cette fois seulement dans les 10 premiers caractères (de la gauche). Cela signifie que les 4 derniers caractères ne sont pas vérifiés! On vérifie seulement dans "réf: 123-A". La chaîne ""  qui est trouvée dans cet exemple est la première à la position n°9.
InStrRev("réf: 123-A-126", "126") = 12

ou

InStrRev("réf: 123-A-126", "126", -1) = 12

On recherche "126" dans "réf: 123-A-126" – dans le texte entier. La chaîne "126" est trouvée à la position n°12.
InStrRev("réf: 123-A-126", "126", 10) =0 On recherche par la droite "126" dans "réf: 123-A-126" à partir du 10ème caractère de gauche (= les 4 derniers caractères ne sont pas vérifiés!). On vérifie seulement dans "réf: 123-A". La chaîne "126" n'est pas trouvée et le résultat de la fonction est donc 0.
InStrRev("réf: X126-1268-A-126", "126", -1) = 18 On recherche par la droite "126" dans "réf: X126-1268-A-126" – dans le texte entier. La première chaîne "126" trouvée correspond au 3 derniers caractères de la chaîne principale. Le résultat de la fonction est donc 18. Cela correspond au début de la dernière chaîne "126" retrouvée dans la chaîne principale.
InStrRev("réf: X126-1268-A-126", "126", 15) = 11 On recherche par la droite "126" dans "réf: X126-1268-A-126" en ne tenant compte que des 15 premiers caractères (les 5 derniers ne sont pas pris en compte). On ne vérifie que "réf: X126-1268-". Comme on cherche par la droite, c'est cette valeur "126" qui est trouvée en premier: "réf: X126-1268-". Le résultat est donc 11, ce qui correspond à la position du début du "216" en question.
InStrRev("réf: 123-A-126", "") = 14 LaChaineRecherchee ("StringMatch") est vide. Comme DebutDeRecherche ("Start") n'est pas mentionné, le résultat renvoyé correspond à la longueur de LeTextePrincipal: ici donc 14
InStrRev("réf: 123-A-126", "", 10) = 10 LaChaineRecherchee ("StringMatch") est vide. Comme DebutDeRecherche ("Start") est mentionné (=10), la fonction retourne la valeur de DebutDeRecherche ("Start"): ici donc 10
InStrRev("", "123") = 0 LeTextePrincipal ("StringCheck") est vide. La fonction retourne donc 0

 

Équivalent de InStrRev() dans Excel

La fonction InStrRev() n'a pas d'équivalent parmi les fonctions disponibles directement dans les Classeurs Excel. C'est une des raisons de son utilité en VBA. Vous pouvez l'utiliser pour créer votre fonction personnalisée et l'utiliser dans Excel en tant que "UDF" (User Defined Function).

A quoi cette fonction peut-elle servir?

Principalement, cette fonction, tout comme InStr(), sert à vérifier si un texte contient un autre texte. Le point fort de InStrRev() consiste dans le fait que 1) on peut limiter le texte dans lequel on cherche (en laissant tomber la fin du texte selon besoin) et 2) on recherche par la droite donc si le texte recherché se trouve dans le texte de base plusieurs fois, la fonction nous indiquera la position de la dernière occurrence.

On peut donc chercher et découper toute sorte d'information tel que des références produits, etc.  Si vous trouvez une autre utilisation intéressante de la fonction InStrRev(), n'hésitez pas à nous en faire part dans les commentaires…

Pour aller plus loin en gestion de texte en VBA

Et voici quelques autres articles & tutoriels qui pourraient vous être utiles, notamment si vous travaillez avec des textes dans Excel et dans VBA:

Si vous souhaitez améliorer votre connaissance de VBA (et Excel), vous pouvez commencer par les articles suivants…

 

Laissez un commentaire

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