Ceci n'est pas vraiment une question, mais un contournement pour ceux qui ont besoin de plusieurs index lexicaux dans leurs documents, que vos lumières permettront peut-être d'améliorer, pour le plus grand bien de la communauté...
Je travaille sur un projet de plusieurs milliers de pages, à terme plusieurs volumes de 5-600 pages chacun. J'ai besoin pour chacun d'un index des patronymes et d'un index des toponymes. Comme LibreOffice ne sait gérer qu'un seul index lexical, j'ai opté pour une solution donnée quelque part sur ce forum : utiliser des clés pour différencier les deux types d'entrées.
J'ai ensuite inséré l'index en laissant la possibilité de le modifier manuellement. J'ai donc une clef "Table des patronymes", et une clef "Table des toponymes". Quand je met à jour mon index, ça me donne un truc style :
Je supprime les lignes des clefs et celles des toponymes, et nickel, ça me donne ce que je veux. Je fais de même pour la table des toponymes, qui sont sur des pages séparées.Table des patronymes
Dupont 1
Duval 5
Martin 3
Table des toponymes
Brest 1
Nantes 2
Perpignan 9
Toulon 8
Sauf que chacun de mes index fait plusieurs pages, que je vais avoir plusieurs volumes à gérer, et donc faire cette manip à chaque mise à jour devient vite ch pénible. J'ai donc fait une petite macro qui s'occupe de ça. Une entrée d'index zzzzz me permet de détecter la fin de l'index (cette entrée zzzzz est effacée de la table par le script).Dupont 1
Duval 5
Martin 3
Code : Tout sélectionner
Sub Main
dim oDoc as object
dim oSearchZone as object
dim oTrouveZone as object
dim oTrouveApresZone as object
dim oCurseurVisible as object
call MiseAJourIndex
oDoc = thiscomponent
oSearchZone = oDoc.createSearchDescriptor()
oSearchZone.SearchCaseSensitive = true
oSearchZone.SearchRegularExpression = true
oSearchZone.SearchString = "Table des patronymes\t+$"
oTrouveZone = oDoc.findFirst(oSearchZone)
if isnull(oTrouveZone) then
msgbox "Table Patronymes NON mise à jour", 64, "Maumau macro"
exit sub
end if
oTrouveZone.gotoEndOfParagraph(true)
oTrouveZone.goRight(1,true)
oTrouveZone.string = ""
oSearchZone.SearchString = "Table des toponymes\t+$"
oTrouveZone = oDoc.findNext(oTrouveZone.End, oSearchZone)
if isnull(oTrouveZone) then
msgbox "Table Patronymes MAL mise à jour 1", 64, "Maumau macro"
exit Sub
endif
oSearchZone.SearchString = "zzzzz\t[0-9]+$"
oTrouveZoneFin = oDoc.findNext(oTrouveZone.End, oSearchZone)
if isnull(oTrouveZoneFin) then
msgbox "Table Patronymes MAL mise à jour 2", 64, "Maumau macro"
exit Sub
end if
oCurseurAEffacer = oDoc.currentcontroller.viewCursor
oCurseurAEffacer.gotoRange(oTrouveZone.Start, false)
oCurseurAEffacer.gotoRange(oTrouveZoneFin.End, True)
oCurseurAEffacer.goRight(1,true)
oCurseurAEffacer.string = ""
rem Maintenant la table des toponymes
oSearchZone.SearchString = "Table des patronymes\t+$"
oTrouveZone = oDoc.findFirst(oSearchZone)
if isnull(oTrouveZone) then
msgbox "Table Toponymes NON mise à jour", 64, "Maumau macro"
exit sub
end if
oSearchZone.SearchString = "Table des toponymes\t+$"
oTrouveZoneFin = oDoc.findNext(oTrouveZone.End, oSearchZone)
if isnull(oTrouveZoneFin) then
msgbox "Table Toponymes MAL mise à jour 1", 64, "Maumau macro"
exit Sub
endif
oCurseurAEffacer.gotoRange(oTrouveZone.Start, false)
oCurseurAEffacer.gotoRange(oTrouveZoneFin.End, True)
oCurseurAEffacer.goRight(1,true)
oCurseurAEffacer.string = ""
oSearchZone.SearchString = "zzzzz\t[0-9]+$"
oTrouveZoneFin = oDoc.findNext(oTrouveZoneFin.End, oSearchZone)
if isnull(oTrouveZoneFin) then
msgbox "Table Toponymes MAL mise à jour 2", 64, "Maumau macro"
exit Sub
end if
oTrouveZoneFin.gotoEndOfParagraph(true)
oTrouveZoneFin.goRight(1,true)
oTrouveZoneFin.string = ""
oTrouveZoneFin.goLeft(1,true)
oTrouveZoneFin.string = ""
msgBox "OK"
End Sub
Sub MiseAJourIndex
dim i as long
for i = 0 TO thisComponent.getDocumentIndexes().count - 1
thisComponent.getDocumentIndexes().getByIndex(I).update()
next i
End Sub