Accéder au contenu principal

Fonction VBA InStr : comment rechercher du texte en Excel VBA

Apprenez à utiliser la fonction VBA InStr pour trouver du texte dans des chaînes : syntaxe, exemples, sensibilité à la casse et erreurs fréquentes.
Actualisé 21 sept. 2026  · 9 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Si vous avez déjà écrit plus de quelques macros VBA, vous avez sans doute eu besoin de vérifier si un texte existe dans une cellule. En VBA, InStr est l’une de ces fonctions que l’on finit par utiliser partout. Elle indique où un morceau de texte apparaît dans un autre. Vous pouvez l’utiliser pour vérifier si un texte existe dans une cellule, analyser des valeurs dans une chaîne ou piloter la logique conditionnelle de macros qui dépendent de motifs textuels.

Dans ce guide, je vous présente la syntaxe d’InStr, quelques exemples, le fonctionnement des modes de comparaison (ce point piège plus de monde qu’il ne devrait) et des schémas que vous réutiliserez réellement.

Je vous recommande de commencer par notre parcours de compétences Excel Fundamentals pour consolider vos bases avant de passer au VBA, ou de suivre notre cours Advanced Excel Functions si vous avez déjà un peu d’expérience, afin de voir comment les fonctions boostent l’efficacité de vos analyses.

Qu’est-ce que la fonction VBA InStr ?

InStr est une fonction VBA qui renvoie la position de la première occurrence d’une chaîne au sein d’une autre.

Les résultats se comportent comme suit :

  • Si elle trouve un match, elle renvoie un nombre (la position où commence la correspondance)
  • Si rien n’est trouvé, elle renvoie 0

Par exemple, si « cat » apparaît à la position 5 dans une chaîne, vous obtenez 5. S’il n’y est pas, vous obtenez 0.

Syntaxe d’InStr en VBA

Voici la syntaxe complète d’InStr :

InStr([start], string1, string2, [compare])

Où :

  • start (optionnel) : indique à VBA où commencer la recherche. Si vous l’omettez, VBA commence à la position 1.

  • string1 (obligatoire) : le texte complet dans lequel vous recherchez.

  • string2 (obligatoire) : le texte à trouver.

  • compare (optionnel) : définit le mode de comparaison (sensible à la casse ou non). Si vous le laissez vide, VBA utilise le mode par défaut, généralement sensible à la casse.

Notez que vous pouvez ignorer les arguments start et compare (InStr(string1, string2)) pour une version plus simple. Mais si vous décidez d’utiliser l’argument compare, vous devez également fournir l’argument start.

Comment fonctionne InStr en VBA

Pensez à InStr comme à une lecture d’une phrase de gauche à droite, caractère par caractère.

La fonction part de string1, la parcourt et cherche le premier endroit où string2 correspond. Dès qu’elle trouve une correspondance, elle s’arrête et renvoie la position où elle a commencé.

La position du « match » est importante, car VBA compte à partir de 1, pas de 0. Le premier caractère d’une chaîne est donc en position 1, le second en 2, etc.

Valeurs de retour d’InStr expliquées

Interpréter le résultat d’InStr est simple. Vous obtiendrez l’un des cas suivants :

  • Nombre positif : s’il y a une correspondance, le nombre indique où elle commence.

  • 0 : s’il n’y a aucune correspondance dans la chaîne

Toutefois, si vos chaînes d’entrée valent Null, la fonction renvoie Null. Vous pouvez l’ignorer pour des macros basiques, mais gardez en tête que cette différence peut faire échouer une condition sans bruit.

Exemples simples avec VBA InStr

Voyons maintenant quelques exemples d’utilisation de la fonction VBA InStr.

Trouver un mot dans une phrase

Pour vérifier si le mot « before » est présent dans la note « Deliver before noon ».

Sub Before()

    Dim result As Integer
    result = InStr("Deliver before noon", "before")
    
    MsgBox result

End Sub

Le résultat du code ci-dessus est 9 car « before » commence au 9e caractère.

Vérifier si un caractère existe

Pour vérifier si le caractère « 0 » existe dans une chaîne donnée, utilisez :

