VBA & Macros

Excel VBA InStr : Comment Trouver une Chaîne de Caractères Facilement

15 janvier 2026 26 vues

La fonction `InStr` en VBA Excel est un outil puissant et indispensable pour manipuler le texte. Que vous ayez besoin de vérifier si une sous-chaîne existe dans une chaîne plus grande, de trouver sa position exacte, ou d'automatiser des tâches de recherche complexes, `InStr` est là pour vous. Cet article vous guidera à travers les bases, les subtilités et les cas d'utilisation avancés de cette fonction essentielle, avec des exemples clairs et des conseils pratiques pour optimiser votre code VBA.

Comprendre la Fonction Excel VBA InStr

La fonction InStr (abréviation de "In String") en VBA Excel est utilisée pour déterminer la position de la première occurrence d'une chaîne de caractères (sous-chaîne) à l'intérieur d'une autre chaîne de caractères. Elle retourne un entier représentant la position de la sous-chaîne, ou 0 si la sous-chaîne n'est pas trouvée. C'est un outil fondamental pour toute personne travaillant avec du texte dans VBA.

Syntaxe de la Fonction InStr

La syntaxe de la fonction InStr est la suivante :

InStr([start, ]string1, string2[, compare])
  • start (Optionnel) : Position de départ de la recherche dans string1. Si omis, la recherche commence au début de string1 (position 1).
  • string1 (Obligatoire) : La chaîne de caractères dans laquelle la recherche est effectuée.
  • string2 (Obligatoire) : La chaîne de caractères à rechercher.
  • compare (Optionnel) : Type de comparaison à utiliser. Peut prendre les valeurs suivantes :
    • vbBinaryCompare (Par défaut) : Effectue une comparaison binaire sensible à la casse.
    • vbTextCompare : Effectue une comparaison textuelle insensible à la casse.

Valeurs de Retour

  • Si string2 est trouvé dans string1, InStr retourne la position de la première occurrence de string2 dans string1.
  • Si string2 n'est pas trouvé dans string1, InStr retourne 0.
  • Si string1 est de longueur nulle, InStr retourne 0.
  • Si string2 est de longueur nulle, InStr retourne start si start est spécifié, sinon retourne 1.
  • Si start est supérieur à la longueur de string1, InStr retourne 0.

Exemples Pratiques d'Utilisation d'Excel VBA InStr

Voici quelques exemples concrets pour illustrer l'utilisation de la fonction InStr dans différents scénarios.

Exemple 1 : Vérifier la Présence d'une Sous-Chaîne

Cet exemple montre comment utiliser InStr pour vérifier si une sous-chaîne spécifique est présente dans une chaîne de caractères.

Sub VerifierPresence()
    Dim texte As String
    Dim recherche As String
    Dim position As Integer

    texte = "Bonjour le monde!"
    recherche = "monde"

    position = InStr(1, texte, recherche, vbTextCompare) 'Comparaison insensible à la casse

    If position > 0 Then
        MsgBox "La chaîne '" & recherche & "' a été trouvée à la position " & position
    Else
        MsgBox "La chaîne '" & recherche & "' n'a pas été trouvée."
    End If
End Sub

Explication :

  1. On définit deux variables de type String : texte qui contient la chaîne dans laquelle on va chercher, et recherche qui contient la sous-chaîne à rechercher.
  2. On utilise InStr pour rechercher la sous-chaîne recherche dans la chaîne texte, en commençant à la position 1 et en utilisant une comparaison textuelle insensible à la casse (vbTextCompare).
  3. Le résultat est stocké dans la variable position.
  4. On utilise une instruction If pour vérifier si position est supérieur à 0. Si c'est le cas, cela signifie que la sous-chaîne a été trouvée, et on affiche un message indiquant sa position. Sinon, on affiche un message indiquant que la sous-chaîne n'a pas été trouvée.

Exemple 2 : Extraire une Partie de Chaîne Avant une Sous-Chaîne

Cet exemple montre comment extraire une partie de chaîne située avant une sous-chaîne spécifique.

