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

  • Initiateur de la discussion Initiateur de la discussion Lone-wolf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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

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:
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

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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
14
Affichages
580
Retour