Microsoft 365 VBA: Insérer un logo différent dans l'entête entre la 1ère page et les suivantes

  • Initiateur de la discussion Initiateur de la discussion Emile63
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Emile63

XLDnaute Junior
Bonjour à tous,
Je cherche a insérer par VBA des logos sur mon classeur, et qu'ils soient différenciés entre la première page et les suivantes.
Je brode autour du code ci-après, mais les logos s'insèrent à l'entier du document et non pas selon mon besoin.. 🙁
J'ai vu qu'il existe: PageSetup.FirstPage.RightHeader mais je ne sais pas en tirer partie.
- Est-ce que quelqu'un pourrait me venir en aide ?
Je vous remercie d'avance pour votre aide et vous souhaite une très bonne journée.

--------------------------------------------------
MonChemin = "C:\Users\xxxx\Pictures\"
MonPetitLogo = "Logo_300dpi.JPG"
MonGrandLogo = "Logo Grand.jpg"
EmplacementMonPetitLogo = MonChemin & MonPetitLogo
EmplacementMonGrandLogo = MonChemin & MonGrandLogo
Application.PrintCommunication = False
With ActiveSheet.PageSetup.RightHeaderPicture ' ici: ActiveSheet.PageSetup.FirstPage.RightHeader ne fonctionne pas
.Filename = EmplacementMonGrandLogo
.Height = 51 'hauteur
.Width = 123.75 'largeur
End With
ActiveSheet.PageSetup.RightHeader = "&G"' A quoi sert exactement ce code et est-ce qu'on ne peur pas l'intégrer directement dans le With ci-dessus?

ActiveSheet.PageSetup.LeftHeaderPicture.Filename = EmplacementMonPetitLogo
With ActiveSheet.PageSetup.LeftHeaderPicture
.Height = 24 'hauteur
.Width = 17.25 'largeur
End With

ActiveSheet.PageSetup.LeftHeader = "&G"'actualise l'en-tête
Application.PrintCommunication = True
ActiveWindow.SelectedSheets.PrintPreview
-------------------------------------------------------------------------------------------------------------
 
Bonjour Emile,
En VBA je ne sais pas, mais l'enregistreur de macro devrait résoudre le problème.
Dans Entête/Pied de page, cocher Première page différente.
Dans la fenêtre entête personnalisée vous avez deux onglets Entête et Premier entête.

2.jpg


Ce qui en VBA semble correspondre à deux paramètres :
VB:
With ActiveSheet.PageSetup
  ...
  ...
  .CenterHeader = "AUTRE PAGES"                     ' Entete de toutes les pages'
  ...
  ...
  .FirstPage.CenterHeader.Text = "PREMIERE PAGE"  ' Entete spécifique à la première page'
  ...
End With
 
Bonjour Silvanu et merci pour ton aide.

avec l'enregistreur, il s'enregistgre ceci:

ActiveSheet.PageSetup.FirstPage.RightHeader.Picture.Filename = _
"C:\Users\xxxxx\Pictures\Saved Pictures\Logoxx.jpg"
ExecuteExcel4Macro "(17,45,,141.75)" '<-- Ici
...
Le logo s'insert, mais il prend toute la page, et je n'arrive pas à le redimensionner
Quand je ré-éxéecute la macro enregistrée elle se plante "ici"

Je ne suis pas spécialiste (loin de là) et ne comprend pas pourquoi VBA enregistre en Excel4Macro...
Mais quand j'essaie de redimensionner avec "With" Ca plante aussi...

With ActiveSheet.PageSetup.FirstPage.RightHeader
.Filename = EmplacementMonGrandLogo
.Height = 51 'hauteur
.Width = 123.75 'largeur
End With
 
A priori c'est l'insertion de mon image qui créer le problème pas les textes.
Avec L'enregistreur, quand j'insert le petit logo (1er) et le grand (2ème) le langare change...
et quand je relance la procédure, elle plante au niveau de ExcelMacro4

ActiveSheet.PageSetup.LeftHeaderPicture.Filename = _
"C:\Users\xxxx\Pictures\Saved Pictures\Logo_300dpi.JPG"
With ActiveSheet.PageSetup.LeftHeaderPicture
.Height = 39.75
.Width = 28.5

End With
ActiveSheet.PageSetup.FirstPage.RightHeader.Picture.Filename = _
"C:\Users\xxxx\Pictures\Saved Pictures\Logoxxx.jpg"
ExecuteExcel4Macro "(17,39,,156)"
Application.PrintCommunication = False
etc...
 
C'est rigolo avec Office 365 de voir du Excel4Macro ! qui date quand même d'une vingtaine d'années.
Ci joint une PJ. Le code marche, il insère une image différente en entête 1ere page et une autre sur les autres pages.
Par contre je n'ai pas insisté sur la taille des logos, ils empiètent sur la feuille. J'ai pris des images au pif.
VB:
Sub InsererLogos()
    ActiveSheet.PageSetup.LeftHeaderPicture.Filename = _
        "g:\Users\PC_PAPA\Pictures\GIFS\Bonhomme\Petites\Im (30).jpg"   ' Image 1
    ActiveSheet.PageSetup.FirstPage.LeftHeader.Picture.Filename = _
        "G:\Users\PC_PAPA\Pictures\GIFS\Bonhomme\Petites\Imp (21).jpg"  ' Image 2
    With ActiveSheet.PageSetup
        .LeftHeader = "&G"
        .CenterHeader = "AUTRE PAGES"
        .FirstPage.LeftHeader.Text = "&G"
        .FirstPage.CenterHeader.Text = "PREMIERE   PAGE"
    End With
End Sub
Je ne sais pas si cela vous servira mais il n'y a pas d'erreur. Peut être une piste.

Par contre vous ne pourrez pas redimensionner votre logo ici car il importe une image via un lien.
Il faut mettre une marge suffisante, et dimensionner votre logo ailleurs pour qu'il puisse s'insérer correctement.
 

Pièces jointes

Dernière édition:
Bonjour, ce code fonctionne parfaitement chez moi pour dimensionner l'image:
VB:
'Première page
        With ActiveSheet.PageSetup.FirstPage.LeftHeader.Picture
            .Filename = "C:\COMMUNICATION\LOGO & CARTES DE VISISTE\LOGO\Logo1.png"
            .Height = 100
            .Width = .Height * 2.4
        End With
        ActiveSheet.PageSetup.FirstPage.LeftHeader = "&G"

'Autres pages
        With ActiveSheet.PageSetup.LeftHeaderPicture
            .Filename = "C:\COMMUNICATION\LOGO & CARTES DE VISISTE\LOGO\Logo1.png"
            .Height = 50
            .Width = .Height * 2.4
        End With
        ActiveSheet.PageSetup.FirstPage.LeftHeader.Text = "&G"

Voilà tout 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour