Poser votre question
0

Enregistrer une macro de recherche

posée 2020-04-26 12:12:58 +0100

Image Gravatar de Spolietan

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. ;)

éditer requalifier signaler fermer fusionner supprimer

1Réponse

0

répondue 2020-04-26 14:59:13 +0100

Image Gravatar de pierre-yves samyn

updated 2020-04-26 15:00:07 +0100

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

éditer signaler supprimer permalien plus

Commentaires

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 :)

Image Gravatar de SpolietanSpolietan ( 2020-04-27 07:17:06 +0100 )éditer
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2020-04-26 12:12:58 +0100

Consultée: 42 fois

Mise à jour: Apr 26