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

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Circ
Le #1718724
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 !


Anacoluthe
Le #1718641
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

Circé
Le #1718637
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


Lars
Le #1718633
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 !







Circ
Le #1718632
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 !









Lars
Le #1718486
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





Anacoluthe
Le #1718479
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

Lars
Le #1718461
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
Lars
Le #1718460
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
Publicité
Poster une réponse
Anonyme