Bonjour,

J’ai besoin de compléter une liste de produits (feuille « ListeProduits », contenant les NomProduits), avec le nom d’un composant, un antibiotique dont le libellé est contenu dans le NomProduit, et du code article de cet antibiotique.

Je dispose pour cela, d’une table (feuille « ListeAntibio ») avec la liste des antibiotiques (NomAntibio) et leur code article (CodeAntibio).
Les 2 feuilles « ListeProduits » et « ListeAntibio » sont dans le même classeur.

Procédant par étapes je dispose d’une macro construite avec la fonction FIND (que je connais grâce à un champion de ce forum !), qui renvoie correctement le NomAntibio et le CodeAntibio de la feuille « ListeAntibio » à côté du NomProduit de la feuille « ListeProduits ».
Cette « maquette » ne fonctionne que si les NomProduits ont exactement le même libellés que les NomAntibio.

Selon mes recherches sur le net, il faut maintenant que je remplace la fonction FIND par la fonction LIKE pour trouver les NomProduits de la plage de recherche « ListeProduits » contenant une chaine de caractères parmi celles de la « ListeAntibio ».
Je m’adresse donc au champions, pour m’aider à combiner FIND avec une liste de critères et une plage de recherche !

Alors, qui veut bien relever le défi ? … s’en est un sacré pour moi, la débutante !
D’avance un grand merci à mon sauveteur !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Sub Macro_3_Recherche_NomAntibio_dans_NomProduit()
'
Dim Origine As Worksheet, Dest As Worksheet
Set Origine = Worksheets("ListeAntibio")
Set Dest = Sheets("ListeProduits")
 
 
Dim NomAntibio As Variant
Dim NomProduit As Variant
Dim LigneProduit As Variant
Dim LigneAntibio As Variant
 
Dim reponse
Dim i As Long
Dim R As Range
 
 
'Dans Origine :
 
For i = 2 To Rows.Count
 
  NomAntibio = Origine.Cells(i, 1).Value
  LigneAntibio = Origine.Cells(i, 1).Row
 
 
    If NomAntibio = "" Then
    Exit For ' pour sortir de cette routine FOR...NEXT
 
    Else
 
                'Voilà la ligne q'il faut remplacer par Find...
               Set R = Dest.Range("A1:A100").Find(What:=NomAntibio, LookIn:=xlFormulas, LookAt:=xlWhole)
 
         If R Is Nothing Then
 
            'reponse = MsgBox(NomAntibio & " non trouvé ", vbOKCancel, "Erreur")
            'If reponse = vbCancel Then Exit Sub
 
         Else
 
            LigneProduit = R.Row
 
            CodeAntibio = Origine.Cells(LigneAntibio, 2).Value
 
            Dest.Cells(LigneProduit, 1).Offset(0, 2).Value = NomAntibio
 
            Dest.Cells(LigneProduit, 1).Offset(0, 3).Value = CodeAntibio
 
          End If
 
    End If
 
Next
 
End Sub