Ou comment Gemini a tué hyperAVH en quelques secondes...
Allez dans Outils > Macros > Editer les macros
Dans le sélecteur de gauche, aller dans :
Mes macros et boîtes de dialogue > Standard > Module 1
Vous avez un code minimaliste "Sub Main..."
Effacez tout et coller le code ci-dessous, puis sauvegardez (Ctrl-S).
Vous pouvez ensuite Exécuter cette macro "Hyperliens" qui, sur tous les tests que j'ai faits, a parfaitement fonctionné.
Mais attention, vous devez appliquer un style de "Titre" (Titre 1, Titre 2, etc.) à vos numéros de paragraphes au prélable.
Alors, hyperAVH n'est pas tout à fait mort, puisqu'il fait la permutation aléatoire des paragraphes avec la possibilité de conserver certains au même numéro. Gemini s'est (pour l'instant) complétement planté, le langage Basic utilisé étant particulièrement limité.
Allez dans Outils > Macros > Editer les macros
Dans le sélecteur de gauche, aller dans :
Mes macros et boîtes de dialogue > Standard > Module 1
Vous avez un code minimaliste "Sub Main..."
Effacez tout et coller le code ci-dessous, puis sauvegardez (Ctrl-S).
Vous pouvez ensuite Exécuter cette macro "Hyperliens" qui, sur tous les tests que j'ai faits, a parfaitement fonctionné.
Mais attention, vous devez appliquer un style de "Titre" (Titre 1, Titre 2, etc.) à vos numéros de paragraphes au prélable.
Alors, hyperAVH n'est pas tout à fait mort, puisqu'il fait la permutation aléatoire des paragraphes avec la possibilité de conserver certains au même numéro. Gemini s'est (pour l'instant) complétement planté, le langage Basic utilisé étant particulièrement limité.
Code :
Sub Hyperliens
Dim oDoc As Object
Dim oSearch As Object
Dim oFound As Object
Dim sNum As String
Dim oParaEnumeration As Object
Dim oPara As Object
oDoc = ThisComponent
' Ask expression
expression = InputBox("Expression recherchée avant le nombre ?","Hyperliens", "au ")
If expression = "" Then
Exit Sub
End If
' Create targets
oParaEnumeration = oDoc.Text.createEnumeration()
While oParaEnumeration.hasMoreElements()
oPara = oParaEnumeration.nextElement()
If oPara.supportsService("com.sun.star.text.Paragraph") Then
If Left(oPara.ParaStyleName, 7) = "Heading" Or Left(oPara.ParaStyleName, 5) = "Titre" Then
Dim sText As String : sText = LTrim(oPara.String)
Dim sID As String : sID = ""
Dim i As Integer
For i = 1 To Len(sText)
If IsNumeric(Mid(sText, i, 1)) Then : sID = sID & Mid(sText, i, 1) : Else : Exit For : End If
Next i
If sID <> "" Then
Dim oCursor As Object
oCursor = oDoc.Text.createTextCursorByRange(oPara.Start)
Dim oBookmark As Object
oBookmark = oDoc.createInstance("com.sun.star.text.Bookmark")
oBookmark.Name = "_" & sID
oDoc.Text.insertTextContent(oCursor, oBookmark, True)
End If
End If
End If
Wend
' Search and add links
oSearch = oDoc.createSearchDescriptor()
oSearch.SearchString = expression + "[:digit:]+"
oSearch.SearchRegularExpression = True
oFound = oDoc.findFirst(oSearch)
While Not IsNull(oFound)
' isolate number
sNum = Mid(oFound.String, 4)
' apply link on all expression
oFound.HyperLinkURL = "#_" & sNum
' create cursor to remove non digit chars
Dim oFixCursor As Object
oFixCursor = oDoc.Text.createTextCursorByRange(oFound.Start)
' select only the 3 first chars and remove link
oFixCursor.goRight(3, True)
oFixCursor.HyperLinkURL = ""
' search next
oFound = oDoc.findNext(oFound.End, oSearch)
Wend
MsgBox "Hyperliens ajoutés."
End Sub