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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
Sub Macro5()
' =Macro4 avec do loop
Dim Origine As Worksheet, Dest As Worksheet
Set Origine = Worksheets("ListeAntibio")
Set Dest = Sheets("ListeProduits")
Dim NomAntibio As Variant
Dim LigneProduit As Variant
Dim LigneAntibio As Variant
Dim FirstAddress As String
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
Set R = Dest.Range("A1:A1000").Find(What:=NomAntibio, LookIn:=xlFormulas, LookAt:=xlPart)
'XlPart à la place de WlWhole, pour rechercher NomAntibio dans les chaines de caractères de NomProduit
If R Is Nothing Then
'reponse = MsgBox(NomAntibio & " non trouvé ", vbOKCancel, "Erreur")
'If reponse = vbCancel Then Exit Sub
Else 'equivalent à : If Not R Is Nothing Then
FirstAddress = R.Address 'repérage du 1er résultat trouvé
Do
LigneProduit = R.Row
If Dest.Cells(LigneProduit, 1).Offset(0, 2).Value = "" Then
'pour que les resultats des NomAntibio dont la chaine de caractère est incluse dans d'autres NomAntibio n'écrasent pas les résultats de ces derniers.
NomAntibio = Origine.Cells(LigneAntibio, 2).Value
CodeAntibio = Origine.Cells(LigneAntibio, 3).Value
Dest.Cells(LigneProduit, 1).Offset(0, 1).Value = NomAntibio
Dest.Cells(LigneProduit, 1).Offset(0, 2).Value = CodeAntibio
End If
Set R = .FindNext(R)
Loop While Not R Is Nothing And R.Address <> FirstAddress
End If
End If
Next
'
'
End Sub |
Partager