Sub ExtraireAvantSousChaine()
    Dim texte As String
    Dim separateur As String
    Dim position As Integer
    Dim resultat As String

    texte = "Nom:Dupont, Prénom:Jean"
    separateur = ","

    position = InStr(1, texte, separateur)

    If position > 0 Then
        resultat = Left(texte, position - 1)
        MsgBox "La partie de chaîne avant le séparateur est : " & resultat
    Else
        MsgBox "Le séparateur n'a pas été trouvé."
    End If
End Sub

Explication :

  1. On définit deux variables de type String : texte qui contient la chaîne à traiter, et separateur qui contient le séparateur à utiliser pour extraire la partie de chaîne.
  2. On utilise InStr pour rechercher la position du séparateur dans la chaîne texte.
  3. Si le séparateur est trouvé, on utilise la fonction Left pour extraire la partie de chaîne située avant le séparateur. La fonction Left prend deux arguments : la chaîne à partir de laquelle on veut extraire, et le nombre de caractères à extraire. Dans ce cas, on extrait position - 1 caractères, car on ne veut pas inclure le séparateur dans le résultat.
  4. On affiche le résultat dans une boîte de message.

Exemple 3 : Remplacer une Sous-Chaîne par une Autre

Bien que InStr ne remplace pas directement du texte, on peut l'utiliser conjointement avec la fonction Replace pour remplacer une sous-chaîne. Cet exemple montre comment remplacer toutes les occurrences d'une sous-chaîne par une autre.

Sub RemplacerSousChaine()
    Dim texte As String
    Dim ancien As String
    Dim nouveau As String
    Dim resultat As String

    texte = "Ceci est un test. Ceci est un autre test."
    ancien = "test"
    nouveau = "exemple"

    resultat = Replace(texte, ancien, nouveau)

    MsgBox "Le texte modifié est : " & resultat
End Sub

Explication :

  1. On définit trois variables de type String : texte qui contient la chaîne à modifier, ancien qui contient la sous-chaîne à remplacer, et nouveau qui contient la nouvelle sous-chaîne.
  2. On utilise la fonction Replace pour remplacer toutes les occurrences de la sous-chaîne ancien par la nouvelle sous-chaîne nouveau dans la chaîne texte.
  3. On affiche le résultat dans une boîte de message.

Exemple 4 : Utiliser InStr avec une Boucle pour Trouver Toutes les Occurrences

Sub TrouverToutesOccurrences()
    Dim texte As String
    Dim recherche As String
    Dim position As Integer
    Dim occurrences As String

    texte = "Le chat est sur le tapis. Le chat dort."
    recherche = "chat"
    position = 1
    occurrences = ""

    Do While InStr(position, texte, recherche, vbTextCompare) > 0
        position = InStr(position, texte, recherche, vbTextCompare)
        occurrences = occurrences & position & ", "
        position = position + 1 ' Avancer pour éviter de retrouver la même occurrence
    Loop

    If occurrences <> "" Then
        occurrences = Left(occurrences, Len(occurrences) - 2) ' Supprimer la dernière virgule et l'espace
        MsgBox "La chaîne '" & recherche & "' a été trouvée aux positions : " & occurrences
    Else
        MsgBox "La chaîne '" & recherche & "' n'a pas été trouvée."
    End If
End Sub

Explication :

  1. On initialise les variables : texte (la chaîne à rechercher), recherche (la sous-chaîne à trouver), position (la position de départ de la recherche, initialisée à 1), et occurrences (une chaîne qui stockera les positions des occurrences trouvées).
  2. On utilise une boucle Do While pour rechercher toutes les occurrences de la sous-chaîne dans la chaîne principale.
  3. À chaque itération de la boucle, on utilise InStr pour trouver la position de la prochaine occurrence de la sous-chaîne, en commençant à la position actuelle.
  4. Si une occurrence est trouvée, on ajoute sa position à la chaîne occurrences, et on incrémente la position de départ pour la prochaine recherche (pour éviter de retrouver la même occurrence).
  5. La boucle continue tant que InStr retourne une valeur supérieure à 0 (c'est-à-dire tant qu'il trouve des occurrences).
  6. Après la boucle, on vérifie si des occurrences ont été trouvées. Si c'est le cas, on supprime la dernière virgule et l'espace de la chaîne occurrences, et on affiche un message indiquant les positions des occurrences.
  7. Sinon, on affiche un message indiquant que la sous-chaîne n'a pas été trouvée.

