I traced this to the horn switch ..... but it was not the switch contacts that gave the problem.

Above is a fairly representative drawing of the switch in cross section (other than the spring which is shown in side view).
Before I took it apart I couldn't understand why repeatedly pushing the button was not improving things as doing this would be bringing the contacts together and cleaning them.
When I took it apart (prepared for some pretty horrid contacts) I found they were fine.
The switch uses its spring as a conductor between the top contact (contact B) and Terminal B.
The problem was in the interface between the spring and contact B on which it rests .... a quick clean and all was back to normal.
The problem is that the spring doesn't move on this contact so there is nothing to wipe off any crud or oxidation.
Anyway ..... if you have a problem with your horn, it may well be down to this ... though I suggest you first test your horn across your battery to make sure it isn't that which is causing the problem.
Of course, please exercise the usual caution when doing anything with the battery - don't create a short between the terminals ... (which includes the +ve terminal and the bike's frame/engine etc).