VBA Word 2000 - Hyperlinks non supprimables ?
Fermé
iBenny
Messages postés
96
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
3 avril 2022
-
24 déc. 2016 à 04:19
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022 - 27 déc. 2016 à 16:46
iBenny Messages postés 96 Date d'inscription lundi 23 janvier 2012 Statut Membre Dernière intervention 3 avril 2022 - 27 déc. 2016 à 16:46
A voir également:
- VBA Word 2000 - Hyperlinks non supprimables ?
- Supprimer une page word - Guide
- Espace insécable word - Guide
- Organigramme word - Guide
- Suivi des modifications word - Guide
- Word et excel gratuit - Guide
9 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
24 déc. 2016 à 13:54
24 déc. 2016 à 13:54
Bonjour,
C'est quoi le code complet ?
C'est quoi le code complet ?
iBenny
Messages postés
96
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
3 avril 2022
2
Modifié par iBenny le 25/12/2016 à 00:11
Modifié par iBenny le 25/12/2016 à 00:11
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
25 déc. 2016 à 11:37
25 déc. 2016 à 11:37
Bon Noël,
Essaies :
Essaies :
Dim h As Hyperlink For Each h In Selection.Hyperlinks h.Delete Next hy
iBenny
Messages postés
96
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
3 avril 2022
2
Modifié par iBenny le 25/12/2016 à 15:09
Modifié par iBenny le 25/12/2016 à 15:09
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
25 déc. 2016 à 16:37
25 déc. 2016 à 16:37
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
iBenny
Messages postés
96
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
3 avril 2022
2
Modifié par iBenny le 26/12/2016 à 22:03
Modifié par iBenny le 26/12/2016 à 22:03
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
26 déc. 2016 à 23:04
26 déc. 2016 à 23:04
- 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
iBenny
Messages postés
96
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
3 avril 2022
2
27 déc. 2016 à 01:27
27 déc. 2016 à 01:27
Déjà présent...
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
27 déc. 2016 à 08:06
27 déc. 2016 à 08:06
Alors mets le code complet ....
ou ton fichier sur https://www.cjoint.com/
ou ton fichier sur https://www.cjoint.com/
iBenny
Messages postés
96
Date d'inscription
lundi 23 janvier 2012
Statut
Membre
Dernière intervention
3 avril 2022
2
Modifié par iBenny le 27/12/2016 à 16:49
Modifié par iBenny le 27/12/2016 à 16:49
C'est du Word 2000:
https://www.cjoint.com/doc/16_12/FLBpRFgdSln_Hyperlinks.doc
https://www.cjoint.com/doc/16_12/FLBpRFgdSln_Hyperlinks.doc