Fonction INSTR
La fonction VBA Instr vérifie si une chaîne de texte est trouvée dans une autre chaîne de texte. Il renvoie 0 si le texte n'est pas trouvé. Sinon, il renvoie la position du caractère où se trouve le texte.
La fonction Instr exécute exact allumettes. L'opérateur VBA Like peut être utilisé à la place pour effectuer des correspondances / correspondances inexactes à l'aide de caractères génériques.
Exemple d'instruction
L'extrait de code suivant recherche dans la chaîne « Rechercher dans cette chaîne » le mot « Rechercher ». La fonction Instr renvoie 1 car le texte se trouve en première position.
123 | Sub FindSomeText()MsgBox InStr("Regarder dans cette chaîne", "Regarder")Fin du sous-marin |
Ce deuxième exemple renvoie 7 car le texte se trouve à partir de la 7e position :
123 | Sub FindSomeText2()MsgBox InStr("Ne pas regarder dans cette chaîne", "Regarder")Fin du sous-marin |
Important! La fonction Instr est sensible aux majuscules et minuscules par défaut. Cela signifie que « regarder » ne correspondra pas à « Regarder ». Pour rendre le test insensible à la casse, lisez ci-dessous.
Syntaxe Instr
La syntaxe de la fonction Instr est la suivante :
1 | Instr( [début], chaîne, sous-chaîne, [comparer] ) |
[démarrer] (facultatif) - Cet argument optionnel est la position de départ de la recherche. Entrez 1 pour lancer la recherche à partir de la position 1 (ou laissez vide). Entrez 5 pour lancer la recherche à partir de la position 5. Important! La fonction INSTR calcule la position du caractère en comptant à partir de 1 PAS à partir de la position [départ].
chaîne de caractères - La chaîne de texte à rechercher.
sous-chaîne - La chaîne de texte à rechercher dans la chaîne principale.
[comparer] (facultatif) - Par défaut, Instr est sensible à la casse. En définissant cet argument, vous pouvez rendre Instr Case insensible :
Argument vb Valeur | Argument Entier | La description |
vbBinaryComparer |
0 | (Par défaut) Sensible à la casse |
vbTextComparer |
1 | Pas sensible à la casse |
vbBase de donnéesComparer |
2 | Accès MS uniquement. Utilise les informations de la base de données pour effectuer une comparaison. |
Position de départ de l'instrument
La position de départ Instr vous permet d'indiquer la position du caractère où vous commencerez votre recherche. Gardez cependant à l'esprit que la sortie Instr comptera toujours à partir de 1.
Ici, nous définissons la position de départ sur 3 pour sauter le premier B :
123 | Sous Instr_StartPosition()MsgBox InStr(3, "ABC ABC", "B")Fin du sous-marin |
Le résultat est 6 car le deuxième B est le 6ème caractère de la chaîne.
Test INSTR insensible à la casse
Par défaut, VBA traite "L" différemment de "l". En d'autres termes, VBA est sensible à la casse. Ceci est vrai pour toutes les fonctions de texte. Pour rendre VBA insensible à la casse, définissez l'argument [comparer] sur 1 ou vbTextCompare.
123 | Public Sub FindText_IgnoreCase()MsgBox InStr(1, "Ne pas regarder dans cette chaîne", "rechercher", vbTextCompare)Fin du sous-marin |
Alternativement, vous pouvez ajouter Option Compare Text en haut de votre module de code :
1 | Option Comparer le texte |
12345 | Option Comparer le textePublic Sub FindText_IgnoreCase2()MsgBox InStr("Ne pas regarder dans cette chaîne", "regarde")Fin du sous-marin |
L'option Comparer le texte aura un impact sur tout le code de ce module. Personnellement, je place cela en haut de tout module qui traite du texte parce que je ne me soucie jamais des différences de casse.
Fonction InstrRev
La fonction Instr recherche à partir de la gauche. Au lieu de cela, vous pouvez rechercher à partir de la droite en utilisant la fonction InstrRev. La fonction InstrRev fonctionne de manière très similaire à la fonction Instr.
123 | Sub FindSomeText_FromRight()MsgBox InStrRev("Regarder dans cette chaîne", "Regarder")Fin du sous-marin |
Tout comme la fonction Instr, cela renverra 1 car il n'y a qu'une seule instance de "Look" dans le texte. Mais si nous ajoutons un deuxième « Look », vous verrez qu'il renvoie la position du « Look » le plus à droite :
123 | Sub FindSomeText_FromRight()MsgBox InStrRev("Regardez dans cette chaîne Regardez", "Regardez")Fin du sous-marin |
Ensuite, nous passerons en revue d'autres exemples d'Instr.
Exemples d'InString
Si la chaîne contient une sous-chaîne
Ici, nous utiliserons une instruction If pour tester si une chaîne contient une sous-chaîne de texte :
123456789 | Public Sub FindSomeText()Si InStr("Regardez dans cette chaîne", "regardez") = 0 AlorsMsgBox "Pas de correspondance"AutreMsgBox "Au moins une correspondance"Fin siFin du sous-marin |
Rechercher une chaîne de texte dans une cellule
Vous pouvez également trouver une chaîne dans une cellule :
12345 | Sous Find_String_Cell()Si InStr(Range("B2").Value, "Dr.") > 0 AlorsPlage("C2").Valeur = "Docteur"Fin siFin du sous-marin |
Ou parcourez une plage de cellules pour tester si les cellules contiennent du texte :
12345678910 | Sous Search_Range_For_Text()Cellule tamisée en tant que plagePour chaque cellule de la plage ("b2:b6")Si InStr(cell.Value, "Dr.") > 0 Alorscell.Offset(0, 1).Value = "Docteur"Fin siCellule suivanteFin du sous-marin |
Trouver la position d'un caractère dans une chaîne
Ce code trouvera la position d'un seul caractère dans une chaîne et affectera la position à une variable :
1234 | Sous Find_Char()Dim n As Longn = InStr("Ici regarde ici", "L")Fin du sous-marin |
Chaîne de recherche pour mot
Ce code recherchera un mot dans une chaîne :
12345678910 | Sous Search_String_For_Word()Dim n As Longn = InStr("Ici regarde ici", "Regarde")Si n = 0 AlorsMsgBox "Mot non trouvé"AutreMsgBox "Mot trouvé à la position : " & nFin siFin du sous-marin |
Si la variable contient une chaîne
Ce code testera si une variable de chaîne contient une chaîne de texte :
12345678 | Sous-Variable_Contains_String()Dim str en tant que chaînestr = "Regardez ici"Si InStr(str, "Ici") > 0 AlorsMsgBox "Voici trouvé !"Fin siFin du sous-marin |
Instr et la fonction de gauche
Instr peut être utilisé avec d'autres fonctions de texte comme Left, Right, Len et Mid pour couper le texte.
Avec la fonction Gauche, vous pouvez afficher le texte avant une chaîne de texte :
1234567891011 | Sous Instr_Gauche()Dim str en tant que chaîneDim n As Longstr = "Regardez ici"n = InStr(str, "Ici")MsgBox Gauche(str, n - 1)Fin du sous-marin |
Utilisation d'Instr dans Microsoft Access VBA
Tous les exemples ci-dessus fonctionnent exactement de la même manière dans Access VBA et dans Excel VBA.
Pour en savoir plus, lisez notre article : Fonctions de texte VBA