Bonnes Pratiques et Astuces pour Utiliser Excel VBA InStr

  • Gérer la casse : Utilisez vbTextCompare pour une comparaison insensible à la casse, ou vbBinaryCompare (par défaut) pour une comparaison sensible à la casse.
  • Optimiser la performance : Si vous devez effectuer de nombreuses recherches dans la même chaîne, stockez la longueur de la chaîne dans une variable pour éviter de la recalculer à chaque itération.
  • Vérifier les valeurs de retour : Assurez-vous de toujours vérifier si InStr retourne 0, ce qui signifie que la sous-chaîne n'a pas été trouvée, avant d'effectuer d'autres opérations basées sur la position.
  • Combiner avec d'autres fonctions : InStr est souvent utilisé en combinaison avec d'autres fonctions de manipulation de chaînes, telles que Left, Right, Mid, et Replace, pour effectuer des tâches plus complexes.
  • Éviter les erreurs : Vérifiez que la position de départ (start) est valide et ne dépasse pas la longueur de la chaîne principale.

Erreurs Courantes à Éviter avec Excel VBA InStr

  • Oublier de vérifier si la sous-chaîne est trouvée : Ne pas vérifier si InStr retourne 0 peut entraîner des erreurs si vous essayez d'utiliser la position pour extraire ou manipuler la chaîne.
  • Utiliser une position de départ incorrecte : Une position de départ incorrecte peut entraîner des résultats inattendus ou des erreurs.
  • Ne pas tenir compte de la casse : Utiliser la mauvaise comparaison (sensible ou insensible à la casse) peut entraîner des résultats incorrects.
  • Boucles infinies : Dans les boucles utilisant InStr, assurez-vous de mettre à jour la position de départ pour éviter de retomber sur la même occurrence et créer une boucle infinie.

Alternatives à Excel VBA InStr

Bien que InStr soit la fonction la plus couramment utilisée pour rechercher des sous-chaînes en VBA, il existe d'autres options, notamment l'utilisation d'expressions régulières. Les expressions régulières offrent une plus grande flexibilité et puissance pour la recherche de motifs complexes, mais elles sont plus complexes à apprendre et à utiliser. Pour des besoins simples, InStr reste souvent la solution la plus simple et la plus rapide.

Conclusion

La fonction InStr en VBA Excel est un outil essentiel pour manipuler et analyser le texte. En comprenant sa syntaxe, ses valeurs de retour et en suivant les bonnes pratiques, vous pouvez l'utiliser efficacement pour automatiser des tâches de recherche, d'extraction et de manipulation de chaînes de caractères. N'hésitez pas à expérimenter avec les exemples fournis et à les adapter à vos propres besoins pour maîtriser pleinement cette fonction indispensable.

Questions fréquentes

Qu'est-ce que la fonction InStr en VBA Excel ?

La fonction `InStr` en VBA Excel est utilisée pour trouver la position de la première occurrence d'une chaîne de caractères (sous-chaîne) à l'intérieur d'une autre chaîne de caractères. Elle retourne la position de la sous-chaîne ou 0 si elle n'est pas trouvée.

Comment rendre la recherche insensible à la casse avec InStr ?

Pour effectuer une recherche insensible à la casse, utilisez l'argument `compare` avec la valeur `vbTextCompare`. Par exemple : `InStr(1, texte, recherche, vbTextCompare)`.

Que retourne la fonction InStr si la sous-chaîne n'est pas trouvée ?

Si la sous-chaîne à rechercher n'est pas trouvée dans la chaîne principale, la fonction `InStr` retourne la valeur 0.

Mots-clés associés :

vba string functions excel vba find string vba string manipulation excel vba replace vba string comparison

Partager cet article :