[Résolu][Writer] Formatage d'une partie du texte

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 !
Bisbille
Fraîchement OOthentifié
Messages : 6
Inscription : 28 juin 2023 18:22

[Résolu][Writer] Formatage d'une partie du texte

Message par Bisbille »

Bonjour à tous.

Je cherche à convertir une macro fonctionnelle sous Word afin qu'elle donne le même résultat en code Writer.

J'ai tenté avec ChatGPT, mais il n'y arrive pas et je suis un débutant en macro Writer. La nomenclature m'est étrangère.

Le but :
1 = tous les paragraphes sans caractère gras et en police de 10 (chaque ligne est un paragraphe si la largeur de la feuille est suffisante).
2 = pour chaque paragraphe : ce qui est à gauche du "@", mettre en gras et police de 12.
3 = pour chaque paragraphe : ce qui est à droite de "$", mettre en gras et police de 12

Résultat attendu :
AICHE(E) # ÉCHAI @ n.f. Appât accroché à l'hameçon(Pêche). - v. Aicher. $ FR - HOU - L - M - P

Code : Tout sélectionner

Rem Attribute VBA_ModuleType=VBADocumentModule
Option VBASupport 1
Option Explicit

Private Sub BoutonTraitement_Click()
    Call SelectionnerXCaracteresDepuisDebutLigneEtMettreEnGras
End Sub

Sub SelectionnerXCaracteresDepuisDebutLigneEtMettreEnGras()
    Dim doc As Document
    Dim ligne As Paragraph
    Dim nbCaracteres1 As Integer
    Dim nbCaracteres2 As Integer
    Dim selectionRange As Range
    Dim caractereRecherche1 As String
    Dim caractereRecherche2 As String
    Dim Longueur As Long
    
    
    ' Spécifiez le caractère que vous souhaitez rechercher
    caractereRecherche1 = "@"
    caractereRecherche2 = "$"

    ' Spécifiez le document actif
    Set doc = ActiveDocument
    
    ' Parcours de chaque ligne du document
    For Each ligne In doc.Paragraphs
        ' Recherche du caractère dans la ligne
        nbCaracteres1 = InStr(ligne.Range.Text, caractereRecherche1)
        nbCaracteres2 = InStr(ligne.Range.Text, caractereRecherche2)
    
        ' L'on commence par une Police de 10 sur toute la ligne
        ligne.Range.Font.Size = 10
    
        ' Si le nombre de caractères est suppérieur à 1, alors
        If nbCaracteres1 > 0 Then
            ' Sélection des caractères depuis le début de la ligne
            Set selectionRange = doc.Range(Start:=ligne.Range.Start, End:=ligne.Range.Start + nbCaracteres1 - 1)

            ' Mise en gras de la sélection
            selectionRange.Bold = True
            selectionRange.Font.Size = 12
        End If
    
        ' Obtention du nombre de caractères dans la ligne
        Longueur = Len(ligne.Range.Text) - 1
    
        If nbCaracteres2 > 0 And nbCaracteres2 < Longueur Then
            ' Sélection des caractères depuis $ jusqu'à la fin
            Set selectionRange = doc.Range(Start:=ligne.Range.Start + nbCaracteres2 + 1, End:=ligne.Range.Start + Longueur)
        
            ' Mise en gras de la sélection
            selectionRange.Bold = True
        End If
    Next ligne
End Sub
Merci de prendre soin de moi. 8- ))
Je ne veux surtout pas créer de bisbille 8- )))

Bisbille
Dernière modification par micmac le 29 juin 2023 14:58, modifié 11 fois.
Raison : Remise en forme de la balise [Writer] dont vous avez enlévé les crochets.
LibreOffice 7.5.4.2 Fr sous Windows 11 pro 22H2
Merci le monde de l'aide apportee.
Avatar de l’utilisateur
OOo - Ekel
SuppOOrter
SuppOOrter
Messages : 1295
Inscription : 10 nov. 2006 15:04
Localisation : F-Oise

Re: [Writer] Convertir une macro Word en macro Writer

Message par OOo - Ekel »

Bonjour,

Qu'est-elle censée produire cette macro ?

