Appliquer une macro à toute une page

Bonjour !

J’essaie de créer une macro dans Writer qui s’applique à toutes les pages quand j’active la commande. Il s’agit de transformer du texte blanc en vert et puis du texte vert en blanc (en 2 macros différentes). Pour le moment, quand j’active ma macro, elle ne fonctionne que si j’ai sélectionné le texte à mettre en couleur au préalable. Et si je sélectionne tout le document, elle met soit tout en blanc ou tout en vert.

Existe-t-il un code grâce auquel je pourrais la faire appliquer

  1. uniquement au texte mis en forme en vert
  2. sans devoir sélectionner chaque passage

C’est possible de le faire dans Word donc j’ai bon espoir que ça le soit aussi dans Writer. Merci d’avance pour votre aide :pray:

Bonjour,
Il serait intéressant de connaître le but du changement de couleurs. Si c’est pour cacher du texte, des solutions moins lourdes qu’une macro pourraient convenir.
Luc.

Merci beaucoup à tous pour vos propositions ! J’ai finalement réussi à résoudre mon problème. Le souci venant, en effet, que je créais un style de paragraphe et non un style de caractère à modifier, donc ça ne fonctionnait pas. Mon problème est donc résolu merci !

Bonjour,
Le mieux dans ce cas, c’est de créer deux styles de caractères (Vert, Blanc) puis demander à la macro de remplacer un style par l’autre.

Merci pour votre réponse ! :slight_smile: Avez-vous une idée de comment je réalise ça dans les faits lorsque j’enregistre la macro? Je passe simplement d’un style à l’autre en le sélectionnant?

EDIT: j’ai testé ça sans succès…

Bonjour,

Pour plusieurs raisons, je n’utilise pas les macros lorsque les fonctions de base du logiciel le permettent autrement. Je pense qu’avec un simple style de caractère on peut s’en sortir, mais je ne connais pas la façon dont fichier a été saisi, ni si tu peux agir à ce niveau. Si cette possibilité ne correspond pas à ton attente, je vais te proposer autre chose.

A partir du moment ou la sélection peut se faire par la fonction “rechercher - remplacer”, il doit être possible de l’intégrer dans une macro.

Je connais 2 méthodes pour sélectionner le texte :

  1. La sélection par similarité à l’endroit du curseur :
    1. Positionner le curseur dans une zone de texte de la même couleur,
    2. Ouvrir “rechercher - remplacer” (ou Ctrl+H),
    3. Cliquer sur le bouton “attribut” et choisir “couleur de police
    4. Cliquer sur “rechercher tout” pour sélectionner tout le texte similaire
  2. La sélection par le format :
    1. Ouvrir “rechercher - remplacer” (ou Ctrl+H),
    2. Cliquer sur le bouton “format” et choisir la bonne couleur de police sur l’onglet “effet de caractère
    3. Cliquer sur “rechercher tout” pour sélectionner tout le texte correspondant au format.

A partir de là, le texte voulu est sélectionné, on ferme la boite et on en fait ce que l’on veut :wink:

A partir de l’enregistreur de macro (sans garantie), les solutions pour une couleur rouge foncé donnent les codes suivants :

sub Selection1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(21) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.SearchFiltered"
args1(4).Value = false
args1(5).Name = "SearchItem.Backward"
args1(5).Value = false
args1(6).Name = "SearchItem.Pattern"
args1(6).Value = false
args1(7).Name = "SearchItem.Content"
args1(7).Value = false
args1(8).Name = "SearchItem.AsianOptions"
args1(8).Value = false
args1(9).Name = "SearchItem.AlgorithmType"
args1(9).Value = 0
args1(10).Name = "SearchItem.SearchFlags"
args1(10).Value = 65536
args1(11).Name = "SearchItem.SearchString"
args1(11).Value = ""
args1(12).Name = "SearchItem.ReplaceString"
args1(12).Value = ""
args1(13).Name = "SearchItem.Locale"
args1(13).Value = 255
args1(14).Name = "SearchItem.ChangedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.DeletedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.InsertedChars"
args1(16).Value = 2
args1(17).Name = "SearchItem.TransliterateFlags"
args1(17).Value = 1280
args1(18).Name = "SearchItem.Command"
args1(18).Value = 1
args1(19).Name = "SearchItem.SearchFormatted"
args1(19).Value = false
args1(20).Name = "SearchItem.AlgorithmType2"
args1(20).Value = 1
args1(21).Name = "Quiet"
args1(21).Value = true

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())


end sub

et

sub Selection2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(21) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.SearchFiltered"
args1(4).Value = false
args1(5).Name = "SearchItem.Backward"
args1(5).Value = false
args1(6).Name = "SearchItem.Pattern"
args1(6).Value = false
args1(7).Name = "SearchItem.Content"
args1(7).Value = false
args1(8).Name = "SearchItem.AsianOptions"
args1(8).Value = false
args1(9).Name = "SearchItem.AlgorithmType"
args1(9).Value = 0
args1(10).Name = "SearchItem.SearchFlags"
args1(10).Value = 65536
args1(11).Name = "SearchItem.SearchString"
args1(11).Value = ""
args1(12).Name = "SearchItem.ReplaceString"
args1(12).Value = ""
args1(13).Name = "SearchItem.Locale"
args1(13).Value = 255
args1(14).Name = "SearchItem.ChangedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.DeletedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.InsertedChars"
args1(16).Value = 2
args1(17).Name = "SearchItem.TransliterateFlags"
args1(17).Value = 1280
args1(18).Name = "SearchItem.Command"
args1(18).Value = 1
args1(19).Name = "SearchItem.SearchFormatted"
args1(19).Value = false
args1(20).Name = "SearchItem.AlgorithmType2"
args1(20).Value = 1
args1(21).Name = "Quiet"
args1(21).Value = true

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())


end sub

Bonjour,
Comme je ne sais pas bien ce qu’il faut faire, à l’arrache, j’ai fait deux macros qui agissent sur un style de caractères “CouleurTexte”, créé au préalable, et affecté à toutes les zones où il doit être appliqué.
‘’’
Les macros sont dans le document joint, branchées sur deux boutons qui permettent de basculer la couleur.

Sub ChangeCouleurStyleBlanc
	oDocument = ThisComponent ' le document
	oTexte = oDocument.Text ' le contenu du document
	oFamilles = oDocument.StyleFamilies ' l'ensemble des styles
	oLaFamille = oFamilles.Getbyname("CharacterStyles") ' les styles de caractères
	oStyle = oLaFamille.GetbyName("CouleurTexte") ' le style à modifier (doit exister, sinon erreur)
	oStyle.Charcolor = RGB (255,255,255) ' Blanc
End Sub
Sub ChangeCouleurStyleVert
	oDocument = ThisComponent
	oTexte = oDocument.Text
	oFamilles = oDocument.StyleFamilies
	oLaFamille = oFamilles.Getbyname("CharacterStyles")
	oStyle = oLaFamille.GetbyName("CouleurTexte")
	oStyle.Charcolor = RGB (0,200,0) ' Vert 
End Sub

ChangeCouleurStyle.odt (18.1 KB)

Bon après-midi
Jean-Michel
PS : LucN31, je n’aime pas trop les macros enregistrées à coup de dispatcher, ça fabrique souvent des monstres illisibles…

1 Like