Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Bonjour,
j'essaie d'écrire une macro qui me permettrait de remplacer des styles de paragraphes
Les paragraphes en question qui peuvent comporter plusieurs styles se situent dans des tableaux très variables notamment au niveau du nombre de colonnes/lignes
Je souhaiterais effectuer le remplacement pour plusieurs styles de paragraphe en une seule fois
J'ai essayé plusieurs bouts de code sans succès
Le remplacement se fait uniquement sur les premières cellules des lignes
Sub RemplacerStylesDansTableaux()
Dim oDoc As Object
Dim oTables As Object
Dim oTable As Object
Dim oCell As Object
Dim oCursor As Object
Dim sStylesToReplace As Variant
Dim sReplacementStyles As Variant
Dim i As Integer
' Définir les styles à remplacer et leurs remplacements
sStylesToReplace = Array("0203-Tim.V.N.12", "0201-Tim.N.N.12") ' Styles à remplacer
sReplacementStyles = Array("0203.PAT-Tim.V.N.12", "0201.PAT-Tim.N.N.12") ' Styles de remplacement
' Accéder au document actif
oDoc = ThisComponent
oTables = oDoc.getTextTables()
' Parcourir toutes les tables du document
For i = 0 To oTables.getCount() - 1
oTable = oTables.getByIndex(i)
' Parcourir toutes les cellules de la table
For j = 0 To oTable.getRows().getCount() - 1
For k = 0 To oTable.getColumns().getCount() - 1
oCell = oTable.getCellByPosition(k, j)
' Vérifier le style de paragraphe de la cellule
oCursor = oCell.getText().createTextCursor()
Dim sCurrentStyle As String
sCurrentStyle = oCursor.ParaStyleName
' Vérifier si le style actuel est dans la liste des styles à remplacer
Dim nIndex As Integer
nIndex = -1
For n = LBound(sStylesToReplace) To UBound(sStylesToReplace)
If sCurrentStyle = sStylesToReplace(n) Then
nIndex = n
Exit For
End If
Next n
' Si un style correspondant est trouvé, remplacer par le nouveau style
If nIndex <> -1 Then
oCursor.ParaStyleName = sReplacementStyles(nIndex)
End If
Next k
Next j
Next i
MsgBox "Remplacement des styles terminé."
End Sub
Dernière modification par Oukcha le 15 nov. 2024 20:51, modifié 2 fois.
Raison :Correction casse balise résolu -> Résolu
Merci pour le retour,
j'ai joint un tableau test (normalement avec les styles et la macro...)
j'espère qu'il fonctionne ! ?
Comme je l'ai dit plus haut,
j'aimerais remplacer des styles de paragraphes en masses dans mes fichiers qui sont constitués de tableaux
Dans l'exemple fourni la macro ne traite que les premières cellules des lignes
et encore pas complètement car si il y un autre style en début de cellule elle ne lit le style à changer en dessous...
Les bouts de code que j'ai récupérer ne fonctionne pas. La macro n'inspecte pas correctement le contenu des cellules...
Je préfère préciser que j'ai des connaissances très limitée en programmation...
Merci pour les retours
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dim sCurrentStyle As String
' Peut-être qu'ici il faut vérifier si oCursor est bien un paragraphe ? :
' If oCursor.supportsService("com.sun.star.text.Paragraph")
' sinon la ligne suivante risque de lever une erreur ?
sCurrentStyle = oCursor.ParaStyleName
' Vérifier si le style actuel est dans la liste des styles à remplacer
Dim nIndex As Integer
nIndex = -1
For n = LBound(sStylesToReplace) To UBound(sStylesToReplace)
If sCurrentStyle = sStylesToReplace(n) Then
oCursor.ParaStyleName = sReplacementStyles(nIndex)
' Exit For en sortant de la boucle, les autres styles correspondant ne seront pas cherchés...
End If
Next n
LibreOffice 24.8.1.2 x64
Windows10 Pro v10.0.19044
Salut,
j'ai simplifié le document, j'espère que tout fonctionne
j'ai laissé 3 macros
- une pour purger les styles inutilisés
- une pour remplacer les styles
- une pour annuler le remplacement
Les remplacements se font dans les premières cellules des lignes mais pas les suivantes
De plus, si il y a déjà un style dans la cellule au dessus du style à remplacer ça ne marche pas non plus
tableau_test.odt
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
monkeymoon a écrit : ↑09 oct. 2024 12:18
Les remplacements se font dans les premières cellules des lignes mais pas les suivantes
De plus, si il y a déjà un style dans la cellule au dessus du style à remplacer ça ne marche pas non plus
C'est à dire ? Tu ne nous as toujours pas...
Dude a écrit : ↑07 oct. 2024 06:35
donner un mode pas-à-pas détaillé de ce qu'il faut faire avec.
Finalement j'ai trouvé une extension qui semble faire ce que je demande moyennant une prise en main
Je suis encore en train de tester...
Pour ceux qui sont intéressés
il s'agit de l'extension "AltSearch" disponible sur le site officiel de LibreOffice
l'extension fonctionne même dans des tableaux...
à creuser donc...