A mon avis ça vient de .Find("Observation*", dans le cas où "Observation*" n'est pas trouvé, tu auras une erreur. Tu peux gérer l'erreur comme ceci:
Sub Imprimer(choix As Boolean)
Dim r As Range, P As Range, n&, c As Range
Dim foundCell As Range
Set r = Range("B3:B" & Rows.Count)...