XL 2013 [Résolu] Extraire un mot dans une chaîne de caractères

Lone-wolf

XLDnaute Barbatruc
Bonjour à tous :)

Dans le classeur joint, j'aimerais extraire un mot sous condition, dans une chaîne de caractères. Le mot à chercher est "beau" en C2, mais peut être n'importe quel mot.

J'éssaie de prendre exemple sur les fonctions personnalisées de Jacques Boisgontiers qui utilise vbscript.regexp. La macro est dans le Module 4.
 

Pièces jointes

  • Classeur1.xlsm
    25.9 KB · Affichages: 35

Lone-wolf

XLDnaute Barbatruc
Re Jean Marie

@Staple1600

En attendant, j'ai fait comme ceci.

VB:
Option Explicit
'Rechercher et extraire un mot dans une chaîne de caractères

Sub Rech_Mot()
Dim plage As Range, cel As Range, mot$, txt$

   With Sheets(4)
       Set plage = .Range("a2:a" & .Range("a" & .Rows.Count).End(xlUp).Row)
       mot = .Range("c2").Value
   End With

   For Each cel In plage
        If RechMot(LCase(cel.Value), LCase(mot)) Then
        cel.Offset(0, 1) = mot
        Else
           MsgBox mot & " n'est pas dans la phrase.", , "ERREUR"
           Exit For
        End If
    Next cel
End Sub

Function RechMot(txt As String, mot As String) As Boolean
Dim Pos&

    Pos = 0

    Pos = InStr(txt, mot)

    RechMot = Pos > 0

End Function
 

job75

XLDnaute Barbatruc
Bonsoir Lone-wolf, JM,

Pas besoin de boucle, ceci est très rapide :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If FilterMode Then ShowAllData 'si la feuille est filtrée
Application.ScreenUpdating = False
Application.EnableEvents = False
With Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row + 1)
    .Resize(Rows.Count - 1).ClearContents 'RAZ
    .Formula = "=REPT(""Oui"",ISNUMBER(SEARCH(C$2,A2)/LEN(C$2)))"
    .Value = .Value 'supprime les formules
End With
Application.EnableEvents = True
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Classeur(1).xlsm
    16.4 KB · Affichages: 24

Lone-wolf

XLDnaute Barbatruc
Bonjour job75, le Forum :)

Oui, tu as raison. Même Jean Marie m'avait donné un exemple sur (Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row).
Mais moi des fois...

En tout cas merci pour la solution.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lone-wolf, JM, Pierre,

Oui Pierre dans mon fichier (1) la chaîne de caractères est recherchée où qu'elle soit.

Avec ce fichier (2) c'est le mot qui est recherché.

Avec une formule un peu compliquée pour délimiter le mot :
Code:
.Formula = "=REPT(""Oui"",ISNUMBER(SEARCH("" ""&C$2&"" "","" ""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"","","" ""),""."","" ""),CHAR(133),"" "")&"" "")/LEN(C$2)))"
Intéressant le coup des 3 points non ?

A+
 

Pièces jointes

  • Classeur(2).xlsm
    15.9 KB · Affichages: 22

job75

XLDnaute Barbatruc
Re,

Noter que la longueur de ma dernière formule n'augmente pas beaucoup la durée du calcul :

- formule du post #7 => 0,15 millième de seconde (pour une cellule)

- formule du post #11 => 0,17 millième de seconde.

A+
 

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 291
Membres
111 092
dernier inscrit
ThomasU3