Sub ChExist()

    Dim result As Integer
    result = InStr(“A1023”, “0”)
    
    MsgBox result

End Sub

Dans ce cas, tout résultat supérieur à 0 signifie que le caractère a été trouvé.

Rechercher depuis le début d’une chaîne

Pour rechercher depuis le début d’une chaîne, vous n’avez pas besoin d’indiquer la position de départ : cela commence donc à 1. C’est le comportement par défaut tant que vous n’en décidez pas autrement.

Sub ChExist()

    Dim result As Integer
    result = InStr("Report_2026_Final", "2026")
    
    MsgBox result

End Sub

Utiliser VBA InStr dans des instructions If

Dans un fichier réel, vous ne cherchez pas qu’un nombre ; vous devez prendre une décision. La manière la plus courante d’utiliser InStr est dans une instruction If pour filtrer des données.

Tout au long de ce tutoriel, nous utiliserons un jeu de données d’exemple, Orders, avec les colonnes : ID, CustomerName, Email, City et OrderNotes.

If InStr(...) > 0 Then

Comme InStr renvoie 0 lorsqu’aucune correspondance n’est trouvée, on vérifie l’existence du résultat lorsqu’il est supérieur à 0.

Dans l’exemple ci-dessous, on parcourt la colonne OrderNotes (colonne 5). Si le mot « Fragile » est trouvé, on écrit « Handle Carefully » en colonne 6.

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        ' Check if the order notes mention "Fragile"
        If InStr(Cells(i, 5).Value, "Fragile") > 0 Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

Tests conditionnels par mots-clés et filtrage textuel

Vous pouvez également utiliser InStr pour rechercher des mots-clés dans des chaînes, surtout lorsque la formulation varie légèrement. Par exemple, le code ci-dessous vérifie si la note contient « Call » (comme « Call on arrival » ou « Call before delivery »). Il identifie ensuite la ligne et ajoute l’étiquette « Call Customer » en colonne 6.

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        ' Check if the order notes mention “Call”
        If InStr(Cells(i, 5).Value, “Call”) > 0 Then
            Cells(i, 6).Value = “Call Customer”
        End If
        
    Next i

End Sub

Sensibilité à la casse et modes de comparaison d’InStr

Par défaut, InStr est sensible à la casse (appelé vbBinaryCompare). Si vous recherchez « chicago » mais que la donnée est « Chicago », InStr renverra 0.

Pour corriger cela, utilisez l’argument compare :

  • vbBinaryCompare (par défaut) : sensible à la casse (« A » est différent de « a »)

  • vbTextCompare : insensible à la casse (« A » est identique à « a »)

Dans l’exemple ci-dessous, InStr renvoie 0 car il cherche « fragile » (minuscule) dans « Fragile items ».

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbBinaryCompare)
    
    MsgBox result

End Sub

En revanche, avec vbTextCompare, la même recherche ignore la casse et renvoie 1.

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbTextCompare)
    
    MsgBox result

End Sub

VBA InStr avec une position de départ

Parfois, vous ne souhaitez pas démarrer la recherche au début de la chaîne. L’argument start indique à VBA où commencer.

Dans l’exemple ci-dessous, l’argument start vaut 10 : VBA commence donc à partir du 10e caractère au lieu du premier. Il trouve ensuite "delivery" plus loin dans la chaîne.

Sub CheckUrgent()

    Dim result As Integer
    
    result = InStr(10, “Deliver before noon - urgent delivery”, “delivery”)
    
    MsgBox result

End Sub

Le résultat de cet exemple est 31, la position où commence "delivery".

Cette méthode est utile lorsque vous voulez la deuxième occurrence d’un élément, ou ignorer un préfixe connu dans des motifs récurrents.

VBA InStr vs InStrRev

Comme vous l’avez vu, InStr recherche de gauche à droite. InStrRev, lui, recherche de droite à gauche.

Par exemple, nous avons utilisé InStrRev pour trouver le dernier point d’un e-mail. Le résultat est 18, la position du point avant « com ».

Sub CheckChr()

    Dim result As Integer
    
    result = InStrRev("john.jacobs@email.com", ".")
    
    MsgBox result

End Sub

