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.
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
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
prioux@ensma.fr was telling us:
prioux@ensma.fr 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
jmarcilREMOVE@CAPSsympatico.caTHISTOO
Word MVP site: http://www.word.mvps.org
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