Vba : en-tête et pieds de page

Le
Jac
Bonjour à tous,

pour accéder à l'en-tête de page d'un .doc, j'utilise
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

Mais dans certains cas, je reçois une Erreur d'exécution '91' : Variable
objet ou objet de bloc With non défini.
Et dans d'autres cas, avec le même doc, ça passe. J'ai aussi le même genre
de déboires aléatoires avec des pieds de page

Y a-t-il un autre moyen d'activer en-têtes ou pieds de page afin de les
atteindre à coup sûr ?
L'enregistreur de macro donne vraiment une "salade" infernale

Merci d'avance.

Jac
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
Tisane
Le #1652654
Bonjour Jac,

pour accéder à l'en-tête de page d'un .doc, j'utilise
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Mais dans certains cas, je reçois une Erreur d'exécution '91' : Variable
objet ou objet de bloc With non défini.
Et dans d'autres cas, avec le même doc, ça passe. J'ai aussi le même genre
de déboires aléatoires avec des pieds de page...
Y a-t-il un autre moyen d'activer en-têtes ou pieds de page afin de les
atteindre à coup sûr ?
L'enregistreur de macro donne vraiment une "salade" infernale...


Es-tu sûr que l'erreur ne vienne de cette ligne ?
Que mets-tu autour de cette instruction ?

--
Tisane

Jac
Le #1652653
Absolument, c'est sur cette ligne que "ça" s'arrête. J'ai désactivé tout ce
qui se passait avant. La macro est une Private Sub Document_New().

Avant la sélection de l'entête, j'ai
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
et je réactive une liaison OLE avec
ActiveDocument.MailMerge.OpenDataSource...

Après la sélection de l'entête, je fais
Selection.WholeStory: Selection.Fields.Update: Selection.Fields.Unlink
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument

En fait, j'ai l'impression que ma question se résume à "Comment activer
l'entête d'un document ?" autrement qu'avec
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader


"Tisane"
Bonjour Jac,

pour accéder à l'en-tête de page d'un .doc, j'utilise
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Mais dans certains cas, je reçois une Erreur d'exécution '91' : Variable
objet ou objet de bloc With non défini.
Et dans d'autres cas, avec le même doc, ça passe. J'ai aussi le même
genre de déboires aléatoires avec des pieds de page...
Y a-t-il un autre moyen d'activer en-têtes ou pieds de page afin de les
atteindre à coup sûr ?
L'enregistreur de macro donne vraiment une "salade" infernale...


Es-tu sûr que l'erreur ne vienne de cette ligne ?
Que mets-tu autour de cette instruction ?

--
Tisane



Geo
Le #1652648

Bonjour à tous,

pour accéder à l'en-tête de page d'un .doc, j'utilise
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

Mais dans certains cas, je reçois une Erreur d'exécution '91' : Variable objet ou objet
de bloc With non défini.
Et dans d'autres cas, avec le même doc, ça passe. J'ai aussi le même genre de déboires
aléatoires avec des pieds de page...

Y a-t-il un autre moyen d'activer en-têtes ou pieds de page afin de les atteindre à
coup sûr ?
L'enregistreur de macro donne vraiment une "salade" infernale...

Merci d'avance.

Jac


Ca dépend de ce que vous voulez faire (bis), par exemple :
ActiveDocument.ActiveWindow.View.SeekView = wdSeekPrimaryHeader

--
A+

Jac
Le #1652385
Bonjour Geo,

je veux sélectionner le contenu de l'entête et remplacer les champs de
fusion par leurs valeurs.


"Geo"

Bonjour à tous,

pour accéder à l'en-tête de page d'un .doc, j'utilise
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

Mais dans certains cas, je reçois une Erreur d'exécution '91' : Variable
objet ou objet de bloc With non défini.
Et dans d'autres cas, avec le même doc, ça passe. J'ai aussi le même
genre de déboires aléatoires avec des pieds de page...

Y a-t-il un autre moyen d'activer en-têtes ou pieds de page afin de les
atteindre à coup sûr ?
L'enregistreur de macro donne vraiment une "salade" infernale...

Merci d'avance.

Jac


Ca dépend de ce que vous voulez faire (bis), par exemple :
ActiveDocument.ActiveWindow.View.SeekView = wdSeekPrimaryHeader

--
A+





Geo
Le #1659029

Bonjour Geo,

je veux sélectionner le contenu de l'entête et remplacer
les champs de fusion par leurs valeurs.


Pour sélectionner l'en-tête courant de la section 1:
ActiveDocument.ActiveWindow.View.SeekView = wdSeekPrimaryHeader
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Select
' remplacement à placer ici

' Retour au corps
ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocument

Il y a plusieurs entêtes et pieds de page par section ici on ne
sélectionne que la section 1, l'en-tête wdHeaderFooterPrimary.

Pour des champs de fusion c'est une autre histoire, mais vous avez
peut-être la solution.

--
A+

Jac
Le #1659028
Merci Geo,
je crois que c'est parce que j'avais un ActivePane au lieu d'un ActiveWindow
dans dans la sélection du header. Mais l'enregistreur ne fait apparaître que
ActivePane...