InStrRev est particulièrement utile lorsque vous avez besoin de la dernière occurrence d’un élément ou lorsque vous travaillez avec des noms de fichiers, des e-mails ou des chemins.

Cas d’usage courants d’InStr

Maintenant que nous avons vu comment fonctionne InStr en VBA, voyons des cas d’usage fréquents.

Vérifier si une cellule contient un mot-clé

Supposons que vous avez un jeu de données de commandes clients et que vous deviez signaler des commandes à traiter spécifiquement. Le code parcourt la colonne OrderNotes et signale toute note contenant « noon ».

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If InStr(1, "Deliver before noon", "noon", vbTextCompare) > 0 Then
            ' Logic to mark as "Morning Delivery"
        End If
        
    Next i

End Sub

Valider un texte au format e-mail

Vous pouvez aussi utiliser InStr pour une vérification rapide des formats d’e-mail. Par exemple, le code ci-dessous vérifie si l’e-mail contient @ et écrit « Valid Email Format » en colonne 6.

Sub ValidateEmail()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If InStr(Cells(i, 3).Value, "@") > 0 Then
            Cells(i, 6).Value = "Valid Email Format"
        End If
        
    Next i

End Sub

Détecter des séparateurs comme virgules ou tirets

Vous pouvez utiliser InStr pour vérifier la présence d’un tiret, d’une virgule ou d’un slash dans un texte. Dans l’exemple ci-dessous, le code parcourt OrderNotes (colonne E), cherche s’il y a une virgule, puis écrit un résultat en colonne F.

Sub ValidateEmail()

    Dim i As Integer
    Dim commaPos As Integer
    Dim OrderNotes As String
    
    For i = 2 To 51
        
        OrderNotes = Cells(i, 5).Value
        
        commaPos = InStr(1, OrderNotes, ",")
        
        ' If a comma exists, mark it
        If commaPos > 0 Then
            Cells(i, 6).Value = "Has comma"
        Else
            Cells(i, 6).Value = "No comma"
        End If
        
    Next i

End Sub

Erreurs courantes avec VBA InStr

Même avec de l’expérience, vous pouvez rencontrer des problèmes avec InStr qui rendent votre code surprenant. Voici les pièges les plus fréquents que j’ai rencontrés et comment les éviter :

  • Oublier qu’InStr est indexé à partir de 1 : rappelez-vous que les positions commencent à 1, pas à 0. Si vous venez de Python ou JavaScript, cela peut dérouter au début.

  • Considérer InStr comme True/False : souvenez-vous qu’InStr ne renvoie pas True ou False. Pour savoir si quelque chose est trouvé, testez si le résultat est > 0.

  • Ignorer la sensibilité à la casse : par défaut, InStr est sensible à la casse. Si la casse n’a pas d’importance, précisez-le avec vbTextCompare dans l’argument compare.

  • Inverser string1 et string2 : rappelez-vous que le premier argument est l’endroit où vous cherchez. Le second est ce que vous cherchez. Si vous écrivez InStr(SearchTerm, FullText), vous obtiendrez toujours 0.

VBA InStr vs autres fonctions de chaîne VBA

Puisqu’InStr sert généralement à localiser un texte dans une chaîne, comparons-la à d’autres fonctions de chaînes.

InStr vs Like

L’opérateur Like sert aux correspondances par motif. Par exemple, le code ci-dessous cherche « Fragile », mais utilise le motif *, qui signifie « n’importe quoi avant ou après ».

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If Cells(i, 5).Value Like "*Fragile*" Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

Utilisez InStr si vous voulez simplement savoir si un texte existe, et Like lorsque vous devez vérifier des motifs plus complexes.

InStr vs Replace

Même si vous pouvez utiliser InStr pour modifier la valeur entière d’une cellule, la fonction Replace remplace un texte précis dans la cellule.

Dans l’exemple ci-dessous, Replace remplace directement « Fragile » par « Handle Carefully » dans le texte.

Sub ReplaceOrder()

    Dim i As Integer
    
    For i = 2 To 51
        Cells(i, 5).Value = Replace(Cells(i, 5).Value, "Fragile", "Handle Carefully")
    Next i

End Sub

InStr vs Mid

