Rechercher un mot (et pas une chaine) dans une cellule

phendoc

XLDnaute Nouveau
Bonjour,
Je rencontre un problème avec la recherche de mots, car les solutions via formules ne détectent que la chaine de caractères.
J'ai en colonne A :
bavaroise
location oise
oise
paris
location rouen
rouennais


En colonne B :
oise
rouen


Je souhaiterais avoir en résultat le statut ok en colonne C si une des valeurs de la colonne B se trouve dans la colonne A.
Pour l'instant j'arrive à détecter seulement la présence de la chaine de caractères, du coup le mot "bavaroise" est en statut ok.
Hors dans l'exemple ci-dessus, il ne devrait pas mettre en ok les cellules contenant bavaroise, paris et rouennais.

j'ai testé avec RechercheV et Equiv, ainsi qu'une formule du genre :
=SI(NB.SI(A1;"*"&"oise"&"*")>=1;"ok";"")
Mais ça ne me détecte pas le mot exact, et pour cette dernière formule, je n'arrive pas à gérer plusieurs mots dans la colonne B.

J'ai finalement trouvé ce code VBA :
Code:
If Range("A1").Value Like "*" & Range("A2").Value & "*" Then 
      MsgBox "Le mot " & Cells(2, 1).Value & " existe dans la cellule A1."
End If
Ce code recherche si le mot dans la cellule A2 existe dans la chaîne de mot de la cellule A1.
Je n'arrive pas à l'adapter à mes besoins, je ne connais pas du tout le vba et j'ai essayé en vain de modifier les références de cellules.

Existe-t-il une formule qui permette de gérer mon besoin simplement ?
Merci pour votre aide.
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Rechercher un mot (et pas une chaine) dans une cellule

Bonjour Phendoc, bonjour le forum,

Formule je sais pas faire, je te propose ce bout de code ci-dessous :
Code:
Sub Macro1()
Dim ca As Range 'déclare la variable ca (Cellule de la colonne A)
Dim cb As Range 'déclare la variable cb (Cellule de la colonne B)
 
For Each ca In Range("A1:A" & Cells(Application.Rows.Count, 1).End(xlUp).Row) 'boucle 1 : sur toutes les cellulles éditées ca de la colonne A
    For Each cb In Range("B1:B" & Cells(Application.Rows.Count, 2).End(xlUp).Row) 'boucle 2 : sur toutes les cellulles éditées ca de la colonne B
        'si la cellule ca contient la chaine de caractère de la cellule cb, affiche "Ok" en colonne C
        If ca.Value.Value Like "*" & cb.Value & "*" Then ca.Offset(0, 2).Value = "Ok"
    Next cb 'prochaine cellule de la boucle 2
Next ca 'prochaine cellule de la boucle 1
End Sub
 

JNP

XLDnaute Barbatruc
Re : Rechercher un mot (et pas une chaine) dans une cellule

Bonjour Pendhoc :),
Seul un RegExp peut détecter si c'est un début ou une fin de mot :rolleyes:... Le code que tu proposes acceptera bavaroise et rouennais :eek:...
Vois si l'exemple joint te convient :p...
Bonne journée :cool:
Ajout : Salut Robert :)...
 

Pièces jointes

  • RegExp.xls
    46 KB · Affichages: 190

pierrejean

XLDnaute Barbatruc
Re : Rechercher un mot (et pas une chaine) dans une cellule

Bonjour phendoc

Avec une fonction personnalisée

Salut Robert :) :)
Salut Jean Noel :) :)
 

Pièces jointes

  • phendoc.zip
    9 KB · Affichages: 127
  • phendoc.zip
    9 KB · Affichages: 123
  • phendoc.zip
    9 KB · Affichages: 118

CISCO

XLDnaute Barbatruc
Re : Rechercher un mot (et pas une chaine) dans une cellule

Bonjour

Une possibilités en pièce jointe, avec une formule matricielle (à valider avec ctrl+maj+entrer), en rajoutant des " " devant et derrière le mot recherché pour qu'Excel puisse faire la différence entre rouen et rouennais.

@ plus
 

Pièces jointes

  • phendoc.xlsx
    9.8 KB · Affichages: 134
Dernière édition:

phendoc

XLDnaute Nouveau
Re : [résolu] Rechercher un mot (et pas une chaine) dans une cellule

Bonjour à tous,

