VBA Word 2000 - Hyperlinks non supprimables ?
iBenny
Messages postés
96
Date d'inscription
Statut
Membre
Dernière intervention
-
iBenny Messages postés 96 Date d'inscription Statut Membre Dernière intervention -
iBenny Messages postés 96 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Il m'arrive qqe fois (rarement) que des liens refusent de se supprimer avec ma macro .Hyperlinks(1).Delete ou .Range.Hyperlinks(1).Delete provoquant ainsi une erreur mystérieuse 4198 faisant que ma procédure se 'ferme' et que mon code se poursuive plus haut dans la pile d'appel !
Qu'est-ce qui pourrait causer cela ?
Merci d'avance de votre aide,
iBenny
Il m'arrive qqe fois (rarement) que des liens refusent de se supprimer avec ma macro .Hyperlinks(1).Delete ou .Range.Hyperlinks(1).Delete provoquant ainsi une erreur mystérieuse 4198 faisant que ma procédure se 'ferme' et que mon code se poursuive plus haut dans la pile d'appel !
Qu'est-ce qui pourrait causer cela ?
Merci d'avance de votre aide,
iBenny
A voir également:
- VBA Word 2000 - Hyperlinks non supprimables ?
- Word 2013 - Télécharger - Traitement de texte
- Supprimer une page word - Guide
- Tableau word - Guide
- Espace insécable word - Guide
- Word et excel gratuit - Guide
9 réponses
Bonjour Patrice,
L'essentiel est là ! Je peux fournir un échantillon de fichier .doc avec la macro intégrée si besoin est... ou le code complet de la procédure...
PS: Joyeux Noël !!!
iBenny
With Selection .Hyperlinks(1).Delete 'ou .Range..Hyperlinks(1).Delete End With
L'essentiel est là ! Je peux fournir un échantillon de fichier .doc avec la macro intégrée si besoin est... ou le code complet de la procédure...
PS: Joyeux Noël !!!
iBenny
Bonjour Patrice,
Votre suggestion est correcte mais j'ai déjà une boucle dans mon code permettant de sélectionner chaque liens à tour de rôle et décider ou non de le supprimer. Ça donne ceci :
La "PROCÉDURE DE SUPPRESSION" comme telle a un "pare feu" : 'On Error Resume Next' afin de contrôler l'erreur 'mystérieuse'. S'il y a erreur, il y a trois tentatives de procéder et un arrêt à la quatrième.
Benoit
Votre suggestion est correcte mais j'ai déjà une boucle dans mon code permettant de sélectionner chaque liens à tour de rôle et décider ou non de le supprimer. Ça donne ceci :
Sub LinkSearchNform() ' ' LinkSearchNform Macro ' Macro enregistrée le 12-11-07 par Benoit ' Dim Lnk As Byte, x, ici As Long Dim Del As Boolean, Col As Boolean, KeepTous As Boolean, Asked As Boolean, DelTous As Boolean Lnk = ActiveDocument.Hyperlinks.Count -LinksB4 +1 ici = .Start With Selection Application.Browser.Target = wdBrowseField Do While Lnk x = 0 Lnk = Lnk - 1 Application.Browser.Next If .Start <= ici Or .Start > ivvi Or Lnk = 0 Then Exit Do If .Font.Size = 10 Then If Not Asked Then If MsgBox("SUPPRIMER Tous les liens ?", vbYesNo + vbQuestion, "Hyperliens") = vbYes Then DelTous = True ElseIf MsgBox("CONSERVER Tous les liens ?", vbYesNo + vbDefaultButton2 + vbQuestion, "Hyperliens") = vbYes Then KeepTous = True End If Asked = True End If If Not (KeepTous Or DelTous) Then If MsgBox("Effacer le lien ?", vbQuestion + vbYesNo, "HYPERLIENS") = vbYes Then Del = True End If Else Del = True End If '======================== 'PROCÉDURE DE SUPPRESSION '======================== If Del Or DelTous Then Do x = x + 1 If Err.Number Then If x = 2 Then .Font.Color = wdColorRed .Collapse .Move End If On Error GoTo 0 End If On Error Resume Next Select Case x Case 1 To 2 .Hyperlinks(1).Delete Case 3 .Range.Hyperlinks(1).Delete Case Else MsgBox "ÉCHEC de suppression de lien !", , "HYPERLINKS" Stop End Select Loop While Err.Number If Not DelTous Then Del = False End If Loop .SetRange IvI, IvI End With End Sub
La "PROCÉDURE DE SUPPRESSION" comme telle a un "pare feu" : 'On Error Resume Next' afin de contrôler l'erreur 'mystérieuse'. S'il y a erreur, il y a trois tentatives de procéder et un arrêt à la quatrième.
Benoit
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
1) Une boucle d'analyse du type "For Each Objet In Collection" ne s'exécute que s'il existe au moins un objet dans la collection, ce qui n'est pas le cas de ton code. L'erreur vient très probablement de là.
2) Le VBA Word n'est pas ma spécialité mais ça reste du VBA. Plutôt qu'utiliser Resume Next sans aucune autre vérification, tu devrais écrire un véritable gestionnaire d'erreur du style :
1) Une boucle d'analyse du type "For Each Objet In Collection" ne s'exécute que s'il existe au moins un objet dans la collection, ce qui n'est pas le cas de ton code. L'erreur vient très probablement de là.
2) Le VBA Word n'est pas ma spécialité mais ça reste du VBA. Plutôt qu'utiliser Resume Next sans aucune autre vérification, tu devrais écrire un véritable gestionnaire d'erreur du style :
Sub xxx() ' code sans risque d'erreur ' ... On Error GoTo ErrorHandler ' Instructions à risque '... On Error GoTo 0 ' suite du code ' ... Exit Sub ErrorHandler: 'Routine de gestion d'erreur. 'Évalue le numéro d'erreur. Select Case Err.Number 'ou Err.description Case xxx 'Traitement de l'erreur xxx ' ... Resume ' ou Resume Next selon le cas Case xxy 'Traitement de l'erreur xxy ' ... Resume ' ou Resume Next selon le cas Case Else MsgBox Err.description, vbCritical End End Select End Sub
Bonjour,
Vous dites : [1) Une boucle d'analyse du type "For Each Objet In Collection" ne s'exécute que s'il existe au moins un objet dans la collection, ce qui n'est pas le cas de ton code. L'erreur vient très probablement de là. ]
Je sais, et l'erreur ne viens PAS de là! Je ne peux pas utiliser cette boucle car elle va traiter tous les liens en partant du premier. Moi je dois les traiter à partir du dernier, remonter les liens et arrêter à un point précis limitant la sélection au dernier collage d'un long document. Je dois donc utiliser (.range).HyperLinks(x) pour se faire, ou le Application.Browser.Next.
Ce qui est curieux est qu'en utilisant l'enregistreur de macro, je réussis à supprimer le lien 'mystérieux' via la touche clavier 'menu contextuel' > Lien hypertexte > Supprimer le lien hypertexte, ce qui génère le code :
alors qu'implémenté dans mes macros, ça ne fonctionne pas.
Idem en passant par le menu 'Insretion > Lien hypertexte > Bouton : Supprimer le lien'.
Le problème est que je ne connais pas le SendKeys ni la procédure pour activer le menu contextuel, et qu'en utilisant le SendKeys pour activer la fenêtre de gestion des Hyperliens (Ctrl K), une fois apparue, impossible d'interagir avec cette dernière (elle paralyse le code).
La différence entre ce lien 'mystérieux' et un lien normal est :

