Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA, tourner l'en-tête et pied de page

9 réponses
Avatar
Lars
Bonjour,

Je développe un model (Report.dot) dans MS Word XP pour un grand document.
Ce model doit contenir une macro VBA qui permet d’inséré une nouvelle page
orienté paysage, mais avec le texte, le n° de page, et les logos dans
l’en-tête et le pied de page positionné à droite et à gauche de la page
plutôt que en haut et en bas.

La macro VBA est déjà bien avancé (insertion nouvelle section, orientation
de la page et insertion de frames orienté verticalement avec le texte) mais
quand il s’agit de tourner les images des logos et de les positionner
correctement, je reçois l’erreur : ‘-2147024891 (80070005)’ – Ce membre n’est
pas accessible dans cette vue’

Le code en question est la suivante :

Dim rngHeader as Range
Dim shpLogo as Shape

With ActiveDocument.Sections(intSectionID)
Set rngHeader = .Headers(wdHeaderFooterPrimary).Range
End With

For Each shpLogo In rngHeader.ShapeRange
shpLogo.Select ‘ <= Erreur ici
Selection.ShapeRange.IncrementRotation 90#
Next

Si quelqu’un peut me donné un pointeur, je serrais TRES reconnaissant !

--
Lars

9 réponses

Avatar
Circ
Bonjour Lars,

J'ai un truc pour ça beaucoup plus simple :

- Tu crées ta page en paysage, avec logo bien placé, pagination, etc.
- Tu insères le saut de section (qui contient donc toute la mise en
page de la page paysage)
- Tu fais une insertion automatique de ton saut de section
- Ta macro insère le saut de section

Mes modèles fonctionnent de cette manière et ça fonctionne très bien,
sans souci.

Circé
http://faqword.free.fr

Lars a formulé la demande :
Bonjour,

Je développe un model (Report.dot) dans MS Word XP pour un grand document.
Ce model doit contenir une macro VBA qui permet d’inséré une nouvelle page
orienté paysage, mais avec le texte, le n° de page, et les logos dans
l’en-tête et le pied de page positionné à droite et à gauche de la page
plutôt que en haut et en bas.

La macro VBA est déjà bien avancé (insertion nouvelle section, orientation
de la page et insertion de frames orienté verticalement avec le texte) mais
quand il s’agit de tourner les images des logos et de les positionner
correctement, je reçois l’erreur : ‘-2147024891 (80070005)’ – Ce membre n’est
pas accessible dans cette vue’

Le code en question est la suivante :

Dim rngHeader as Range
Dim shpLogo as Shape

With ActiveDocument.Sections(intSectionID)
Set rngHeader = .Headers(wdHeaderFooterPrimary).Range
End With

For Each shpLogo In rngHeader.ShapeRange
shpLogo.Select ‘ <= Erreur ici
Selection.ShapeRange.IncrementRotation 90#
Next

Si quelqu’un peut me donné un pointeur, je serrais TRES reconnaissant !


Avatar
Anacoluthe
Bonjour !

'Lars' nous a écrit ...
For Each shpLogo In rngHeader.ShapeRange
shpLogo.Select ‘ <= Erreur ici
Selection.ShapeRange.IncrementRotation 90#
Next


Vous ne pouvez pas /sélectionner/ un objet si cet objet n'est pas
visible dans la fenêtre de sélection !!!!!!!!!!

Votre code SELECT vous oblige donc à AFFICHER les en-têtes/pieds de page
Affichage / En-tête et pied de page

Ceci dit vous faites l'erreur hyperclassique de tout débutant en VBA :
Dans 99% des cas sélectionner ne sert à RIEN en VBA !!
La Selection c'est bon pour l'utilisateur manuel et l'enregistreur de macros.

Si au lieu d'écrire
Machin.Select
Selection.FaisMoiCeci

Vous écrivez tout simplement
Machin.FaisMoiCeci

1. Vous gagnez en code et en rapidité
2. Vous vous fichez de ce qui est affiché en ce moment dans la fenêtre active

Est-ce plus clair ?

PS: Suivez la piste de Circé. C'est la meilleure car vous allez galérer
à calculer la rotation des ett/pdp alors qu'une fois construits à la main
et incorporés dans une IA de section c'est tout simple. Même sans vba...

Anacoluthe
« La vraie question est : pourquoi sélectionner?
Et je ne connais pas la réponse. »
- Albert JACQUARD

Avatar
Circé
Bonjour anacoluthe,

