J'ai besoin du formule qui me permette de retrouver, non pas la valeur exacte de la cellule mais uniquement si un mot de la cellule se retrouve dans la matrice de recherche.
Ma cellule est
ADRENALINE 0,50mg/1ml AMP. BOUTEILLE
et je souhaite rechercher dans la matrice uniquement adrénaline.
Ci-joint mon tableau qui vous permettra de comprendre mon besoin.
Merci, je ne connaissais pas cette méthode de recherche. Mais ca ne répond pas totalement à mon besoin.
En fait l'Ideal aurait été de mettre une formule recherchev : la valeur recherchée, c'est les médocs (mais pas la cellule exact, seulement un mot), la table matrice ou rechercher l'info c'est le tableau de nomenclature; la colonne est la 1. L'idée c'est de savoir si il y a des mots dans ma feuille médocs que l'on retrouve dans la feuille nomenclature, et renvoyer le code nomenclature correspondant.
Cela me permettrait de faire un premier tri avant de devoir rechercher le code de nomenclature pour toutes les cellules pour lesquelles le mot n'est pas dans la nomenclature.
Merci pour ton aide en tout cas
Bonjour Roblochon :
J'ai besoin de la formule en B2 dans médocs. L'idée c'est de savoir si il y a des mots dans ma feuille médocs que l'on retrouve dans la feuille nomenclature, et renvoyer le code nomenclature correspondant.
En fait l'Ideal aurait été de mettre une formule recherchev : la valeur recherchée, c'est les médocs (mais pas la cellule exact, seulement un mot), la table matrice ou rechercher l'info c'est le tableau de nomenclature; la colonne est la 1.
Cela me permettrait de faire un premier tri avant de devoir rechercher le code de nomenclature pour toutes les cellules pour lesquelles le mot n'est pas dans la nomenclature.
J'ai bien évidement essayer la formule recherchev avec une correspondance VRAI (valeur non exaxt) puisque je recherche qu'une partie de la celulle et pas la cellule exacte. Mais cela ne fonctionne pas.
Merci à tous pour votre aide, ma demande est visiblement très complexe, je vais donc trier et filtrer les médocs et rechercher un par un le code nomenclature dans l'autre feuille. J'avais espérer une solution miracle.
Merci à tous.
Votre demande est surtout imprécise. @JHA vous a donné une méthode qui pourrait très bien faire le job, encore faut-il l'adapter à vos données. Vous ne nous dites pas dans quelle colonne(s) de nomenclature rechercher. Nous avons fait avec ce que nous supposions.
Il y a une autre méthode toute simple de recherche que vous pouvez appeler dans votre feuille nomenclature par le raccourci CTRL+F.
Dans le fichier joint, la macro utilise cette recherche pour boucler sur tout le tableau de nomentclatures (toutes les cellules) et renvoie les références trouvées.
Elle se trouve dans le module de code de la feuille 'MEDOCS' que vous pouvez voir en faisant un click-droit sur le nom de l'onglet puis 'Visualiser le code'
VB:
Private Sub cmdRechercheMot_Click()
Dim c As Range, plg As Range
Dim Adr1 As String, Mot As String, ref As String
Dim dic As Object
Mot = UCase(Trim(Range("E1")))
If Mot = "" Then
MsgBox "Aucun mot à rechercher dans la cellule E1", vbExclamation, "Recherche mot"
GoTo FIN
End If
'
Me.Range("E2") = "Recherche en cours..."
'
' Effacement d'un résultat antérieur
Set c = Me.Cells(Rows.Count, 5).End(xlUp)
If c.Row > 3 Then Me.Range("E3:E" & c.Row) = Empty
Set c = Nothing ' Important pour la suite
'
' Définition de la plage de recherche
Set plg = ThisWorkbook.Sheets("Nomenclatures").Range("A1").CurrentRegion
'
' Lancement de la recherche
Set c = plg.Find(What:=Mot, After:=plg.Range("A1"), LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'
' Si première occurence trouvée
If Not c Is Nothing Then
'
' retenir son adresse
Adr1 = c.Address
'
' Créer le dictionnaire qui contiendra toutes les références trouvées
Set dic = CreateObject("Scripting.Dictionary") '
'
' chercher les occurences suivantes
Do
'
'Placer la référence du produit dans le dictionnaire
ref = plg.Parent.Cells(c.Row, 1).Value
dic(ref) = ref
'
' Trouver la prochaine occurence
Set c = plg.FindNext(c)
'
' Si son adresse est identique à la première :
' fin de recherche on sort de la boucle
If c.Address = Adr1 Then Exit Do
Loop While Not c Is Nothing
End If
'
' si le dictionnaire a été créé : on a au moins 1 occurence
If Not dic Is Nothing Then
Me.Range("E2") = "Références trouvées : " & dic.Count
Me.Range("E3").Resize(dic.Count) = Application.Transpose(dic.keys)
Else
Me.Range("E2") = "Aucune référence trouvée !"
End If
FIN:
End Sub
Pour ma part et en état actuel de la demande, je ne peux faire davantage.
Pour répondre à ton post #9 je vais donc trier et filtrer les médocs et rechercher un par un le code nomenclature dans l'autre feuille.
Dans l'onglet "Medocs" colonne A "Objet", il y a 4431 données mais il y a 2759 valeurs en double.
Si tu supprimes les doublons, il ne te restera "que" 1672 données à exploiter pour choisir tes critères de recherche.
Et de plus tu ne nous donnes aucune réponse ou précision ou un ou des autres exemples.
Voir en reformulant la question d'une autre manière afin de mieux cerner ta demande.
Dans l'exemple que tu donnes voila la reponse que me donne excel
De la en conclure que tu veux rechercher dans la feuille "Médocs" c'est ce que fait mon fichier
Comme quoi ta demande porte à confusion !
De plus nous prenons le temps de chercher, comprendre ce que tu veux tu pourrais prendre le temps de nous réexpliquer ta demande.
Une demande claire et précise apporte en général une réponse claire précise et évite des aller/retour due à des malentendus et de l'incompréhension.
Un grand merci à tous (je vous suis très reconnaissante de l'aide que vous tenter de m'apporter) et pardon pour mon manque de précision, je pensais que c'étais clair mais en fait ca l'est uniquement dans ma tête.
Je vais donc tenter d'éclaircir afin de réduire un max les confusions et les mals-entendus.
Le contexte :
Mes collaborateurs sont censés me transmettre chaque mois un fichier avec tous les achats effectués (un ligne par produits achetés - d'où parfois les doublons que je ne peux pas supprimer car je dois pouvoir comptabiliser le nombre de fois achetés). Ces produits sont censés être rattaché à un code de nomenclature. Les mauvais élèves ne m'envoient que la liste des produits et c'est à moi de retrouver le code nomenclature de l'article acheté. Pour une grande partie des articles, le nom générique des médicaments qui se trouve dans "médocs" se retrouve parfois dans le fichier de nomenclature, notamment dans la colonne G "Produit élémentaire N-5". D'où ma volonté de faciliter une partie du travail, recherchant une partie du nom des cellules médocs, dans la feuille nomenclature, si la formule trouvait le nom cela me renvoyait à la colonne ou se trouve le code nomenclature. L'idée était de retrouver un mot commun aux deux feuilles qui me permettrait de retrouver facilement le code nomenclature de l'article.
Mais ce matin, j'ai eu l'idée d'isoler chaque mot de la cellule avec la fonction convertir, ce qui m'a permis de mettre une formule recherchev et de trouver le code nomenclature.
Je vais réétudier vos différentes solutions, qui même si elles ne collaient pas à mon besoin imprécis je vous l'accorde (sorry) me serviront pour d'autre taches de mon travail, donc un grand merci encore une fois.
Votre demande est surtout imprécise. @JHA vous a donné une méthode qui pourrait très bien faire le job, encore faut-il l'adapter à vos données. Vous ne nous dites pas dans quelle colonne(s) de nomenclature rechercher. Nous avons fait avec ce que nous supposions.
Il y a une autre méthode toute simple de recherche que vous pouvez appeler dans votre feuille nomenclature par le raccourci CTRL+F.
Dans le fichier joint, la macro utilise cette recherche pour boucler sur tout le tableau de nomentclatures (toutes les cellules) et renvoie les références trouvées.
Elle se trouve dans le module de code de la feuille 'MEDOCS' que vous pouvez voir en faisant un click-droit sur le nom de l'onglet puis 'Visualiser le code'
VB:
Private Sub cmdRechercheMot_Click()
Dim c As Range, plg As Range
Dim Adr1 As String, Mot As String, ref As String
Dim dic As Object
Mot = UCase(Trim(Range("E1")))
If Mot = "" Then
MsgBox "Aucun mot à rechercher dans la cellule E1", vbExclamation, "Recherche mot"
GoTo FIN
End If
'
Me.Range("E2") = "Recherche en cours..."
'
' Effacement d'un résultat antérieur
Set c = Me.Cells(Rows.Count, 5).End(xlUp)
If c.Row > 3 Then Me.Range("E3:E" & c.Row) = Empty
Set c = Nothing ' Important pour la suite
'
' Définition de la plage de recherche
Set plg = ThisWorkbook.Sheets("Nomenclatures").Range("A1").CurrentRegion
'
' Lancement de la recherche
Set c = plg.Find(What:=Mot, After:=plg.Range("A1"), LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'
' Si première occurence trouvée
If Not c Is Nothing Then
'
' retenir son adresse
Adr1 = c.Address
'
' Créer le dictionnaire qui contiendra toutes les références trouvées
Set dic = CreateObject("Scripting.Dictionary") '
'
' chercher les occurences suivantes
Do
'
'Placer la référence du produit dans le dictionnaire
ref = plg.Parent.Cells(c.Row, 1).Value
dic(ref) = ref
'
' Trouver la prochaine occurence
Set c = plg.FindNext(c)
'
' Si son adresse est identique à la première :
' fin de recherche on sort de la boucle
If c.Address = Adr1 Then Exit Do
Loop While Not c Is Nothing
End If
'
' si le dictionnaire a été créé : on a au moins 1 occurence
If Not dic Is Nothing Then
Me.Range("E2") = "Références trouvées : " & dic.Count
Me.Range("E3").Resize(dic.Count) = Application.Transpose(dic.keys)
Else
Me.Range("E2") = "Aucune référence trouvée !"
End If
FIN:
End Sub
Pour ma part et en état actuel de la demande, je ne peux faire davantage.