et

Où 'Objet supprimé' qualifie le lien 'mystérieux' !
iBenny
Vous dites : [1) Une boucle d'analyse du type "For Each Objet In Collection" ne s'exécute que s'il existe au moins un objet dans la collection, ce qui n'est pas le cas de ton code. L'erreur vient très probablement de là. ]
Je sais, et l'erreur ne viens PAS de là! Je ne peux pas utiliser cette boucle car elle va traiter tous les liens en partant du premier. Moi je dois les traiter à partir du dernier, remonter les liens et arrêter à un point précis limitant la sélection au dernier collage d'un long document. Je dois donc utiliser (.range).HyperLinks(x) pour se faire, ou le Application.Browser.Next.
Ce qui est curieux est qu'en utilisant l'enregistreur de macro, je réussis à supprimer le lien 'mystérieux' via la touche clavier 'menu contextuel' > Lien hypertexte > Supprimer le lien hypertexte, ce qui génère le code :
.Range.HyperLinks(1).Delete
alors qu'implémenté dans mes macros, ça ne fonctionne pas.
Idem en passant par le menu 'Insretion > Lien hypertexte > Bouton : Supprimer le lien'.
Le problème est que je ne connais pas le SendKeys ni la procédure pour activer le menu contextuel, et qu'en utilisant le SendKeys pour activer la fenêtre de gestion des Hyperliens (Ctrl K), une fois apparue, impossible d'interagir avec cette dernière (elle paralyse le code).
La différence entre ce lien 'mystérieux' et un lien normal est :

et

Où 'Objet supprimé' qualifie le lien 'mystérieux' !
iBenny
- Soit ce code n'est pas complet,
- Soit il y a plusieurs sources d'erreur dans ton code.
Commences ton module par
Option Explicit
- Soit il y a plusieurs sources d'erreur dans ton code.
Commences ton module par
Option Explicit