OVH Cloud OVH Cloud

VBA depuis access - Signet & Pied de page

4 réponses
Avatar
joyeux atchoum
S'lt

je viens vers vous car je n'ai pu obtenir une solution pour mon pb dans
le groupe access. ;(

Voici mon pb
depuis access j'ouvre un document word dans lequel je remplis des
signets et je sauvegarde le tout à la fin de la manip
pour ceci pas de pb ce n'est pas du grand art mais ça a le merite de
fonctionner ;)

j'aimerai remplir un signet qui est defini dans le pied de page et là
ça coince
soit le signets n'est pas remplit
soit j'efface tout le contenu de mon pied de page et je le rempli par
ma valeur


euh, je ne sais pas quoi dire de plus
si vous aviez une idée je suis preneur ;=) (comme c'est bizarre)

merci d'avance
ja;)

qui fait son premier pas dans la new de word (faut un debut à tout) :=)

4 réponses

Avatar
Guy Moncomble
| j'aimerai remplir un signet qui est defini dans le pied de page et là
| ça coince
| soit le signets n'est pas remplit
| soit j'efface tout le contenu de mon pied de page et je le rempli par
| ma valeur

Voici une procédure écrite pour la mise à jour des signets, qui conserve
les noms des signets, et est utilisable *dans* Word. Soit tu la mets
dans Word (normal.dot), soit tu l'adaptes pour l'exécuter depuis Access.
Tu noteras qu'il est inutile d'ouvrir les pieds de page ou les en-têtes,
la sélection d'un de leurs signets suffit pour les ouvrir.


Public Sub MajSignet(NomSignet As String, TexteSignet As String)
'Guy Moncomble - Août 2003 ©
'Modifie le texte d'un signet et rétablit ce signet (supprimé par la
mise à jour).

'Fonctionne dans :
' - document principal, y compris les tableaux,
' - en-têtes et pieds de page,
' - cadres et zones de texte,
' - notes de bas de page et notes de fin.

Dim MyRange As Range, Debut As Long, TypAff As WdViewType, FenAff As
WdSeekView

'Si le signet existe
If ActiveDocument.Bookmarks.Exists(NomSignet) Then
'Où sommes nous au moment de l'appel ? quel est le type d'affichage
?
FenAff = ActiveDocument.ActiveWindow.View.SeekView
TypAff = ActiveDocument.ActiveWindow.View.Type
'Sélection du signet
ActiveDocument.Bookmarks(NomSignet).Select
'Où sommes-nous maintenant ?
If Selection.Information(wdInHeaderFooter) Then
'Il faut revenir en mode page, en-tête ou pied de page ouvert,
sinon marche pas
ActiveWindow.View.Type = wdPrintView
'On resélectionne
ActiveDocument.Bookmarks(NomSignet).Select
End If
Set MyRange = Selection.Range
Debut = MyRange.Start
Selection.Bookmarks(NomSignet).Range.Text = TexteSignet
MyRange.SetRange Debut, Debut + Len(TexteSignet)
Selection.Bookmarks.Add NomSignet, MyRange
'On rétablit la vue initiale
ActiveWindow.ActivePane.View.SeekView = FenAff
ActiveWindow.View.Type = TypAff
End If
End Sub
--
A+

GMO MVP Word

Laissées à elles-mêmes, les choses tendent à aller de pire en pire. Se
faire aider ne fait qu'accélérer le processus.

Edward A. Murphy, Jr.

P.-S. Je n'ai pas fait de tests exhaustifs, aussi est-il possible de
trouver des erreurs, dans le cas d'une configuration imprévue.
Il n'est pas interdit d'améliorer !
Avatar
joyeux atchoum
Dans l'article , "Guy
Moncomble" <http://cerbermail.com/?QOoOlzu81P> vous avez dit...


| j'aimerai remplir un signet qui est defini dans le pied de page et là
| ça coince
| soit le signets n'est pas remplit
| soit j'efface tout le contenu de mon pied de page et je le rempli par
| ma valeur

Voici une procédure écrite pour la mise à jour des signets, qui conserve
les noms des signets, et est utilisable *dans* Word. Soit tu la mets
dans Word (normal.dot), soit tu l'adaptes pour l'exécuter depuis Access.
Tu noteras qu'il est inutile d'ouvrir les pieds de page ou les en-têtes,
la sélection d'un de leurs signets suffit pour les ouvrir.


Merci pour le script
pour l'accés au pied de page cela ne marche pas à tous les coups mais
cela ne me surprend pas j'ai des problemes sur la gestion a proprement
parler de word depuis access. (erreur 462 entre autre ) ;=)
Mais le corps de texte est bien remplit (enfin quand je lance sans
erreur)

Dans tous les cas ce script est bien plus propre que je ce que je
faisais alors j'adopte ;=)

J'ai tout de meme une question pourquoi ceci :

