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

Vba : en-tête et pieds de page

10 réponses
Avatar
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

10 réponses

Avatar
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

Avatar
Jac
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" a écrit dans le message de news:

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



Avatar
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+

Avatar
Jac
Bonjour Geo,

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


"Geo" a écrit dans le message de news:


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+





Avatar
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+

Avatar
Jac
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" a écrit dans le message de news:


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+





Avatar
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

Avatar
Geo

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+

Avatar
Anacoluthe
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~

Avatar
Jac
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" a écrit dans le message de news:

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