La fonction Mid sert à extraire du texte d’une chaîne. Vous combinerez donc souvent Mid avec InStr pour extraire le texte après en avoir trouvé la position.

Le code ci-dessous extrait le domaine des e-mails du jeu de données. La fonction InStr trouve où « @ » apparaît dans l’e-mail, puis Mid commence l’extraction juste après. Le domaine est ensuite écrit en colonne H.

Sub ExtractDomain()

    Dim i As Integer
    Dim pos As Integer
    Dim domain As String
    
    For i = 2 To 51
        
        pos = InStr(1, Cells(i, 3).Value, "@")
        
        If pos > 0 Then
            domain = Mid(Cells(i, 3).Value, pos + 1)
            Cells(i, 8).Value = domain
        End If
        
    Next i

End Sub

InStr vs Split

La fonction Split sert à découper un texte en parties selon un séparateur.

Dans l’exemple ci-dessous, le code lit chaque ligne de la colonne A, vérifie s’il y a une virgule, puis sépare le texte en deux parties. Il écrit Name → colonne B et City → colonne C.

Sub SplitTextColumn()

    Dim i As Integer
    Dim lastRow As Integer
    Dim parts As Variant
    Dim text As String
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        
        text = Cells(i, 1).Value
        
        ' Only split if a comma exists
        If InStr(1, text, ",") > 0 Then
            
            parts = Split(text, ",")
            
            Cells(i, 2).Value = parts(0) ' Name
            Cells(i, 3).Value = parts(1) ' City
            
        End If
        
    Next i

End Sub

Bonnes pratiques pour utiliser VBA InStr

Pour éviter les erreurs dans votre VBA, voici quelques bonnes pratiques qui m’ont fait gagner du temps :

  • Utilisez vbTextCompare quand la casse n’a pas d’importance : comme la casse est rarement cohérente dans les données réelles, vous risquez de manquer des correspondances avec le mode par défaut.

  • Combinez avec « If » pour une logique claire : incluez toujours une logique qui renvoie une valeur, car InStr seul ne vous donne qu’un nombre.

  • Testez > 0, pas des positions exactes, sauf si vous avez réellement besoin de la position.

  • Gardez un parsing lisible : évitez d’empiler trop de fonctions sur une seule ligne.

Conclusion

InStr est simple, mais vous l’utiliserez partout. Elle vous donne la position d’une chaîne dans une autre, et ce simple nombre alimente de nombreuses décisions en VBA : savoir si quelque chose existe, où extraire et quoi faire ensuite. Seule, c’est une recherche. Combinée à des fonctions comme Mid, Replace ou Split, elle devient un maillon d’un workflow efficace.

Suivez notre cours Data Analysis in Excel pour maîtriser l’analytique avancée. Suivez aussi notre cours Intermediate Power Query in Excel pour apprendre la transformation de données et le langage M.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Je crée des articles qui simplifient la science des données et l'analyse, en les rendant faciles à comprendre et accessibles.

FAQs

Que renvoie concrètement InStr ?

Elle renvoie la position où commence la correspondance. Si rien n’est trouvé, elle renvoie 0.

InStr est‑elle sensible à la casse ?

Oui, par défaut InStr est sensible à la casse. ”Fragile” et ”fragile” sont traités différemment. Utilisez vbTextCompare si vous ne souhaitez pas une comparaison sensible à la casse.

Que signifie le fait qu’InStr commence à 1 ?

Le premier caractère d’une chaîne est en position 1, pas 0. Cela compte lorsque vous utilisez le résultat dans d’autres fonctions.

Que se passe‑t‑il si l’une des valeurs est Null ?

Le résultat sera également Null, et non 0.

Quelle est la différence entre InStr et InStrRev ?

InStr recherche de gauche à droite, tandis que InStrRev recherche de droite à gauche. Utilisez la seconde lorsque la dernière occurrence est déterminante.

Sujets
Excel

Apprenez avec DataCamp

Cursus

Fondamentaux d'Excel

16 h
Acquérir les compétences essentielles dont vous avez besoin pour utiliser Excel, de la préparation des données à l'écriture de formules et à la création de visualisations. Aucune expérience préalable n'est requise.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow