j'ai beau chercher depuis plusieurs semaines sur ce forum, le forum anglais et ailleurs, je n'ai pas réussi à résoudre mon problème.
Je résume: Je veux rédiger une macro me permettant d'appliquer un formatage de numérotation particulier à un paragraphe, en fonction du niveau.
Au niveau 1, je souhaite obtenir 1.
Au niveau 2, 1.1.
Au niveau 3, 1.1.1.
Au niveau 4, 1.1.1.1.
et ainsi de suite, 2.1, 2.2, 2.2.1
Je sais que la meilleure solution consiste à créer un modèle avec la bonne numérotation et d'appliquer le style au paragraphe désiré, mais je souhaite pouvoir partager mon fichier avec la bonne macro pour facilement obtenir la bonne numérotation, sans passer par les modèles.
Après moultes recherches, je pense que je ne suis pas loin du but, mais je n'obtiens pas le résultat voulu.
Les macros dans le document en pj que j'ai développées, permettent de créer un style de paragraphe ou un style numérique, d'appliquer un style numérique à un style de paragraphe, et la macro destinée à changer les paramètres du style numérique, semble faire le job, si j'en crois Xray, sauf que les éléments du style numérique n'apparaissent pas (suffix et prefix en particulier, mais également les niveaux précédents, j'obtiens toujours 1 seul chiffre en début de paragraphe). J'ai essayé de désactiver la numérotation puis de la réactiver, tout porte à croire que le format numérique est créé avec des paramètres par défaut, et que les modifications apportées, sont temporaires et non appliquées au style définitif. Ci-dessous la macro principale, les autres sont dans le fichier joint, et elles fonctionnent correctement.
C'est pourquoi je fais appel aux experts de ce forum, que je remercie par avance de toute piste qui pourrait me permettre d'avancer.
Code : Tout sélectionner
Sub CreateOrModifyNumberingStyle_Niveau1
Dim oDoc As Object
Dim oStyleFamilies As Object
Dim oNumStyles As Object
Dim oNumStyle As Object
Dim oNumberingRules As Object
Dim oNumRule As Object
Dim i As Integer
' Nom du style de numérotation à créer ou modifier
Dim styleName As String
styleNumName = "MonStyleNum"
styleParaName= "CE_Titre1"
' Obtenir le document actuel
oDoc = ThisComponent
' Obtenir la liste des familles de styles
oStyleFamilies = oDoc.getStyleFamilies()
' Obtenir les styles de numérotation
oNumStyles = oStyleFamilies.getByName("NumberingStyles")
' Vérifier si le style de numérotation existe
' s'il n'existe pas, le créer
If NOT oNumStyles.hasByName(styleNumName) Then
' Créer un nouveau style de numérotation
oNumStyle = oDoc.createInstance("com.sun.star.style.NumberingStyle")
oNumStyle.Name = styleName
' Ajouter le style au document
oNumStyles.insertByName(styleNumName, oNumStyle)
endif
' Récupérer le nouveau style de numérotation
oNumStyle=oNumStyles.getByName(styleNumName)
oNumberingRules = oNumStyle.NumberingRules
' Configurer les niveaux de numérotation
oNumRule = oNumberingRules.getByIndex(0)
' Initialisation des propriétés
oNumRule(0).Value = 1 ' Adjust
oNumRule(1).Value = 2 ' ParentNumbering
oNumRule(2).Value = "# " ' Prefix
oNumRule(3).Value = "@ " ' Suffix
oNumRule(4).Value = 1 ' ListFormat (ou format de liste)
oNumRule(5).Value = "Niveau1" ' CharStyleName
oNumRule(6).Value = 1 ' StartWith
oNumRule(7).Value = 1 ' PositionAndSpaceMode
oNumRule(8).Value = 0 ' LabelFollowedBy
oNumRule(9).Value = 2000 ' ListTabStopPosition
oNumRule(10).Value = -1500 ' FirstLineIndent
oNumRule(11).Value = 2500 ' IndentAt
oNumRule(12).Value = 4 ' NumberingType
' Mettre à jour la règle
oNumberingRules.replaceByIndex(0, oNumRule)
' Appliquer le style de numérotation aux styles de paragraphe concernés
Dim oParaStyles As Object
Dim oParaStyle As Object
' Obtenir les styles de paragraphe
oParaStyles = oStyleFamilies.getByName("ParagraphStyles")
' Vérifier si le style de paragraphe existe et le créer si ce n'est pas le cas
If Not oParaStyles.hasByName(styleParaName) Then
oParaStyle = oDoc.createInstance("com.sun.star.style.ParagraphStyle")
oParaStyle.Name = styleParaName
oParaStyles.insertByName(styleParaName, oParaStyle)
Else
oParaStyle = oParaStyles.getByName(styleParaName)
End If
' Définir les propriétés du style de paragraphe
oParaStyle.NumberingStyleName = styleName
oParaStyle.NumberingLevel = 1 ' Ajoutez cette ligne pour définir le niveau de numérotation
' Appliquer le style de paragraphe au paragraphe courant (niveau 1)
Dim oText As Object
Dim oCursor As Object
Dim oTextRange As Object
oText = oDoc.Text
oTextRange = oDoc.CurrentController.Selection.getByIndex(0)
oCursor = oText.createTextCursorByRange(oTextRange)
If Not IsEmpty(oCursor) Then
oCursor.ParaStyleName = styleParaName
End If
AppliquerStyleNumAStyleParagraphe (styleNumName, styleParaName) 'Fonctionne
AppliqueStylePara (styleParaName) 'Fonctionne
DisableNumberingForCurrentParagraph 'Fonctionne
EnableNumberingForCurrentParagraph (styleNumName, 1) 'Fonctionne
MsgBox "Le style de numérotation '" & styleNumName & "' a été créé ou modifié avec succès et appliqué aux styles de paragraphe concernés."
End Sub