Bonjour ;
Je rencontre un problème assez bizarre.
Je travaille sur un module permettant de gérer des modèles de courriers sous oOWriter…
J’utilise des champs prédéfinis … comme %Bloc Lettre% … et une fonction rechercher / remplacer … en remplaçant le champ prédéfini par le contenu du presse papier.
Je rencontre le problème suivant :
Si je place le champ prédéfini dans l’entête simplement cela fonctionne. Par contre si ce champ est positionné dans un tableau situé dans l’entête cela ne fonctionne plus !
Pour effectuer le rechercher remplacer j’utilise la fonction suivante :
Function RechercherRemplacerToutPressePapier(ByVal sMots As String, ByVal sRespecterCasse As Boolean, ByVal sMotEntier As Boolean) As Long
Dim oResultat As Object
Dim oDispatcherLocal As Object
Dim oIndex As Integer
Dim oControleur As Object
Dim Arguments(0) As Object
oSel = oDocument.CurrentController.Frame
Arguments(0) = MakePropertyValue("Hidden", False)
sMots = ConvertToAllowsString(sMots)
oDispatcherLocal = CreateUnoService("com.sun.star.frame.DispatchHelper")
oMonTexte = oDocument.getText()
oControleur = oDocument.CurrentController
oJeCherche = oDocument.createSearchDescriptor
'Definir la balise à rechercher dans le document OpenOffice Word
oJeCherche.SearchString = sMots
'Distinguer les majuscules des minuscules dans la recherche
oJeCherche.SearchCaseSensitive = sRespecterCasse
'Ne rechercher que des mots
oJeCherche.SearchWords = sMotEntier
'Rechercher à reculons
oJeCherche.SearchBackwards = False
'Faire une recherche avec la méthode des expressions régulières
oJeCherche.SearchRegularExpression = True
'Rechercher des paragraphes d’un style donné par SearchString
oJeCherche.SearchStyles = False
'Rechercher un texte similaire au texte cherché
oJeCherche.SearchSimilarity = False
oResultat = oDocument.findAll(oJeCherche)
For oIndex = 1 To oResultat.getCount()
' sélectionner la chaine de recherche
oMonCurseur = oMonTexte.createTextCursorByRange(oResultat.getByIndex(oIndex - 1))
' Remplacement par un texte
' oMonCurseur.setString("Chaine de remplacement")
'Remplacement par le contenu du presse papier
oControleur.select(oMonCurseur)
oDispatcherLocal.executeDispatch(oSel, ".uno:Paste", "", 0, Arguments)
Next
RechercherRemplacerToutPressePapier = oResultat.getCount()
End Function
Merci pour votre aide