Bonjour,
Sub Imprimer()
Dim dupli As Object
With ActiveSheet
Application.ScreenUpdating = False
.Range("B2:H29").Copy
Set dupli = .Pictures.Paste(True)
With .Range("B35")
dupli.Left = .Left
dupli.Top = .Top
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
'.PrintOut
.PrintPreview
End With
dupli.Delete
End Sub
Les paramètres d'impression étant prédéfinis pour la feuille, je n'ai pas touché à tes réglages et j'ai ajouté le centrage vertical et horizontal. Si ils ne doivent pas être modifiés pour d'autres utilisations, il n'y a pas lieu d'y toucher... Sinon le code devra être complété pour y réintroduire les paramètres de mise en page (.PageSetup).
La technique ci-dessus m'a paru la mieux adaptée à ton cas : on copie la plage et la colle sous forme d'image qu'on positionne pour occuper l'emplacement symétrique de façon que la mise en page soit équilibrée. Une fois l'impression réalisée, on supprime l'image.
On utilise une variable objet (objet générique, car l'objet est ambiguë, ce n'est encore ni un objet Picture ni un objet Shape au moment de l'affectation, et le typer ainsi déclencherait une erreur...) Cette variable permet de positionner plus facilement l'image, par rapport à une cellule (ici B35, ce qu'on peut modifier facilement, si on modifie ou si le réglage doit être ajusté différemment), et de la supprimer à la fin.
La mise à jour de l'affichage est inhibée le temps du collage-positionnement, puis rétabli avant impression (c'est un peu inutile parce qu'on n'a pas le temps de voir... mais enfin !)
Le Application.CutCopyMode est ici justifié pour ne pas avoir le message : "Le presse papier contient beaucoup de données. Voulez-vous les supprimer ou les conserver...", si tu fermais le fichier ensuite, car dans un tel cas cela ne passe pas automatiquement à False.
J'ai désactivé le PrintOut, au profit d'un PrintPreview (aperçu) pour ne pas imprimer inutilement lors de tests. En réel, une fois que c'est au point, tu feras l'inverse...
Cordialement.