Set MyRange = Selection.Range
Debut = MyRange.Start
Selection.Bookmarks(NomSignet).Range.Text = TexteSignet
MyRange.SetRange Debut, Debut + Len(TexteSignet)
Selection.Bookmarks.Add NomSignet, MyRange


est ce que faire
Selection.Bookmarks(NomSignet).Range.InserAfter = TexteSignet
ne reviens pas au meme ?

Car si j'ai bien compris ce bout sert à redefinir le bout de texte
inseré comme le signet

Enfin dans tous les cas merci, je continue dans le truc


ja;)

Il n'est pas interdit d'améliorer !


ja qui croyait que tout tombait tout cuit, Zut ;=)

Avatar
Guy Moncomble
Bonjour à tous,
dans le message ,

| Merci pour le script
| pour l'accés au pied de page cela ne marche pas à tous les coups mais
| cela ne me surprend pas j'ai des problemes sur la gestion a proprement
| parler de word depuis access. (erreur 462 entre autre ) ;=)
| Mais le corps de texte est bien remplit (enfin quand je lance sans
| erreur)

Qu'est-ce qui ne va pas dans les pieds de page ?


| J'ai tout de meme une question pourquoi ceci :



|| Set MyRange = Selection.Range
|| Debut = MyRange.Start

Pour initialiser la zone de définition du signet

|| Selection.Bookmarks(NomSignet).Range.Text = TexteSignet

Remplacement du texte *mis au bon endroit et sans sélection parasite, en
particulier dans les tableaux.

|| MyRange.SetRange Debut, Debut + Len(TexteSignet)
|| Selection.Bookmarks.Add NomSignet, MyRange

Redéfinition du signet, en fait création d'un nouveau, le précédent
étant détruit.

| est ce que faire
| Selection.Bookmarks(NomSignet).Range.InserAfter = TexteSignet
| ne reviens pas au meme ?

Oui pour le texte du signet, mais sans la méthode range pour redéfinir,
galère garantie. De toutes façon, de cette manière, il faut détruire
l'ancien signet : le texte et donc le nom.
Tu auras noté que la sélection préalble du signet n'est nécessaire qu'à
cause des en-tête et pieds de page. En effet activedocument.range est
inutilisable dans ces zones et il faut impérativement travailler avec
selection.range donc ouvrir. En tout cas je n'ai rien trouvé de mieux.
--
A+

GMO MVP Word

Laissées à elles-mêmes, les choses tendent à aller de pire en pire. Se
faire aider ne fait qu'accélérer le processus.

Edward A. Murphy, Jr.
Avatar
joyeux atchoum
S'lt

Encore merci pour le script

Qu'est-ce qui ne va pas dans les pieds de page ?


En fait maintenant tout semble aller bien
J'ai une erreur sur l'ouverture du document
en utilisant ActiveDocument dés fois ton script ne reconnait plus le
serveur d'application
j'ai resolu en partie le pb en donnant dans le script la reference au
document
il fait moins la tete mais ce n'est pas encore ça

en fait le document est ouvert depuis un document type, remplit,
sauvegarder sous son nouveau nom, puis rendu visible
c'est l'utilisateur qui ferme manuellement word
je dois avoir des probleme de gestion sur l'automation

| J'ai tout de meme une question pourquoi ceci :
|| Set MyRange = Selection.Range
|| Debut = MyRange.Start
Pour initialiser la zone de définition du signet
|| Selection.Bookmarks(NomSignet).Range.Text = TexteSignet
Remplacement du texte *mis au bon endroit et sans sélection parasite, en
particulier dans les tableaux.
|| MyRange.SetRange Debut, Debut + Len(TexteSignet)
|| Selection.Bookmarks.Add NomSignet, MyRange
Redéfinition du signet, en fait création d'un nouveau, le précédent
étant détruit.


Oki, c'est ce que j'avais globalement deviné ;=)

| est ce que faire
| Selection.Bookmarks(NomSignet).Range.InserAfter = TexteSignet
| ne reviens pas au meme ?

Oui pour le texte du signet, mais sans la méthode range pour redéfinir,
galère garantie. De toutes façon, de cette manière, il faut détruire
l'ancien signet : le texte et donc le nom.


Mais je crois que je n'ai pas cerné la grande différence entre Range,
Select, ....

Tu auras noté que la sélection préalble du signet n'est nécessaire qu'à
cause des en-tête et pieds de page. En effet activedocument.range est
inutilisable dans ces zones et il faut impérativement travailler avec
selection.range donc ouvrir. En tout cas je n'ai rien trouvé de mieux.


ok je comprends mieux mais je dois reconnaitre que c'est pas loin
d'etre de l'hebreu
Pour le moment j'ai les notions de base liées à l'automation depuis
access grace aux sites des MVP access mais apres c'est la grande
inconnue

Enfin cela marche presque et en plus je crois avoir en gros compris le
tout ;=)
Youpi

Merci encore
ja ;=)

qui reussi à remplir un pied de page, vive les pieds de nez

P.S. au fait quels sont les sites de reférences ?