InStr() – Fonction VBA


Fonction VBA InStr() 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.

Il s'agit donc d'une fonction très pratique, voir indispensable si vous travaillez avec des textes en VBA (ou en Excel).

Syntaxe de la fonction VBA InStr()

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

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

x = InStr(Start, String1, String2, Compare)

L'explication des paramètres

  • DebutDeRecherche ("Start"): le numéro (de type Integer) du caractère à partir duquel la recherche doit se faire. Pour une recherche simple (par exemple vérification si le texte contient un autre texte), la valeur sera "1" ce qui signifie que la recherche se fait dans tout le texte.
  • LeTextePrincipal ("String1"): ceci est le texte dans lequel la recherche se fait.
  • LaChaineRecherchee ("String2"): ceci est le texte (la chaîne de caractères) que l'on essaie de trouver.
  • 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. 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 de résultat de la fonction InStr()

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

  • Si LeTextePrincipal ("String1") est vide, la fonction retournera comme résultat 0
  • Si LaChaineRecherchee ("String2") est vide, la fonction retournera comme résultat la valeur de DebutDeRecherche ("Start") (donc habituellement "1")
  • Si LaChaineRecherchee ("String2") ne se trouve pas dans LeTextePrincipal ("String1"), la fonction retournera comme résultat 0
  • Si LaChaineRecherchee ("String2″) se trouve dans LeTextePrincipal ("String1"), la fonction retournera comme résultat le numéro de la position par laquelle commence LaChaineRecherchee ("String2")

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

Exemples d'utilisation de la fonction InStr()

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 Instr(). Chaque cas est expliqué.

Exemple de fonction & résultatExplication
InStr(1, "Ceci est un test.", "test") = 13On 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é.
InStr(1, "Ceci est un test.", "livre") = 0On recherche "livre" dans "Ceci est un test.". Le mot n'est pas trouvé et la fonction retourne le résultat = 0
InStr(1, "test", "Ceci est un test.") = 0Une 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
InStr(1, "réf: 123-A-126", "a", vbBinaryCompare) = 0On 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
InStr(1, "réf: 123-A-126", "a", vbTextCompare) = 10On 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
InStr(1, "réf: 123-A-126", "123") = 6On recherche "123" dans "réf: 123-A-126" – dans le texte entier. La chaîne "123" est trouvée à la position n°6.
InStr(9, "réf: 123-A-126", "123") = 0On recherche "123" dans "réf: 123-A-126" à partir du 9ème caractère (= les 8 premiers caractères ne sont pas vérifiés! On vérifie seulement dans "-A-126"). La chaîne "123" n'est pas trouvée et le résultat de la fonction est donc 0.
InStr(1, "réf: 123-A-126", "") = 1LaChaineRecherchee ("String2") est vide. La fonction retourne donc la valeur de DebutDeRecherche ("Start"): ici donc 1
InStr(1, "", "123") = 0LeTextePrincipal ("String1") est vide. La fonction retourne donc 0

 

Équivalent de InStr() dans Excel

La fonction InStr() a son équivalent également parmi les fonctions disponibles directement dans les Classeurs Excel. En fait, elle en a deux. La fonction InStr() utilise 4 paramètres (comme vous avez pu voir plus haut). Dans Excel, le paramètre qui détermine si la fonction est ou n'est pas sensible aux majuscules et minuscules est omis et on se retrouve avec deux fonctions différentes:

  • TROUVE()tient compte des majuscules (comme la fonction InStr avec comparaison binaire – vbBinaryCompare)
  • CHERCHE()ne tient pas compte des majuscules et minuscules (comme InStr() utilisant la comparaison textuelle – vbTextCompare)

On peut se demander si Microsoft a voulu jouer sur les mots lors de la traduction des noms de fonctions (qui cherche, trouve, n'est-ce pas?) mais ainsi vous voilà prévenus.

A quoi cela peut-il servir?

Principalement, cette fonction sert à vérifier si un texte contient un autre texte. Déjà cette fonctionnalité nous permet par ex. de vérifier si un fichier ou un dossier existe, vérifier les fichiers journaux (logs), vérifier les références produits,…

De plus, la position exacte du texte trouvé nous permet de "découper" un texte en parties qui nous intéressent (par exemple parser des codes HTML de pages web). Si vous trouvez une autre utilisation intéressante de la fonction InStr(), n'hésitez pas de nous en faire part dans les commentaires…

Pour aller plus loin / utilisation pratique

 

5 0

Pourrait vous intéresser

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.