Bonjour,

Afin d'analyser un LOG, je tente de filtrer par macro le contenu d'un fichier.

J'ai sur ma feuille1 mon LOG et sur ma feuille nommé ERROR la zone de critère qui contient en C1 *le texte que je veux filtrer*

Le filtre extrait mes données vers la seconde lignes de la feuille ERROR

Si je tente de faire une recherche avec des * devant et après le texte, mon filtre ne me retourne rien du tout

Auriez vous une idée sur ce qui manque est-ce que j'utilise bien l'expression régulière ?

Est ce que ce code peut fonctionner avec la OOo 3.2.0 ?

Sub monFiltreSpecial
   Dim mesCriteres as Object
   Dim maPlage as Object
   Dim optFiltre as Object
   Dim maFeuille as Object
   Dim maCellule as Object
   Dim oDocument   As Object
   Dim oFeuille As Object
   Dim  oSheet   As Object

   oDocument = ThisComponent
   oFeuille = oDocument.Sheets.getByName ("Feuille1")
   oDocument.CurrentController.ActiveSheet = oFeuille
'feuille ou se trouve le LOG de départ importé d'un fichier csv généré par mon système ' Je fais tout d'abord une sélection visuelle de la plage à filtrer du début à la fin
   ' (comme avec un Ctrl Deb puis un Ctrl Maj Fin ou un un Ctrl Maj Down)
' C'est réalisé à l'aide de l'enregistreur car je n'ai pas compris le fonctionnement du Curseurdecellule
   dim document   as object
   dim dispatcher as object

   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

   dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "Sel"
   args1(0).Value = false

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

   rem    dim args2(0) as new com.sun.star.beans.PropertyValue
   rem    args2(0).Name = "Sel"
   rem    args2(0).Value = true

rem dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args2()) dim args2(1) as new com.sun.star.beans.PropertyValue
   args2(0).Name = "By"
   args2(0).Value = 1
   args2(1).Name = "Sel"
   args2(1).Value = true

dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, args2())

   ' Je récupère ici la taille de ma plage de données sélectionné
   oCell = ThisComponent.CurrentSelection
DerniereLigne = oCell.RangeAddress.EndRow
   DerniereColonne = 4 'oCell.RangeAddress.EndColumn
msgbox DerniereLigne & "," & DerniereColonne 'Affiche la taille totale de mon csv jusque là c'est bon ' déclare la feuille cible
   oFeuilleCible = oDocument.Sheets.getByName ("ERROR" )
   ' oCell = oFeuilleCible.getCellByPosition (0,0 )

maCellule = oFeuilleCible.getCellByPosition(0, 1) ' cellule de destination du filtre (dessous la zone de filtre qui est situé en ERROR.A1:E1) maPlage = Ofeuille.getCellRangeByPosition(0,0,DerniereColonne,DerniereLigne) 'plage à filtrer ' décalaration de ma plage ou se trouve mon critère de filtre et création de l'objet filtre mesCriteres = oFeuilleCible.getCellRangeByName("A1:E1") ' j'ai essayé en ne mettant que C1:C1 et ça ne marche pas
      optFiltre = mesCriteres.createFilterDescriptorByObject(maPlage)

      ' paramètrage de mon filtre
optFiltre.setPropertyValue("ContainsHeader",FALSE) ' les plages ne contiennent pas d'entêtes

optFiltre.setPropertyValue("UseRegularExpressions",TRUE) ' devrait normalement me permettre d'utiliser *mon texte* dans ma zone de filtre pour remplacer une partie de mot devant et après mon texte

      optFiltre.setPropertyValue("CopyOutputData",TRUE)
      optFiltre.setPropertyValue("OutputPosition",maCellule.CellAddress)

   ' exécution de mon filtre sur ma plage
      maPlage.filter(optFiltre)
' je me place au début de ma feuille résultat
   oDocument.CurrentController.ActiveSheet = oFeuilleCible
oDocument.CurrentController.Select(oFeuilleCible.GetCellRangeByName("A1:E1"))

end sub





---------------------------------------------------------------------
To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org
For additional commands, e-mail: prog-h...@fr.openoffice.org

Répondre à