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])Propulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 ».
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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 SubPropulsé par
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.
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.
Découvrez les fonctions lambda Python, leur utilité et quand les utiliser. Comprend des exemples pratiques et des bonnes pratiques pour une mise en œuvre efficace.
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.
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,
InStrest 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 ?
InStrest 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 :
Par exemple, si « cat » apparaît à la position 5 dans une chaîne, vous obtenez
5. S’il n’y est pas, vous obtenez0.Syntaxe d’InStr en VBA
Voici la syntaxe complète d’
InStr: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
startetcompare(InStr(string1, string2)) pour une version plus simple. Mais si vous décidez d’utiliser l’argumentcompare, vous devez également fournir l’argumentstart.Comment fonctionne InStr en VBA
Pensez à
InStrcomme à 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ùstring2correspond. 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’
InStrest 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îneToutefois, si vos chaînes d’entrée valent
Null, la fonction renvoieNull. 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 ».
Le résultat du code ci-dessus est
9car « 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 :
Dans ce cas, tout résultat supérieur à
0signifie 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.
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
InStrest dans une instructionIfpour 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,CityetOrderNotes.If InStr(...) > 0 Then
Comme
InStrrenvoie0lorsqu’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.Tests conditionnels par mots-clés et filtrage textuel
Vous pouvez également utiliser
InStrpour 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.Sensibilité à la casse et modes de comparaison d’InStr
Par défaut,
InStrest sensible à la casse (appelévbBinaryCompare). Si vous recherchez « chicago » mais que la donnée est « Chicago »,InStrrenverra0.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,
InStrrenvoie0car il cherche « fragile » (minuscule) dans « Fragile items ».En revanche, avec
vbTextCompare, la même recherche ignore la casse et renvoie1.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
startindique à VBA où commencer.Dans l’exemple ci-dessous, l’argument
startvaut10: VBA commence donc à partir du 10e caractère au lieu du premier. Il trouve ensuite"delivery"plus loin dans la chaîne.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,
InStrrecherche de gauche à droite.InStrRev, lui, recherche de droite à gauche.Par exemple, nous avons utilisé
InStrRevpour trouver le dernier point d’un e-mail. Le résultat est18, la position du point avant « com ».InStrRevest 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
InStren 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
OrderNoteset signale toute note contenant « noon ».Valider un texte au format e-mail
Vous pouvez aussi utiliser
InStrpour 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.Détecter des séparateurs comme virgules ou tirets
Vous pouvez utiliser
InStrpour 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 parcourtOrderNotes(colonne E), cherche s’il y a une virgule, puis écrit un résultat en colonne F.Erreurs courantes avec VBA InStr
Même avec de l’expérience, vous pouvez rencontrer des problèmes avec
InStrqui 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’
InStrne renvoie pasTrueouFalse. Pour savoir si quelque chose est trouvé, testez si le résultat est> 0.Ignorer la sensibilité à la casse : par défaut,
InStrest sensible à la casse. Si la casse n’a pas d’importance, précisez-le avecvbTextComparedans l’argumentcompare.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 toujours0.VBA InStr vs autres fonctions de chaîne VBA
Puisqu’
InStrsert généralement à localiser un texte dans une chaîne, comparons-la à d’autres fonctions de chaînes.InStr vs Like
L’opérateur
Likesert 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 ».Utilisez
InStrsi vous voulez simplement savoir si un texte existe, etLikelorsque vous devez vérifier des motifs plus complexes.InStr vs Replace
Même si vous pouvez utiliser
InStrpour modifier la valeur entière d’une cellule, la fonctionReplaceremplace un texte précis dans la cellule.Dans l’exemple ci-dessous,
Replaceremplace directement « Fragile » par « Handle Carefully » dans le texte.InStr vs Mid
La fonction Mid sert à extraire du texte d’une chaîne. Vous combinerez donc souvent
MidavecInStrpour 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
InStrtrouve où « @ » apparaît dans l’e-mail, puisMidcommence l’extraction juste après. Le domaine est ensuite écrit en colonne H.InStr vs Split
La fonction
Splitsert à 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 etCity→ colonne C.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
InStrseul 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
InStrest 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 commeMid,ReplaceouSplit, 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.