Je reviens à la charge car un comportement n'est pas géré.
La comparaison des mots se fait en effet cellule par cellule et non en définissant la colonne contenant les termes à détecter.
Le but n'est pas de rechercher un nom (simple ou composé) dans une colonne d'expressions, mais de détecter au sein d'une expression (colonne A, onglet Matrice) un des items présents dans une colonne (colonne A, onglet Géolocalisation).

Je vous ai mis un fichier d'exemple qui sera plus parlant.
J'ai pu me servir d'une des solutions données ci-dessus pour générer des statistiques, mais il me reste cette approche à affiner.

Merci à vous :)
phendoc
 

Pièces jointes

  • geoloc.xlsx
    24.5 KB · Affichages: 123

JNP

XLDnaute Barbatruc
Re : Rechercher un mot (et pas une chaine) dans une cellule

Re :),
Je ne comprends pas, en dehors de la solution de Robert :p, toutes les autres fonctionnent, celle de CISCO n'a même plus besoin d'être en matricielle :rolleyes:...
Vois le fichier joint ;).
Bonne soirée :cool:
 

Pièces jointes

  • geoloc(1).xlsm
    32.1 KB · Affichages: 153

Robert

XLDnaute Barbatruc
Repose en paix
Re : Rechercher un mot (et pas une chaine) dans une cellule

Bonjour le fil, bonjour le forum,

La crevette s'est faite bouffer par la cigogne. Ça m'apprendra à reprendre un code que je ne maîtrise pas (Like) sans le tester ! P... j'ai mal...
 

phendoc

XLDnaute Nouveau
Re : Rechercher un mot (et pas une chaine) dans une cellule

En fait ça ne marche toujours pas puisqu'il faut renseigner la valeur dans la formule (ici "oise"), hors dans mon onglet géolocalisation, j'ai potentiellement des centaines de localités (voire même des milliers), du coup il faudrait que la formule prenne en compte la colonne et pas juste la valeur d'une cellule. Du coup avec le dernier exemple, beaucoup d'expressions ont un statut ko alors que la localité est présente dans la colonne de l'onglet "géolocalisations".
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Rechercher un mot (et pas une chaine) dans une cellule

Re :),
Tu n'avais pas vraiment posé le problème comme ça :rolleyes:...
Alors la deuxième fonction de Pierre-Jean devrait fonctionner, ainsi que la matricielle de CISCO. Sinon, une 2ème version de la mienne
Code:
Function MotExact(AChercher As Range, ATester As String) As Boolean 'JNP
Dim Cellule As Range
Application.Volatile
With CreateObject("vbscript.regexp")
    For Each Cellule In AChercher
        .Global = True
        .Pattern = "\b" & Cellule & "\b"
        If .test(ATester) Then MotExact = True
    Next Cellule
End With
End Function
avec en B2
Code:
=SI(MotExact(GEOLOCALISATION!$A$2:$A$85;A2);"ok";"ko")
à glisser vers le bas :p...
Bonne soirée :cool:
Ajout : La matricielle de Cisco à mettre ne B2
Code:
=SI(SOMME(ESTNUM(TROUVE(" "&GEOLOCALISATION!$A$2:$A$85&" ";" "&A2&" "))*1)>0;"ok";"ko")
à valider avec Ctrl+Maj+Enter et à glisser vers le bas fonctionne très bien :rolleyes:...
 
Dernière édition:

Monique

Nous a quitté
Repose en paix
Re : Rechercher un mot (et pas une chaine) dans une cellule

Bonjour tous,

Juste pour alléger (ça ferait une colonne de formules en moins)

Le tableau A21:B26 de l'onglet "Statistiques" n'a pas besoin de la colonne B de l'onglet "GéolocEtc"

En B21 :
=SOMME((ESTNUM(TROUVE(" "&GEOLOCALISATION!$A$2:$A$85&" ";TRANSPOSE(" "&MATRICE!$A$2:$A$39&" "))))*(GEOLOCALISATION!$C$2:$C$85=A21))
à valider par ctrl, maj et entrée

Pour vérifier la somme de B21:B25 :
=SOMME(SI(ESTNUM(TROUVE(" "&GEOLOCALISATION!$A$2:$A$85&" ";TRANSPOSE(" "&MATRICE!$A$2:$A$39&" ")));1))
à valider par ctrl, maj et entrée
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine