OVH Cloud OVH Cloud

creation de signets et temporisation

1 réponse
Avatar
prioux
Bonjour.
J'essaie de mettre des valeurs a partir du tableau montab dans des
signets d'un document word
et je remets a chaque fois l'ancien nom du signet,pour pouvoir a
nouveau
l'atteindre le prochain coup:
....
ouverture word
...
for i=1 to 9
with objword
.Selection.Goto what:=wdGoToBookmark, Name:="signet" & i
.Selection.TypeText Text:=montab(i)
.Selection.Find.Text = montab(i)
.Selection.Find.Execute
.ActiveDocument.Bookmarks.Add Name:="signet" & i
end with
next i
Or les signets sont bien créés pour i=1,2,3,6,7,9 mais pas pour 4,5,8.
Vais-je trop vite ?
Faut-il mettre une tempo quelque part?
D'avance merci.

1 réponse

Avatar
Jean-Guy Marcil
was telling us:
nous racontait que :

Bonjour.
J'essaie de mettre des valeurs a partir du tableau montab dans des
signets d'un document word
et je remets a chaque fois l'ancien nom du signet,pour pouvoir a
nouveau
l'atteindre le prochain coup:
....
ouverture word
...
for i=1 to 9
with objword
.Selection.Goto what:=wdGoToBookmark, Name:="signet" & i
.Selection.TypeText Text:=montab(i)
.Selection.Find.Text = montab(i)
.Selection.Find.Execute
.ActiveDocument.Bookmarks.Add Name:="signet" & i
end with
next i
Or les signets sont bien créés pour i=1,2,3,6,7,9 mais pas pour 4,5,8.
Vais-je trop vite ?
Faut-il mettre une tempo quelque part?
D'avance merci.


Il faut surtout éviter d'utiliser l'objet Selection, surtout quand il y a
beaucop de manipulations à faire. Il y a quelques cas très spécifiques où on
doit utiliser Selection (Avec les signet prédéfinis ou la propriété
Information par example). Sinon, il faut utiliser l'objet Range.
Malheureusement, cet apprentissage ce fait avec beaucoup d'essais et
d'erreurs car l'enregistreur de Macros dans Word utilise toujours l'objet
Selection. Ce dernier cause toutes sorts de problèmes dès qu'on veut faire
des choses un petit peu compliquées! Dans ton cas, peut-être que l'ajout de
objWord.ScreenUpdating = False
au début du code et de
objWord.ScreenRefresh
objWord.ScreenUpdating = True
à la fin aiderait.
Mais je te conseille fortement d'apprendre à utiliser l'objet Range si tu
veux faire des macros solides, fiables et efficaces.

Regarde ce code par example:

'_______________________________________
Sub Signet_et_Objet_Range()

Dim objWord As Word.Application
Dim CurDoc As Word.Document
Dim BookMarkRange As Range
Dim i As Long
Dim montab(1 To 9) As String

Set objWord = Word.Application
Set CurDoc = objWord.ActiveDocument

For i = 1 To 9
With CurDoc
montab(i) = "Texte pour le signet #" & i & "."
Set BookMarkRange = .Bookmarks("signet" & i).Range
BookMarkRange.Text = montab(i)
.Bookmarks.Add "signet" & i, BookMarkRange
End With
Next i

Set objWord = Nothing
Set CurDoc = Nothing
Set BookMarkRange = Nothing

End Sub
'_______________________________________

Je ne déplace pas la sélection de l'utilsateur et c'est plus rapide.

--
Salut!
_______________________________________
Jean-Guy Marcil - Word MVP

Word MVP site: http://www.word.mvps.org