[Résolu][Writer] remplacement de styles dans des tableaux

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: 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 !
monkeymoon
Fraîchement OOthentifié
Messages : 4
Inscription : 06 oct. 2024 13:33

[Résolu][Writer] remplacement de styles dans des tableaux

Message par monkeymoon »

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

Code : Tout sélectionner

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
W11 - LibreOffice 24
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12457
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: remplacement de styles dans des tableaux

Message par Bidouille »

Bonjour,

Merci de lire le descriptif en page d'accueil :
Image

Fil déplacé et balisé suivant les indications du bandeau rouge en haut de la page.

Comme toujours...
Image
Comment joindre un fichier au format ODT
Pensez également à dépersonnaliser le fichier joint.
monkeymoon
Fraîchement OOthentifié
Messages : 4
Inscription : 06 oct. 2024 13:33

Re: [Writer] remplacement de styles dans des tableaux

Message par monkeymoon »

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.
W11 - LibreOffice 24
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Writer] remplacement de styles dans des tableaux

Message par Dude »

Salut,

Mouais, si déjà tu pouvais simplifier ton document.
Il y a des barres d'outils partout et une palanquée de styles en tout genre.

Et nous donner un mode pas-à-pas détaillé de ce qu'il faut faire avec.
Bref, se mettre à notre place car là, j'ai personnellement du mal à comprendre.
touvenant
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 23 déc. 2012 18:42

Re: [Writer] remplacement de styles dans des tableaux

Message par touvenant »

Code : Tout sélectionner

                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
monkeymoon
Fraîchement OOthentifié
Messages : 4
Inscription : 06 oct. 2024 13:33

Re: [Writer] remplacement de styles dans des tableaux

Message par monkeymoon »

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.
W11 - LibreOffice 24
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Writer] remplacement de styles dans des tableaux

Message par Dude »

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.
monkeymoon
Fraîchement OOthentifié
Messages : 4
Inscription : 06 oct. 2024 13:33

Re: [Writer] remplacement de styles dans des tableaux

Message par monkeymoon »

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...
W11 - LibreOffice 24
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12457
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Writer] remplacement de styles dans des tableaux

Message par Bidouille »

monkeymoon a écrit : 14 nov. 2024 06:01 il s'agit de l'extension "AltSearch"
Oui, cette extension fait partie de nos recommandations : viewtopic.php?t=29800
monkeymoon a écrit : 14 nov. 2024 06:01l'extension fonctionne même dans des tableaux...
Si cela solutionne votre problème, merci de clôturer votre fil comme indiqué :
  • Placez-vous sur le premier message de votre fil de discussion
  • En haut à droite de ce message, cliquez sur le bouton du petit crayon pour modifier.
  • Modifiez le titre du message en cochant l'icône Image et en tapant [Résolu] (respectez la mise en forme donnée) comme illustré ci-dessous :

    Image