Tu appelles deux fois masquer lignes qui lui contient la msgbox donc normal qu'il s'affiche deux fois.
Tu as trente millions de solutions. La plus simple introduire une variable booléenne globale qui sera mise à faux lors de l'impression puis remise en fin d'impression et mettre la messagebox dans un if qui teste cette variable booléenne
Sub imprimer()
Call masquerlignes
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Call masquerlignes
Flag = False
End Sub
En regardant les comptes de votre société... Je m'apperçois de quelques incohérences.
En 2012 un CA de 2.167.900€ avec un EBE de 98500€ et un RN de -13100€ ?
Gestion du FR très très précaire ou marges insufisantes à moins d'une charge exceptionnelle démentielle ou une arnaque au fisc...