Récupérer un mot spécifique dans un texte

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Michellaugier
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 18 septembre 2018
Version d'Excel : 2010

Message par Michellaugier » 15 janvier 2019, 08:00

Bonjour,

J'aimerais récupérer dans un texte tout les mots commencements par NG ou TO:

"Aujourd'hui, en l'an TO123 j'ai rencontré Mr NG564 et Mme NG632, tout deux âgées respectivement de TO58 et TO60"

D'avance merci,

Michel
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'737
Appréciations reçues : 375
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 15 janvier 2019, 08:17

Bonjour,

C'est tout à fait faisable en macro, mais peux-tu fournir au préalable un fichier représentatif de ton besoin, que l'on s'en serve comme base de travail ?
Merci de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
M
Michellaugier
Jeune membre
Jeune membre
Messages : 16
Inscrit le : 18 septembre 2018
Version d'Excel : 2010

Message par Michellaugier » 15 janvier 2019, 08:23

Test1.xlsx
(13.98 Kio) Téléchargé 7 fois
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'737
Appréciations reçues : 375
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 15 janvier 2019, 09:11

Voilà ma proposition :
Sub RetrouverMotsComplets()

Dim i As Long, j As Integer, k As Integer, Tablo(), MotsRef(), TextDecoup() As String

MotsRef() = Sheets(2).Range("A2:A" & Sheets(2).Range("A" & Rows.Count).End(xlUp).Row).Value 'Affecte les extraits à retrouver dans une variable tableau
With Sheets(1) 'Toute instruction commençant par "." se rattache à la 1ère feuille
    Tablo() = .Range("B2:B" & .Range("A" & .Rows.Count).End(xlUp).Row).Value 'Affecte la plage à contrôler dans une variable tableau
    For i = LBound(Tablo) To UBound(Tablo) 'Parcourir la plage à contrôler
        If Not Tablo(i, 1) = "" Then
            TextDecoup = Split(Tablo(i, 1), " ") 'Découper le texte mot à mot
            For j = LBound(TextDecoup) To UBound(TextDecoup) 'Parcourir les mots
                For k = LBound(MotsRef) To UBound(MotsRef) 'Parcourir les extraits de référence
                    If TextDecoup(j) Like "*" & MotsRef(k, 1) & "*" Then Sheets(2).Range("C" & Rows.Count).End(xlUp).Offset(1, 0) = Replace(Replace(TextDecoup(j), Chr(10), ""), ",", "") 'Comparer et ajouter le mot si correspondance partielle
                Next k
            Next j
        End If
    Next i
End With
Ajoutée à ton fichier :
Michellaugier.xlsm
(27.47 Kio) Pas encore téléchargé
Merci de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
B
Boisgontierjacques
Membre fidèle
Membre fidèle
Messages : 389
Appréciations reçues : 91
Inscrit le : 5 octobre 2018
Version d'Excel : 2016

Message par Boisgontierjacques » 15 janvier 2019, 09:26

Bonjour,

Avec fonction perso.
Function extrait(cel)
  Application.Volatile
  temp = Replace(cel, ",", " ")
  Dim Tbl()
  a = Split(temp, " ")
  j = 0
  For i = 0 To UBound(a)
    If Left(a(i), 2) = "TO" Or Left(a(i), 2) = "NG" Then
      j = j + 1
      ReDim Preserve Tbl(1 To j)
      Tbl(j) = a(i)
    End If
  Next i
  extrait = Join(Tbl, ",")
End Function
Boisgontier
Copie de Test1.xlsm
(21.53 Kio) Téléchargé 3 fois
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 13'570
Appréciations reçues : 755
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 15 janvier 2019, 09:57

Bonjour à tous ... Michellaugier , Pedro, Jacques Boisgontier

C'est aussi l'objet des expressions régulières (un peu pointues parfois mais terriblement efficaces).
J'ai donc développé une fonction personnalisée générique pour cela.
Function ChercheChaine(chaine, pattern, indice)
  Set obj = CreateObject("vbscript.regexp")
  obj.pattern = pattern
  obj.Global = True
  Set a = obj.Execute(chaine)
  If indice <= a.Count Then ChercheChaine = a(indice - 1) Else ChercheChaine = ""
End Function
Test1.xlsm
(18.6 Kio) Téléchargé 4 fois

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message