Cordialement.
Ekel

KUbuntu Noble Numbat (24.04) : LibreOffice 24.8.0.3 Officielle
AMD Ryzen 5 5600G
AMD Radeon RX 6650 XT
22" + 22"
16 Go
____________________
Pour les règles du jeu.
Pour marquer Résolu.
Pour joindre un fichier.
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 4117
Inscription : 06 oct. 2008 08:03

Re: [Writer] Convertir une macro Word en macro Writer

Message par Oukcha »

Bonjour et bienvenue sur notre forum,
Votre signature a écrit : LibreOffice 7.5.4.2 Fr
La réponse que vous attendez pour votre question dépend d'une information essentielle : la version d'OpenOffice et le système sur lequel il tourne. Pour votre système, vous devez préciser également la version et/ou la distribution (quelques exemples : AOO 4.1.4 sous Windows 7 SP2, AOO 4.1.5 sous MacOS X 10.13.2, LibO 5.3.7 sous Linux Ubuntu 16.04.3 ou AOO 4.1.3 sous Linux OpenSuse Leap 42.3 etc).

Nous vous remercions d'ajouter ces renseignements dans votre profil. Lisez le lien mentionné ci-dessous pour savoir comment procéder :
ftopic18.html

Concernant votre titre, merci de le corriger en supprimant les termes implicites ("macro" en section éponyme, ou "writer" qui est redondant avec la balise). Le plus efficace est de décrire l'action de votre code dans le titre.

Très cordialement, l'équipe de modération.
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
Bisbille
Fraîchement OOthentifié
Messages : 6
Inscription : 28 juin 2023 18:22

Re: [Writer] Conversion d'une partie du texte

Message par Bisbille »

Bonjour OOo - Ekel,

J'ai ajouté l'info dans ma demande.
Merci de t'y intéresser.

Boujour Oukcha,
Merci de m'aider à me standardiser.


Bisbille
LibreOffice 7.5.4.2 Fr sous Windows 11 pro 22H2
Merci le monde de l'aide apportee.
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Writer] Conversion d'une partie du texte

Message par Jurassic Pork »

Hello,
pour réaliser ce que tu veux faire on peut utiliser un "ReplaceDescriptor" en utilisant les expressions régulières.

Code : Tout sélectionner

Sub RemplacerAttrib()
Dim oDescr As Object
Dim attr(2) as new com.sun.star.beans.PropertyValue
    attr(0).Name = "CharWeight"
    attr(0).Value = com.sun.star.awt.FontWeight.BOLD
    attr(1).Name = "CharColor"
# rouge
    attr(1).Value = RGB(255,0,0) 
    attr(2).Name = "CharHeight"
    attr(2).Value = 12
	oDescr = ThisComponent.createReplaceDescriptor()
	with oDescr
	    # on capture (parenthèses) du début de paragraphe (^) jusqu'à @
		.SearchString= "^(.*)(?=@)"
		.SearchRegularExpression=true
		# $1 représente le groupe capturé
		.ReplaceString="$1"
	end with
	oDescr.SetReplaceAttributes(attr)
	ThisComponent.replaceAll(oDescr)
	# on capture les caractères entre $ et la fin de paragraphe ($) 
    oDescr.SearchString = "(?<=\$)(.*)$"
   ThisComponent.replaceAll(oDescr)
End Sub
A noter que dans les expressions régulières j'utilise des lookarounds (?=@) et (?<=\$) pour exclure le @ et le $ des traitements (essayer d'enlever ces parties : remplacer (?=@) par @ et (?<=\$) par \$ pour voir ce que cela fait).
J'ai aussi ajouté un changement de couleur dans les attributs pour que cela soit plus "visuel".
RemplacerAttrib.gif
Testé sous LibreOffice 7.4.6.2 Windows 11

Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
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] Conversion d'une partie du texte

Message par Dude »

Salut,

Plutôt qu'une macro, commence par employer des styles.
C'est ce qui fait la puissance de Writer pour ce genre d'opération.
Moult tutos sur ces notions : viewforum.php?f=29
Bisbille
Fraîchement OOthentifié
Messages : 6
Inscription : 28 juin 2023 18:22

