For Each LINK In ActiveDocument.Hyperlinks
LINK.Delete
Next
a-t-elle, sous Word 97/2000, un comportement si étrange ?
Elle devrait effacer tous les liens hypertextes, mais n'en efface qu'1 sur 2, ce
qui fait qu'il faut la lancer n+1 fois pour 2^n liens !
Si on remplace "LINK.Delete" par "MsgBox LINK.Range", on voit pourtant bien
défiler *tous* les liens !
Celle ci-dessous fonctionne, mais à quel prix !!!
StartAgain:
TMP = ActiveDocument.Hyperlinks.Count
If TMP = 0 Then Exit Sub
For I = 1 To TMP
On Error GoTo StartAgain
ActiveDocument.Hyperlinks(I).Range.Select
Selection.Delete
Next
Celle-ci aussi, mais elle est bien brutale, qui ne permet pas d'effectuer
quelques tests sur le lien avant de l'effacer !
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
Geo
Bonjour Quetzalcoatl
Bonsoir,
Pourquoi la macro suivante :
For Each LINK In ActiveDocument.Hyperlinks LINK.Delete Next
a-t-elle, sous Word 97/2000, un comportement si étrange ? Elle devrait effacer tous les liens hypertextes, mais n'en efface qu'1 sur 2, ce qui fait qu'il faut la lancer n+1 fois pour 2^n liens !
Si on remplace "LINK.Delete" par "MsgBox LINK.Range", on voit pourtant bien défiler *tous* les liens !
C'est le cas pour toutes les suppressions, il y a une logique qui a été donnée sur ce forum, mais je ne me souveins pas. En fait il faut partir de la fin et donc le for each ne convient pas.
Celle ci-dessous fonctionne, mais à quel prix !!!
StartAgain: TMP = ActiveDocument.Hyperlinks.Count If TMP = 0 Then Exit Sub For I = 1 To TMP On Error GoTo StartAgain
Oh ! Horreur
ActiveDocument.Hyperlinks(I).Range.Select Selection.Delete Next
Il me semble qu'il vaudrait mieux faire For i = ActiveDocument.Shapes.Count To 1 Step -1 ActiveDocument.Hyperlinks(i).Range.Select If condition d'effacement Then ActiveDocument.Hyperlinks(i).Range.Select.Delete End If Next i
Bonjour Quetzalcoatl
Bonsoir,
Pourquoi la macro suivante :
For Each LINK In ActiveDocument.Hyperlinks
LINK.Delete
Next
a-t-elle, sous Word 97/2000, un comportement si étrange ?
Elle devrait effacer tous les liens hypertextes, mais n'en efface
qu'1 sur 2, ce qui fait qu'il faut la lancer n+1 fois pour 2^n liens
!
Si on remplace "LINK.Delete" par "MsgBox LINK.Range", on voit
pourtant bien défiler *tous* les liens !
C'est le cas pour toutes les suppressions, il y a une logique qui a
été donnée sur ce forum, mais je ne me souveins pas.
En fait il faut partir de la fin et donc le for each ne convient pas.
Celle ci-dessous fonctionne, mais à quel prix !!!
StartAgain:
TMP = ActiveDocument.Hyperlinks.Count
If TMP = 0 Then Exit Sub
For I = 1 To TMP
On Error GoTo StartAgain
Oh ! Horreur
ActiveDocument.Hyperlinks(I).Range.Select
Selection.Delete
Next
Il me semble qu'il vaudrait mieux faire
For i = ActiveDocument.Shapes.Count To 1 Step -1
ActiveDocument.Hyperlinks(i).Range.Select
If condition d'effacement Then
ActiveDocument.Hyperlinks(i).Range.Select.Delete
End If
Next i
For Each LINK In ActiveDocument.Hyperlinks LINK.Delete Next
a-t-elle, sous Word 97/2000, un comportement si étrange ? Elle devrait effacer tous les liens hypertextes, mais n'en efface qu'1 sur 2, ce qui fait qu'il faut la lancer n+1 fois pour 2^n liens !
Si on remplace "LINK.Delete" par "MsgBox LINK.Range", on voit pourtant bien défiler *tous* les liens !
C'est le cas pour toutes les suppressions, il y a une logique qui a été donnée sur ce forum, mais je ne me souveins pas. En fait il faut partir de la fin et donc le for each ne convient pas.
Celle ci-dessous fonctionne, mais à quel prix !!!
StartAgain: TMP = ActiveDocument.Hyperlinks.Count If TMP = 0 Then Exit Sub For I = 1 To TMP On Error GoTo StartAgain
Oh ! Horreur
ActiveDocument.Hyperlinks(I).Range.Select Selection.Delete Next
Il me semble qu'il vaudrait mieux faire For i = ActiveDocument.Shapes.Count To 1 Step -1 ActiveDocument.Hyperlinks(i).Range.Select If condition d'effacement Then ActiveDocument.Hyperlinks(i).Range.Select.Delete End If Next i
Quetzalcoatl
Il me semble qu'il vaudrait mieux faire For i = ActiveDocument.Shapes.Count To 1 Step -1 ActiveDocument.Hyperlinks(i).Range.Select If condition d'effacement Then ActiveDocument.Hyperlinks(i).Range.Select.Delete End If Next i
Merci beaucoup Geo,
J'ai adapté à mon besoin en :
For i = ActiveDocument.Hyperlinks.Count To 1 Step -1 If Instr (1, ActiveDocument.Hyperlinks(i).Address, "[chaîne recherchée]",1) then ActiveDocument.Hyperlinks(i).Delete Next
En effet, il doit y avoir renumérotation après chaque effacement ! Voici d'ailleurs une autre solution, mais moins "lisible" :
For i = 1 to ActiveDocument.Hyperlinks.count If Instr (1, ActiveDocument.Hyperlinks(1).Address, "[chaîne recherchée]",1) then ActiveDocument.Hyperlinks(1).Delete Next
-- Veloma
Il me semble qu'il vaudrait mieux faire
For i = ActiveDocument.Shapes.Count To 1 Step -1
ActiveDocument.Hyperlinks(i).Range.Select
If condition d'effacement Then
ActiveDocument.Hyperlinks(i).Range.Select.Delete
End If
Next i
Merci beaucoup Geo,
J'ai adapté à mon besoin en :
For i = ActiveDocument.Hyperlinks.Count To 1 Step -1
If Instr (1, ActiveDocument.Hyperlinks(i).Address, "[chaîne
recherchée]",1) then ActiveDocument.Hyperlinks(i).Delete
Next
En effet, il doit y avoir renumérotation après chaque effacement ! Voici
d'ailleurs une autre solution, mais moins "lisible" :
For i = 1 to ActiveDocument.Hyperlinks.count
If Instr (1, ActiveDocument.Hyperlinks(1).Address, "[chaîne
recherchée]",1) then ActiveDocument.Hyperlinks(1).Delete
Next
Il me semble qu'il vaudrait mieux faire For i = ActiveDocument.Shapes.Count To 1 Step -1 ActiveDocument.Hyperlinks(i).Range.Select If condition d'effacement Then ActiveDocument.Hyperlinks(i).Range.Select.Delete End If Next i
Merci beaucoup Geo,
J'ai adapté à mon besoin en :
For i = ActiveDocument.Hyperlinks.Count To 1 Step -1 If Instr (1, ActiveDocument.Hyperlinks(i).Address, "[chaîne recherchée]",1) then ActiveDocument.Hyperlinks(i).Delete Next
En effet, il doit y avoir renumérotation après chaque effacement ! Voici d'ailleurs une autre solution, mais moins "lisible" :
For i = 1 to ActiveDocument.Hyperlinks.count If Instr (1, ActiveDocument.Hyperlinks(1).Address, "[chaîne recherchée]",1) then ActiveDocument.Hyperlinks(1).Delete Next