Jac

"Geo"

Bonjour Geo,

je veux sélectionner le contenu de l'entête et remplacer les champs de
fusion par leurs valeurs.


Pour sélectionner l'en-tête courant de la section 1:
ActiveDocument.ActiveWindow.View.SeekView = wdSeekPrimaryHeader
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Select
' remplacement à placer ici

' Retour au corps
ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocument

Il y a plusieurs entêtes et pieds de page par section ici on ne
sélectionne que la section 1, l'en-tête wdHeaderFooterPrimary.

Pour des champs de fusion c'est une autre histoire, mais vous avez
peut-être la solution.

--
A+





Anacoluthe
Le #1659027
Bonjour !

'Jac' nous a écrit ...
je crois que c'est parce que j'avais un ActivePane au lieu d'un ActiveWindow
dans dans la sélection du header. Mais l'enregistreur ne fait apparaître que
ActivePane...


Pardonnez mon intrusion mais je pense que vous vous compliquez la vie !!

L'enregistreur de macro est un outil extraordinaire, dont l'intérêt
pédagogique pour le /débutant/ en VBA ou l'initié pour explorer
le 'modèle objet' de l'application est absolument considérable.

Mais l'enregistreur de macro c'est comme le pipeau : arrive un moment
où il faut laisser tomber le pipeau pour faire de la musique ! :-D

En VBA un objet - comme un en-tête de document - n'a nullement besoin
d'être sélectionné, ni même actif, ni même visible ...

monDoc.Sections(1).Headers(1).Range.InsertAfter "patati patata"


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

Geo
Le #1659026

Mais l'enregistreur de macro c'est comme le pipeau : arrive un moment
où il faut laisser tomber le pipeau pour faire de la musique ! :-D


Ah zut, moi qui voulais me mettre au pipeau pour faire de la musique.
Va falloir choisir autre chose.

En VBA un objet - comme un en-tête de document - n'a nullement besoin
d'être sélectionné, ni même actif, ni même visible ...

monDoc.Sections(1).Headers(1).Range.InsertAfter "patati patata"


Sauf avec la version 2007, au moins à une époque pas si lointaine, il
faut afficher l'en-tête sinon Word se plante carrément, alors que ça
marche en 2003.

--
A+

Anacoluthe
Le #1659025
Hello Geo !

'Geo' nous a écrit ...
Sauf avec la version 2007, au moins à une époque pas si lointaine, il
faut afficher l'en-tête sinon Word se plante carrément, alors que ça
marche en 2003.


Voui. Misère d'un VBA pour une bonne part laissé à la dérive dans OFF2007...

Des instances d'objets inaccessibles hors l'interface utilisateur :
pouahh, il y avait déjà pareilles horreurs dans l'immonde vba de PowerPoint !
Voilà qu'on y a droit aussi dans WD2007 maintenant !

Y'a pas : le 'meilleur' VBA était celui de OFF97, c'était l'ère de VB et
M$ avait mis un paquet de développeurs dessus. Il y a plus de 10 ans...

Snif

A+
A~

Jac
Le #1659023
Il est vrai que l'enregistreur ne mâche pas ses mots :
---------------
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Selection.WholeStory
----------------
peut aussi s'écrire
----------------
ActiveDocument.ActiveWindow.View.SeekView = wdSeekPrimaryHeader
Selection.WholeStory
----------------
Malgré tout, j'aime beaucoup l'enregistreur car il évite de s'encombrer
l'esprit avec une multitude d'instructions qu'il est capable d'écrire sans
problème. Je ne suis pas sûr d'écrire correctement, de mémoire, comment
mettre la sélection en gras. Mais j'ai en mémoire ce qu'il faut pour mettre
en place des conditions, des boucles, ...
Par contre, faire du vba dans Access, sans l'enregistreur, c'est beaucoup
moins abordable.

Pour ce qui est d'agir sans sélectionner, c'est quelque chose que je fais
naturellement dans Excel et je vais essayer d'exploiter ta façon de faire
dans Word.

Merci pour ton intrusion. N'hésite pas à t'"intrusionner" quand tu veux.

Jac

"Anacoluthe"
Bonjour !

'Jac' nous a écrit ...
je crois que c'est parce que j'avais un ActivePane au lieu d'un
ActiveWindow dans dans la sélection du header. Mais l'enregistreur ne
fait apparaître que ActivePane...


Pardonnez mon intrusion mais je pense que vous vous compliquez la vie !!

L'enregistreur de macro est un outil extraordinaire, dont l'intérêt
pédagogique pour le /débutant/ en VBA ou l'initié pour explorer
le 'modèle objet' de l'application est absolument considérable.

Mais l'enregistreur de macro c'est comme le pipeau : arrive un moment
où il faut laisser tomber le pipeau pour faire de la musique ! :-D

En VBA un objet - comme un en-tête de document - n'a nullement besoin
d'être sélectionné, ni même actif, ni même visible ...

monDoc.Sections(1).Headers(1).Range.InsertAfter "patati patata"


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



Publicité
Poster une réponse
Anonyme