Re: [Writer] Conversion d'une partie du texte

Message par Bisbille »

Bonjour Jurassic Pork, le fil, le forum,

@ Jurassic Pork
Il manquerait au début :
- Tout le texte sans gras.
- Tout le texte en police de 10.
- Tout le texte en noir (sans couleur).

Pour le reste, je crois être en mesure d'utiliser ton code qui semble faire le traitement désiré.

Merci pour ton aide, c'est grandement apprécié.

Bisbille
Dernière modification par Bisbille le 29 juin 2023 10:40, modifié 1 fois.
LibreOffice 7.5.4.2 Fr sous Windows 11 pro 22H2
Merci le monde de l'aide apportee.
Bisbille
Fraîchement OOthentifié
Messages : 6
Inscription : 28 juin 2023 18:22

Re: [Writer] Conversion d'une partie du texte

Message par Bisbille »

Bonjour Dude, le fil, le forum,

@Dude
C'est nouveau pour moi, je vais voir cette alternative.
Il y a plusieurs documents à traiter.
Ce peut être une bonne avenue.

Merci de la proposition.

Bisbille
La modération vous a écrit: Merci de ne pas poster plusieurs messages à la suite. Vous disposez d'un bouton MODIFIER (bouton avec le crayon) en haut à droite de chaque message et d'un autre bouton ajout si vous désirez ajouter un complément lorsqu'il n'y a pas de réponse ou que vous désirez répondre à plusieurs personnes.

LibreOffice 7.5.4.2 Fr sous Windows 11 pro 22H2
Merci le monde de l'aide apportee.
Bisbille
Fraîchement OOthentifié
Messages : 6
Inscription : 28 juin 2023 18:22

Re: [Writer] Conversion du formatage d'une partie du texte

Message par Bisbille »

Bonjour Jurassic Pork, le fil, le forum,

J'ai réussi à créer un code pour appliquer à tout le texte avant le traitement à proprement dit : police de 10 points, pas de gras et pas de couleur.

Par contre durant le traitement, il y semble y avoir une coquille sur ce code ...

Code : Tout sélectionner

    attr(0).Name = "CharWeight"
    attr(0).Value = com.sun.star.awt.FontWeight.BOLD
    attr(1).Name = "CharColor"
# rouge
    attr(1).Value = RGB(0,0,0) 
    attr(2).Name = "CharHeight"
    attr(2).Value = 12
Que j'ai reformulé ainsi en déplaçant : attr(2).Name = "CharHeight" avant ' # rouge

Code : Tout sélectionner

    attr(0).Name = "CharWeight"
    attr(0).Value = com.sun.star.awt.FontWeight.BOLD
    attr(1).Name = "CharColor"
    attr(2).Name = "CharHeight"   ''' < ici
 # rouge
    attr(1).Value = RGB(0,0,0) 
    attr(2).Value = 12
Merci pour tout :bravo:

Passer un bel été tout le monde :super:

Bisbille
Dernière modification par Bisbille le 29 juin 2023 14:53, modifié 1 fois.
LibreOffice 7.5.4.2 Fr sous Windows 11 pro 22H2
Merci le monde de l'aide apportee.
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9580
Inscription : 28 août 2010 08:45

Re: [Writer] Conversion du formatage d'une partie du texte

Message par micmac »

Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur macOS
Bisbille
Fraîchement OOthentifié
Messages : 6
Inscription : 28 juin 2023 18:22

Re: [Résolu] Writer -- Conversion du formatage d'une partie du texte

Message par Bisbille »

Bonjour micmac, le fil, le forum,

@ micmac
Je crois que c'est fait correctement.

Merci de prendre soin de nous. :super:

Bisbille
LibreOffice 7.5.4.2 Fr sous Windows 11 pro 22H2
Merci le monde de l'aide apportee.
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9580
Inscription : 28 août 2010 08:45

Re: [Résolu][Writer] Formatage d'une partie du texte

Message par micmac »

Oui et non. J'ai remis les crochets autour de Writer qui doit rester une balise [Writer]

Cordialement
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur macOS