Bonsoir
je rempli un formulaire word directement depuis access avec les commandes
'ouverture de l'objet word
Set objWord = CreateObject("Word.Application")
objWord.Documents.Open Chem
dans lequel j'ai des champs ( signet : Nom; Signet : Prenom....)
je remplis ces champs automatiquement
'initialisation des signets
objWord.Selection.GoTo wdGoToBookmark, , , "Nom"
' mettre la valeur dans le signet
objWord.Selection.TypeText TxtNom.Value
je voudrai savoir comment faire pour ne pas perdre mes signets
car avec cette methode le signet n'est pas rempli mais bien remplace par la
valeur.
Merci pour votre aide
gerard
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Guy Moncomble
Bonjour à tous, dans le message <bodvrn$439$,
| Bonsoir | je rempli un formulaire word directement depuis access avec les | commandes 'ouverture de l'objet word | Set objWord = CreateObject("Word.Application") | objWord.Documents.Open Chem | dans lequel j'ai des champs ( signet : Nom; Signet : Prenom....) | je remplis ces champs automatiquement | 'initialisation des signets | objWord.Selection.GoTo wdGoToBookmark, , , "Nom" | ' mettre la valeur dans le signet | objWord.Selection.TypeText TxtNom.Value | je voudrai savoir comment faire pour ne pas perdre mes signets | car avec cette methode le signet n'est pas rempli mais bien remplace | par la valeur. | Merci pour votre aide | gerard La solution est simple dans son principe : - mémoriser le début du signet à modifier, - modifier le signet - sélectionner une zone correspondant au nouveau texte. J'ai écrit une macro qui fait cela dans toutes les configurations. Une copie que tu peux sans doute adapter se trouve en fin de message, mais si le document n'est pas trop complexe tu peux essayer ceci : - faire un MOVELEFT du nombre de caractères inséré, en sélectionnant - redéfinir le signet soit quelque chose du genre, à adapter pour l'utiliser à partir d'Access :
Public Sub toto() Dim textesignet Selection.GoTo what:=wdGoToBookmark, Name:="toto" textesignet = "lulu" Selection.TypeText textesignet Selection.MoveLeft unit:=wdCharacter, Count:=Len(textesignet), Extend:=wdExtend ActiveDocument.Bookmarks.Add Name:="toto", Range:=Selection.Range End Sub -- A+
'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 ======
Bonjour à tous,
dans le message <bodvrn$439$1@news-reader3.wanadoo.fr>,
| Bonsoir
| je rempli un formulaire word directement depuis access avec les
| commandes 'ouverture de l'objet word
| Set objWord = CreateObject("Word.Application")
| objWord.Documents.Open Chem
| dans lequel j'ai des champs ( signet : Nom; Signet : Prenom....)
| je remplis ces champs automatiquement
| 'initialisation des signets
| objWord.Selection.GoTo wdGoToBookmark, , , "Nom"
| ' mettre la valeur dans le signet
| objWord.Selection.TypeText TxtNom.Value
| je voudrai savoir comment faire pour ne pas perdre mes signets
| car avec cette methode le signet n'est pas rempli mais bien remplace
| par la valeur.
| Merci pour votre aide
| gerard
La solution est simple dans son principe :
- mémoriser le début du signet à modifier,
- modifier le signet
- sélectionner une zone correspondant au nouveau texte.
J'ai écrit une macro qui fait cela dans toutes les configurations. Une
copie que tu peux sans doute adapter se trouve en fin de message, mais
si le document n'est pas trop complexe tu peux essayer ceci :
- faire un MOVELEFT du nombre de caractères inséré, en sélectionnant
- redéfinir le signet
soit quelque chose du genre, à adapter pour l'utiliser à partir d'Access
:
Public Sub toto()
Dim textesignet
Selection.GoTo what:=wdGoToBookmark, Name:="toto"
textesignet = "lulu"
Selection.TypeText textesignet
Selection.MoveLeft unit:=wdCharacter, Count:=Len(textesignet),
Extend:=wdExtend
ActiveDocument.Bookmarks.Add Name:="toto", Range:=Selection.Range
End Sub
--
A+
'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
======
| Bonsoir | je rempli un formulaire word directement depuis access avec les | commandes 'ouverture de l'objet word | Set objWord = CreateObject("Word.Application") | objWord.Documents.Open Chem | dans lequel j'ai des champs ( signet : Nom; Signet : Prenom....) | je remplis ces champs automatiquement | 'initialisation des signets | objWord.Selection.GoTo wdGoToBookmark, , , "Nom" | ' mettre la valeur dans le signet | objWord.Selection.TypeText TxtNom.Value | je voudrai savoir comment faire pour ne pas perdre mes signets | car avec cette methode le signet n'est pas rempli mais bien remplace | par la valeur. | Merci pour votre aide | gerard La solution est simple dans son principe : - mémoriser le début du signet à modifier, - modifier le signet - sélectionner une zone correspondant au nouveau texte. J'ai écrit une macro qui fait cela dans toutes les configurations. Une copie que tu peux sans doute adapter se trouve en fin de message, mais si le document n'est pas trop complexe tu peux essayer ceci : - faire un MOVELEFT du nombre de caractères inséré, en sélectionnant - redéfinir le signet soit quelque chose du genre, à adapter pour l'utiliser à partir d'Access :
Public Sub toto() Dim textesignet Selection.GoTo what:=wdGoToBookmark, Name:="toto" textesignet = "lulu" Selection.TypeText textesignet Selection.MoveLeft unit:=wdCharacter, Count:=Len(textesignet), Extend:=wdExtend ActiveDocument.Bookmarks.Add Name:="toto", Range:=Selection.Range End Sub -- A+
'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 ======