Anacoluthe a exprimé avec précision :


PS: Suivez la piste de Circé. C'est la meilleure car vous allez galérer
à calculer la rotation des ett/pdp alors qu'une fois construits à la main
et incorporés dans une IA de section c'est tout simple. Même sans vba...


Contente que tu sois du même avis que moi.

En fait mon IA est composée d'un saut de section, d'un texte qui
indique qu'on est en format paysage, puis d'un autre saut de section
pour revenir en portrait.

La macro insère cette IA, et déplace la sélection sur le texte de la
zone Paysage (prévenant qu'on est en portrait) ; ce qui fait que
l'utilisateur a besoin de cliquer sur le bouton qui déclenche la macro
et c'est tout, il est en bonne position pour saisir son texte.

Circé
http://faqword.free.fr


Anacoluthe
« La vraie question est : pourquoi sélectionner?
Et je ne connais pas la réponse. »
- Albert JACQUARD


Avatar
Lars
Bonjour Circé,

Un grand merci pour ton feedback. C’est une piste intéressante, pourvu que
cela puisse être réalisé par macro. Ce modèle sera utilisé dans une
organisation ou les utilisateurs veulent insérer la nouvelle page paysage
avec toute la mise en page correcte, par un clic depuis une nouvelle entrée
dans le menu. Je te tiens au courant pour la suite.

--
Lars


Bonjour Lars,

J'ai un truc pour ça beaucoup plus simple :

- Tu crées ta page en paysage, avec logo bien placé, pagination, etc.
- Tu insères le saut de section (qui contient donc toute la mise en
page de la page paysage)
- Tu fais une insertion automatique de ton saut de section
- Ta macro insère le saut de section

Mes modèles fonctionnent de cette manière et ça fonctionne très bien,
sans souci.

Circé
http://faqword.free.fr

Lars a formulé la demande :
Bonjour,

Je développe un model (Report.dot) dans MS Word XP pour un grand document.
Ce model doit contenir une macro VBA qui permet d’inséré une nouvelle page
orienté paysage, mais avec le texte, le n° de page, et les logos dans
l’en-tête et le pied de page positionné à droite et à gauche de la page
plutôt que en haut et en bas.

La macro VBA est déjà bien avancé (insertion nouvelle section, orientation
de la page et insertion de frames orienté verticalement avec le texte) mais
quand il s’agit de tourner les images des logos et de les positionner
correctement, je reçois l’erreur : ‘-2147024891 (80070005)’ – Ce membre n’est
pas accessible dans cette vue’

Le code en question est la suivante :

Dim rngHeader as Range
Dim shpLogo as Shape

With ActiveDocument.Sections(intSectionID)
Set rngHeader = .Headers(wdHeaderFooterPrimary).Range
End With

For Each shpLogo In rngHeader.ShapeRange
shpLogo.Select ‘ <= Erreur ici
Selection.ShapeRange.IncrementRotation 90#
Next

Si quelqu’un peut me donné un pointeur, je serrais TRES reconnaissant !







Avatar
Circ
Rebonjour Lars,

Lars a présenté l'énoncé suivant :
Bonjour Circé,

Un grand merci pour ton feedback. C’est une piste intéressante, pourvu que
cela puisse être réalisé par macro. Ce modèle sera utilisé dans une
organisation ou les utilisateurs veulent insérer la nouvelle page paysage
avec toute la mise en page correcte, par un clic depuis une nouvelle entrée
dans le menu. Je te tiens au courant pour la suite.


Pas de problème pour la macro... Peut être n'as tu pas lu ma réponse à
anacoluthe.

Circé
http://faqword.free.fr



--
Lars


Bonjour Lars,

J'ai un truc pour ça beaucoup plus simple :

- Tu crées ta page en paysage, avec logo bien placé, pagination, etc.
- Tu insères le saut de section (qui contient donc toute la mise en
page de la page paysage)
- Tu fais une insertion automatique de ton saut de section
- Ta macro insère le saut de section

Mes modèles fonctionnent de cette manière et ça fonctionne très bien,
sans souci.

Circé
http://faqword.free.fr

Lars a formulé la demande :
Bonjour,

Je développe un model (Report.dot) dans MS Word XP pour un grand document.
Ce model doit contenir une macro VBA qui permet d’inséré une nouvelle page
orienté paysage, mais avec le texte, le n° de page, et les logos dans
l’en-tête et le pied de page positionné à droite et à gauche de la page
plutôt que en haut et en bas.

La macro VBA est déjà bien avancé (insertion nouvelle section, orientation
de la page et insertion de frames orienté verticalement avec le texte) mais
quand il s’agit de tourner les images des logos et de les positionner
correctement, je reçois l’erreur : ‘-2147024891 (80070005)’ – Ce membre
n’est pas accessible dans cette vue’

Le code en question est la suivante :

Dim rngHeader as Range
Dim shpLogo as Shape

With ActiveDocument.Sections(intSectionID)
Set rngHeader = .Headers(wdHeaderFooterPrimary).Range
End With

For Each shpLogo In rngHeader.ShapeRange
shpLogo.Select ‘ <= Erreur ici
Selection.ShapeRange.IncrementRotation 90#
Next

Si quelqu’un peut me donné un pointeur, je serrais TRES reconnaissant !









Avatar
Lars
Bonjour Anacoluthe,

Merci pour ta réponse. Malheureusement, je ne peut pas écrire directement
"shpLogo.ShapeRange.IncrementRotation 90#" et ainsi éviter l'étape ".Select"
car ".ShapeRange" ne fait pas part de la structure shpLogo. Le compilateur
refuse cette instruction.

Je te tiens au courrant pour la suite.
--
Lars




Bonjour !

'Lars' nous a écrit ...
For Each shpLogo In rngHeader.ShapeRange
shpLogo.Select ‘ <= Erreur ici
Selection.ShapeRange.IncrementRotation 90#
Next


Vous ne pouvez pas /sélectionner/ un objet si cet objet n'est pas
visible dans la fenêtre de sélection !!!!!!!!!!

Votre code SELECT vous oblige donc à AFFICHER les en-têtes/pieds de page
Affichage / En-tête et pied de page

Ceci dit vous faites l'erreur hyperclassique de tout débutant en VBA :
Dans 99% des cas sélectionner ne sert à RIEN en VBA !!
La Selection c'est bon pour l'utilisateur manuel et l'enregistreur de macros.

Si au lieu d'écrire
Machin.Select
Selection.FaisMoiCeci

Vous écrivez tout simplement
Machin.FaisMoiCeci

1. Vous gagnez en code et en rapidité
2. Vous vous fichez de ce qui est affiché en ce moment dans la fenêtre active

Est-ce plus clair ?

PS: Suivez la piste de Circé. C'est la meilleure car vous allez galérer
à calculer la rotation des ett/pdp alors qu'une fois construits à la main
et incorporés dans une IA de section c'est tout simple. Même sans vba...

Anacoluthe
« La vraie question est : pourquoi sélectionner?
Et je ne connais pas la réponse. »
- Albert JACQUARD





Avatar
Anacoluthe
Bonjour !

'Lars' nous a écrit ...
Merci pour ta réponse. Malheureusement, je ne peut pas écrire directement
"shpLogo.ShapeRange.IncrementRotation 90#" et ainsi éviter l'étape ".Select"
car ".ShapeRange" ne fait pas part de la structure shpLogo. Le compilateur
refuse cette instruction.


Ouille ouille je pense que vous adorez vous compliquer la vie :-p
Essayez de rester cohérents avec les /objets/ vba

Machin.Select : Selection.FaisMoiCeci
à remplacer par Machin.FaisMoiCeci
ne veut pas dire remplacer mot par mot les objets !

Dans votre cas votre Machin.FaisMoiCeci s'écrit
encore bien plus simplement

shpLogo.IncrementRotation 90

ShapeRange est une collection de Shapes (formes)
Une Shape n'a pas à avoir de ShapeRange en soi, non ?
Pour atteindre une Shape dans Selection, il faut par contre
passer par sa Selection.ShapeRange. Qu'en pensez-vous ?
N'est-ce pas terriblement simple ?

Anacoluthe
« La vraie question est : pourquoi sélectionner?
Et je ne connais pas la réponse. »
- Albert JACQUARD

Avatar
Lars
Hello Anacoluthe,

ça marche !!

Ben je crois que je suis devenu tellement embrouillé avec les élements des
Shapes et Ranges que je ne peux pas voir la foret car les arbres me block la
vue.

Un grand merci pour ton aide :)
--
Lars
Avatar
Lars
Hello Circé,

Anacoluthe m'a donné la solution pour tourner le logo et ça marche
maintenant. Cependant, la solution que tu ma proposé est aussi interesante
comme alternative et je fais des essais aujourd'hui.

Je te tiens au courrant pour la suite.

Merci encore,
--
Lars