Un coup de pouce pour finaliser une macro MsWord 2007

Résolu/Fermé
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019 - 11 janv. 2018 à 15:00
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019 - 2 févr. 2018 à 14:59
Bonjour,

J’ai un long fichier, texte-pour-macro-Vba.docm, tout en texte, dans lequel se trouvent de nombreux liens vers des pages Internet du type http://www.xxxxxxxx.php ou https://yyyyy.htm (etc.) sachant que tous commencent par http et tous forment un tout sans espace (le lien est suivi d‘un espace qui délimite, puis un ‘]’) et je voudrais créer par macro des liens hypertextes pour tous ces liens, un par un.
Donc dans un premier temps j’ai fait une macro qui colore en vert ces liens hypertextes (globalement), comme ci-après :
Sub greencolor()
Selection.HomeKey unit:=wdStory
ScreenUpdating = False
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Font.Bold = True
.Replacement.Font.Color = wdColorGreen
.MatchWildcards = True
.Text = "(\http*\ )"
.Forward = True
.Execute Replace:=wdReplaceAll
.Text = "\1"
End With
End Sub

Cà marche !
Ensuite, j’ai cherché comment créer une boucle pour que les cas de la sélection soient pris un par un.
J’ai pas pu tester (cela me dépasse), désolée mais cela donne quelque chose comme cela :

Sub boucle
Dim p As Paragraph
Dim i As Long
Dim doc1, As String

doc1 = "texte-pour-macro-Vba.docm"
Documents(doc1).Activate

For Each p In Documents(doc1).Paragraphs
If blabla (le processus de sélection commençant par ‘htt’ suivi de caractères variables formant un mot entier

Next

End With
Do While Selection.Find.Execute = True
Loop
Next i
End Sub

Enfin, j’ai trouvé sur Internet la fonction hyperlinks qui permet de spécifier (convertir) une série de caractères en lien hypertexte :

With Selection
.Value = TexteLien
.Hyperlinks.Add Anchor:=Selection, Address:=ClasseurDestination, SubAddress:="'" & FeuilleDestination & "'" & "!" & AdresseDestination, TextToDisplay:=TexteLien
End With

expression . Add( Anchor, Address, SubAddress, ScreenTip, TextToDisplay, Target)
seulement anchor est obligatoire
exemple :
ActiveDocument.Hyperlinks.Add Address:="http://www.msn.com/", _
Anchor:=Selection.Range


Voilà j’aurais besoin d’un expert de VBA Word qui me permette de finaliser cette macro en fusionnant (correctement c’est là le souci pour moi… j’y ai déjà passé des heures !) ces 3 bouts de codes.

Merci d’avance,

Steph
PS: désolée je ne souviens plus comment identifier le code VBA, j'ai mis <code>


A voir également:

4 réponses

m@rina Messages postés 21182 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 16 décembre 2024 11 368
12 janv. 2018 à 13:12
Bonjour,

Désolée, mais je ne comprends pas grand chose. Tu dis " je voudrais créer par macro des liens hypertextes pour tous ces liens"
Mais si ce sont déjà des liens, que faut il faire en plus ?

Alors j'essaie d'imaginer : serait-ce du texte brut ? et tu voudrais convertir ces textes bruts en vrais liens ?

Alors si c'est ça, je ne comprends rien à tes macros. Pourquoi le passage en vert ? etc.
Et si c'est ça le problème il n'y a pas besoin de macro. Si tu tiens à la macro :

Sub liens()
Options.AutoFormatReplaceHyperlinks = True
With ActiveDocument
.Kind = wdDocumentNotSpecified
.Range.AutoFormat
End With
End Sub


A noter que la propriété Options permet de savoir ce qu'on veut faire comme corrections automatiques. Donc, on peut compléter si nécessaire. Par exemple si tu as des guillemets dactylographiques et que tu veux les conserver ainsi, etc.

m@rina




2
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
Modifié le 12 janv. 2018 à 16:42
Bonjour M@rina

Ah merci de bien vouloir m'aider.
J'y ai passé du temps mais je n'ai pas le niveau.
Vous dites ne pas comprendre (désolée du manque de clarté) mais en fait vous êtes en plein dedans.
Le texte a plus de 50 liens inactifs dans la longue page (du texte brut venant d'un autre programme que Word), et il y aura d'autres pages dans le futur à modifier pareillement.
Donc j'ai besoin d'une macro pour automatiser.
J'ai mis 3 bouts de macro pour montrer ma démarche pas à pas mais bien sûr il n'y a qu'une macro à faire.
Le 1er bout montre comment cherche l'occurrence http(etc), mot entier suivi d'un espace puis ']'
Le 2ème bout c'est la boucle et là je ne sais que faire, trouver la première occurrence, activer lien, passer à la seconde, etc.
Le 3ème bout est l'activation du lien qui vient à la place de la 'teinture' en vert du texte.

Est-ce que c'est limpide maintenant?

Encore une fois merci, vous me sauvez!

A+, Steph
0
m@rina Messages postés 21182 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 16 décembre 2024 11 368
12 janv. 2018 à 22:58
j'ai donc donné la macro qui fait le travail.
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
16 janv. 2018 à 16:40
Ah m@arina, j'avais pas percuté.
Et j'avais tant compliqué le processus!!!

Eh bien çà marche, merci beaucoup!!!
Il y a juste un micro détail (je peux le contourner, mais cela doit être facile à régler, j'ai un peu regardé mais je n'ai pas trouvé).
Le texte comprend d'abord une section en 2 colonnes sans lien avec du texte plus gros et une image à gauche.
Puis vient le texte avec les liens à activer dans une 2ème section.
Lorsque j'exécute la macro, les liens sont bien activés mais en plus:
- les textes de la 1ère section (titres) sont changés en Cambria au lieu de Colibri avec une police plus grande resp 14 ou 26 pour d'autres.
- les textes avec les liens commencent toujours par "*" et après la macro j'ai une liste à puces!
Une idée?

Encore merci je suis tirée d'affaires... c'est bon de voir qu'il y a des expertes féminines (sans allusion à la polémique actuelle!)

A plus, Steph
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
26 janv. 2018 à 15:22
Bon, comme il n'y a pas de réaction et que le sujet est à 99% résolu, je marque résolu.

Encore une fois merci M@rina

Steph
0
m@rina Messages postés 21182 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 16 décembre 2024 11 368
28 janv. 2018 à 15:46
Bonjour,

Désolée de n'être pas intervenue plus tôt.
Comme je l'ai dit dans mon précédent post, on peut compléter le code si nécessaire en fonction des corrections automatiques souhaitées ou non.

Donc, tu pourrais modifier le code ainsi :

Sub liens()
With Options
.AutoFormatReplaceHyperlinks = True
.AutoFormatAsYouTypeApplyHeadings = False
.AutoFormatAsYouTypeApplyBulletedLists = False
.AutoFormatAsYouTypeApplyNumberedLists = False
End With
With ActiveDocument
.Kind = wdDocumentNotSpecified
.Range.AutoFormat
End With
End Sub


A noter néanmoins que le changement de police automatique vient du fait que le document n'est pas nickel du point de vue Style.

m@rina
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
2 févr. 2018 à 14:59
Merci beaucoup, M@rina!

C'est totalement parfait maintenant.

Bises, Steph
0