Enregistrer une macro de recherche

Bonjour,

Je veux enregistrer une macro pour simplifier une recherche que je fais souvent: chercher les passages en rouge dans un texte long.
Donc je déclenche l’enregistrement macro, je fais une recherche avec “Rechercher & Remplacer” en précisant la couleur rouge dans l’option Format, je termine l’enregistrement, et je sauvegarde ma macro.
Ensuite j’exécute la macro, tout semble marcher.
Je referme le document, je le ré-ouvre, j’exécute la macro, et là ça ne marche plus, il ne se passe rien.
Alors j’édite la macro, je vois bien qu’elle est là et qu’elle contient du code pour une recherche, mais bizarrement aucune option ne semble parler de couleur.

Vous auriez une piste?
Merci. :wink:

Bonjour @Spolietan

L’enregistrement de macros a ses limites. Pour un cas comme celui-là je recommande de passer par l’api… Malheureusement, le programme est relativement complexe car il utilise la notion de “curseur visible” qui permet (en très gros) de manipuler ce qui se voit…

Ici on définit la recherche, on recherche, si on a trouvé on sélectionne via le “controller” (en gros la fenêtre active du document), puis on affiche la sélection via le curseur.

Exemple dans le document joint ChercheRouge.odt :

sub ChercheRouge()

dim oDoc as object, oCurseurVisible as object, oSD as object, oResult as object, oCC as object
dim Arg(0) as New com.sun.star.beans.PropertyValue

Arg(0).Name = "CharBackColor"
Arg(0).Value = rgb(255,0,0) ' ou code couleur 16711680 '

oDoc = thisComponent
oSD = oDoc.createSearchDescriptor
oSD.SearchAttributes = Arg()
oCC = oDoc.CurrentController

oResult = oDoc.findAll(oSD)

if oResult.count > 0  then
	oCC.select(oResult)
	oCurseurVisible = oCC.ViewCursor
	oCurseurVisible.gotoRange(oResult(0).Start, True) 
else
	msgbox "non trouvé", 64, "Recherche"
end if

end sub

Cordialement

Salut!

Ben ça répond parfaitement à mon problème. J’ai juste à modifier un ou deux trucs pour coller exactement à mon problème mais ça je sais faire.

Merci beaucoup :slight_smile: