XL 2010 Besoin d'une formule pour recherche une partie de la cellule dans une matrice

Linda42

XLDnaute Occasionnel
Bonjour,

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
 

Pièces jointes

  • Formule recherche.xlsx
    646.2 KB · Affichages: 21

Linda42

XLDnaute Occasionnel
Bonjour à tous

Avec un filtre avancé

JHA
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
 

Linda42

XLDnaute Occasionnel
Bonjour,

Oui. Et où ça ? Quelle 'matrice"? Quelle cellule ? Quelles données ?
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 pour ton aide en tout cas
 

Phil69970

XLDnaute Barbatruc
Bonjour @Linda42, Roblochon, JHA, le forum

Je te propose ce fichier inspiré de l'exemple de l'aide en ligne

1615718994875.png


@Phil69970
 

Pièces jointes

  • Formule recherche-V1.xlsm
    695.8 KB · Affichages: 5

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour à chacun,

Il n' y a pas assez de corrélation entre les deux tableaux

Et trop de doublons dans MEDOC (qui n'en sont pas tous)

Dans une expression comme "ATTELLE DE GENOU UNI.60 cm(201G00.221)"
Quel mot rechercher ?

Sinon :

=INDEX(Nomenclatures!$A$2:$A$8897;EQUIV("*INSULINE*";Nomenclatures!$E$2:$E$8897;0))
renvoie : BC44BOOO

Cordialement
 

Linda42

XLDnaute Occasionnel
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.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

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.

Cordialement
 

Pièces jointes

  • Formule recherche 2.xlsm
    666 KB · Affichages: 4

JHA

XLDnaute Barbatruc
Bonjour le forum,
Bonjour Linda42,

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.

JHA
 

Phil69970

XLDnaute Barbatruc
Re le fil

ma demande est visiblement très complexe
Non elle est plutôt :
Votre demande est surtout imprécise.
Nous avons fait avec ce que nous supposions.
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
Ma cellule est
ADRENALINE 0,50mg/1ml AMP. BOUTEILLE
1615888785868.png


De la en conclure que tu veux rechercher dans la feuille "Médocs" c'est ce que fait mon fichier

1615889022663.png

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.

@Phil69970
 
Dernière édition:

Linda42

XLDnaute Occasionnel
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.

Cdt
 

Linda42

XLDnaute Occasionnel
Bonjour,

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.

Cordialement
Merci pour ce retour.
Cet outil de recherche va m'être trés utile.

Cdt
 

Discussions similaires