Rechercher une partie de chaine de caractere dans une cellule

Hervec

XLDnaute Nouveau
Bonjour à tous,

Help ! Je vous explique. Je dois traiter des milliers de lignes et je cherche une formule permettant pour chaque ligne de vérifier si une partie de la chaine de caractere d'une cellule est présente dans la chaine de caractere d'une autre cellule.

Exemple 1 avec une ligne contenant CELLULEA "bateau marin" et CELLULEB "vin bouteille eau"
=> test pour trouver dans la cellule A par exemple 3 caracteres qui se suivent de la celule B : résultat OK (la cellule A contient bien "eau")

Merci d'avance
 

Dedekind

XLDnaute Nouveau
Re : Rechercher une partie de chaine de caractere dans une cellule

Bonjour,

Alors je n'ai pas de solution complète à te proposer dans la mesure ou il manque pas mal d'infos mais je peux te donner une piste.

Tu peux utiliser une fonction du style :

Function Teste(ATester As String, MonPattern As String, MonType As String) As Boolean
Dim Match, Matches
Application.Volatile
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = MonPattern
Set Matches = .Execute(ATester)
If MonType = "Unique" Then
If Matches.Count = 1 Then Teste = True Else Teste = False
Else
If Matches.Count >= 1 Then Teste = True Else Teste = False
End If
End With
End Function


En premier argument tu mets la chaine à tester, en second celle qui tu veux chercher dans la première, et en dernier argument "Unique" si tu veux que la seconde chaine ne soit qu'une seule fois dans la première. Du coup tu peux faire des boucles de test en extrayant des chaines des tailles que tu veux pour le second argument (fonction mid par exemple). Tu peux également utiliser des pattern excel à la place d'une chaine en second argument.

Voila j'espère que ça t'aidera :cool:

Edit : en PJ un exemple, tu peux m'envoyer ton fichier avec plus de précision sur ce que tu souhaites faire si tu ne t'en sors pas
 

Pièces jointes

  • Classeur1.xlsm
    14.9 KB · Affichages: 44
  • Classeur1.xlsm
    14.9 KB · Affichages: 48
  • Classeur1.xlsm
    14.9 KB · Affichages: 48
Dernière édition:

Hervec

XLDnaute Nouveau
Re : Rechercher une partie de chaine de caractere dans une cellule

Merci à tous les deux pour vos retours.

@ Sousou => merci pour la formule mais en l'état la difficulté c'est que ce n'est qu'une petite partie de la chaine de caractere (dans l'exemple 3 lettres consécutives) qui est recerchée dans l'autre cellule.:confused:

@ Dedekind => je n'y connait pas grand chose quand cela dépasse l'utilisation de formules ... :eek: Peux-tu me dire ou faut-il que je rentre ce code et je définie les arguments. Par ailleurs, est ce que cela permet bien de paramétrer qu'il s'agit de retrouver dans l'autre cellule la présence par exemple de 3 lettres consécutives présentes dans la premiere cellule ?

Encore merci pour votre aide.
 

job75

XLDnaute Barbatruc
Re : Rechercher une partie de chaine de caractere dans une cellule

Bonjour le fil,

Voyez cette fonction VBA dans le fichier joint :

Code:
Option Compare Text 'la casse est ignorée

Function COMMUN$(t1$, t2$, n%)
Dim i%
For i = 1 To Len(t1) - n + 1
  If InStr(t2, Mid(t1, i, n)) Then COMMUN = Mid(t1, i, n): Exit Function
Next
End Function
La recherche s'arrête sur le premier texte trouvé.

A+
 

Pièces jointes

  • Texte en commun(1).xls
    35.5 KB · Affichages: 34
Dernière édition:

job75

XLDnaute Barbatruc
Re : Rechercher une partie de chaine de caractere dans une cellule

Re,

Si l'on veut récupérer tous les textes en commun :

Code:
Function COMMUN$(t1$, t2$, n%)
Dim i%
For i = 1 To Len(t1) - n + 1
  If InStr(t2, Mid(t1, i, n)) Then COMMUN = COMMUN & "-" & Mid(t1, i, n)
Next
COMMUN = Mid(COMMUN, 2)
End Function
L'exécution sera bien sûr plus longue.

Fichier (2).

A+
 

Pièces jointes

  • Texte en commun(2).xls
    36 KB · Affichages: 39
Dernière édition:

job75

XLDnaute Barbatruc
Re : Rechercher une partie de chaine de caractere dans une cellule

Re,

Si l'on veut que chaque texte trouvé ne soit restitué qu'une seule fois :

Code:
Function COMMUN$(t1$, t2$, n%)
Dim i%, t$
For i = 1 To Len(t1) - n + 1
  t = Mid(t1, i, n)
  If InStr(t2, t) Then If InStr(COMMUN, t) = 0 Then COMMUN = COMMUN & "-" & t
Next
COMMUN = Mid(COMMUN, 2)
End Function
En fait ce n'est probablement pas très intéressant car plus long et utile surtout pour n = 1 ou 2.

Fichier (3).

A+
 

Pièces jointes

  • Texte en commun(3).xls
    36.5 KB · Affichages: 38

Discussions similaires

Statistiques des forums

Discussions
312 396
Messages
2 088 054
Membres
103 709
dernier inscrit
FrrankX