InStr() – Fonction VBA (tutoriel d’utilisation)

La 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 exactement dans le texte de départ.

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()

La fonction a 4 paramètres dont 2 sont obligatoires et 2 sont facultatifs.

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

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

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

Le détail des paramètres de la fonction InStr()

  • 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. Ce paramètre est facultatif. Si vous le omettez, la recherche se fera dans tout le texte.
  • LeTextePrincipal ("String1"): ceci est le texte dans lequel la recherche se fait. Ce paramètre est obligatoire.
  • LaChaineRecherchee ("String2"): ceci est le texte (la chaîne de caractères) que l'on essaie de trouver dans LeTextePrincipal. Ce paramètre est également obligatoire.
  • 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. Il est facultatif et peut contenir une de ces deux valeurs:
    • 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 "Exemples d'utilisation de la fonction InStr()".

Valeurs possibles du résultat de la fonction InStr()

Selon le contenu des deux textes (chaînes de caractères) à comparer, plusieurs types de résultats de la fonction InStr() 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 ces différentes possibilités…

Exemples d'utilisation de la fonction InStr()

Fonction VBA InStr: exemple d'utilisation
Fonction VBA InStr: exemple d'utilisation

 

Fonction VBA InStr: exemple d'utilisation: Résultat
Fonction VBA InStr: exemple d'utilisation: Résultat

 

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é pour faciliter la compréhension.

Explications supplémentaires:
Remarque importante: Comme le paramètre DebutDeRecherche est facultatif, vous n’êtes pas obligés de le mentionner. Le problème est que ce n’est pas évident de s’y retrouver quand les paramètres sont décalés. Surtout si vous n’utilisez pas directement les valeurs mais des variables. C’est pour cette raison qu’habituellement on place les paramètres optionnels après les paramètres obligatoires pour ne pas créer ce décalage. InStr() est une exception.
La formule x = InStr(1, "abcd", "c") vous donnera donc le même résultat que x = InStr("abcd", "c") !
Attention donc à la déclaration de vos variables. Car c’est le type de données déclaré (String ou Integer)dans la variable qui détermine comment ce paramètre sera “considéré” par la fonction InStr().
Dans les exemples qui suivent, j’ai opté pour l’affichage de DebutDeRecherche partout – pour une raison de lisibilité et pour garder la même structure de syntaxe.
Exemple de fonction & résultat Explications
InStr(1, "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é.
InStr(1, "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
InStr(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
InStr(1, "réf: 123-A-126", "a", 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
InStr(1, "réf: 123-A-126", "a", 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
InStr(1, "réf: 123-A-126", "123") = 6 On 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") = 0 On 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", "") = 1 LaChaineRecherchee ("String2") est vide. La fonction retourne donc la valeur de DebutDeRecherche ("Start"): ici donc 1
InStr(1, "", "123") = 0 LeTextePrincipal ("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 même deux. La fonction InStr() en VBA 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:

  • Fonction Excel TROUVEtient compte des majuscules (tout comme la fonction InStr() avec l'utilisation de la comparaison binairevbBinaryCompare)
  • Fonction Excel CHERCHEne tient pas compte des majuscules et minuscules (comme InStr() utilisant la comparaison textuellevbTextCompare)

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 au moins vous voilà prévenus.


En VBA, vous trouverez également la fonction InStrRev() qui est très proche de InStr() mais présente quelques spécificités intéressantes. Tout sur la fonction VBA InStrRev().

À quoi cette fonction peut-elle bien servir?

Principalement, cette fonction sert à vérifier si un texte contient un autre texte. Déjà cette fonctionnalité nous permet par exemple de vérifier si un fichier existe (ou un dossier), 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 en VBA…

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

Vous pouvez aussi voir le cours VBA en ligne – "VBA: Droit au but" qui est gratuit et se veut le plus efficace possible!

 

51 0

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée.

5 commentaires sur “InStr() – Fonction VBA (tutoriel d’utilisation)”