[users-fr] Ooo 3.2 calc bug filtre spécial

2010-08-23 Par sujet Yves LOMBARDOT

Bonjour,
Je retransmets une question que j'ai posée en pleine période de vacances 
et dont les rares tentatives de réponses, dont je remercie vivement les 
auteurs, ne m'ont pas permis de solutionner le problème. En re-précisant 
dès à présent que le bug ne concerne pas seulement la macro dont je vais 
vous parer mais bien le filtre spécial de calc en lui même. Autant que 
la solution je cherche à faire remonter le bug aux programmeurs.


--
J'utilise pour mon travail d'une macro de filtre spécial, récupérée il y 
a quelques temps déjà sur un forum et dont je crois Mme Sophie Gautier, 
est l'auteur. Ceci par

l'intermédiaire d'un camarade qui lui aussi naviguait sur ce forum.

Tout fonctionnait à merveilles sous Ooo jusqu'en version 2.4, mais au 
passage de nos services à la version 3.2 (oui on va lentement) je 
déplore un bug qui ne concerne par ailleurs pas que la macro mais 
également l'utilisation du filtre spécial lui même avec les commandes 
idoines de calc.


Le problème :
dès qu'une cellule contient un retour à la ligne par Ctrl+entrée, si 
l'un des termes recherchés concerne cette colonne, la ligne contenant la 
cellule ne sera pas renvoyée en résultat.


Pour l'instant on pallie au problème avec le filtre standard (un peu 
restrictif) mais je suis preneur de toute solution temporaire et 
d'adresse ou faire remonter ce bug.


En vous remerciant de votre écoute
Cordialement

Je vous colle la macro ci-dessous mais, j'insiste, le filtre spécial lui 
même connait les mêmes dysfonctionnements. (même en cochant "caractères 
génériques")



--
Option Explicit

Sub monFiltreSpecial()

Dim oPlageas Object
Dim optFiltreas Object
Dim oFeuilleas Object
Dim oCelluleas Object
Dim oCriteresas Object

oFeuille = thisComponent.Sheets.getByName("Extraction")
thisComponent.currentController.activeSheet = oFeuille

Effacement()

oCellule = thisComponent.Sheets(2).getCellRangeByName("A4")
oPlage = thisComponent.Sheets(0).getCellRangeByName("A2:i5001")
oCriteres = thisComponent.Sheets(1).getCellRangeByName("A11:i250")

optFiltre = oCriteres.createFilterDescriptorByObject(oPlage)


optFiltre.setPropertyValue("ContainsHeader",TRUE)
optFiltre.setPropertyValue("UseRegularExpressions",TRUE)
optFiltre.setPropertyValue("CopyOutputData",TRUE)
optFiltre.setPropertyValue("OutputPosition",oCellule.CellAddress)

oPlage.filter(optFiltre)

End Sub


Sub Effacement()

Dim oDocumentas object
Dim oDispatcheras object

oDocument   = thisComponent.CurrentController.Frame
thisComponent.currentController.activeSheet = thisComponent.Sheets(2)
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$5:$I$5006"

oDispatcher.executeDispatch(oDocument, ".uno:GoToCell", "", 0, args1())

oDispatcher.executeDispatch(oDocument, ".uno:ClearContents", "", 0, Array())

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

oDispatcher.executeDispatch(oDocument, ".uno:GoToStart", "", 0, args3())

End Sub

--
Merci



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



Re: [users-fr] Ooo 3.2 calc bug filtre spécial

2010-07-26 Par sujet Samuel Mounier (Liste CGO)

Yves LOMBARDOT a écrit :
[...]

Bonjour,
Merci de cette première réponse, je cherche toujours mais si cela peut 
vous aider à comprendre d'où vient mon problème, voici la macro qui 
fonctionnait très bien sous Ooo 2.4. Je m'empresse de rappeler qu'elle 
m'a été gracieusement donnée et que, si je peux y modifier les 
différentes zones, j'aurais été bien incapable de la produire. Et sans 
la macro mais avec le filtre "Données/filtre/filtre spécial" je ne 
trouve pas l'option "utiliser expression régulière". Je peux adresser 
une version basique du fichier si besoin

Milles excuses pour mon inculture
Yves LOMBARDOT


En complément des explications donné sur la boite de dialogue de filtre,
Voici quelques explications pour que tu comprenne ce que fait ta macro.


Option Explicit

Sub monFiltreSpecial()

Dim oPlageas Object
Dim optFiltreas Object
Dim oFeuilleas Object
Dim oCelluleas Object
Dim oCriteresas Object

oFeuille = thisComponent.Sheets.getByName("Extraction")
thisComponent.currentController.activeSheet = oFeuille
Ces deux lignes te permettent d'activer la feuille qui se nomme 
Extraction (là ou tu va mettre le résultat de ton filtre)


Effacement()
C'est un appel à la procédure nommé Effacement qui efface le contenu 
actuel de la feuille active.




oCellule = thisComponent.Sheets(2).getCellRangeByName("A4")
Déclaration d'un objet du type Cellule (c'est la cellule ou le résultat 
de ton filtre se mettra)



oPlage = thisComponent.Sheets(0).getCellRangeByName("A2:i5001")
oCriteres = thisComponent.Sheets(1).getCellRangeByName("A11:i250")
Tu défini ici la base de données à filtre dans oplage et la zone qui te 
servira de critère pour filtrer dans ocriteres




optFiltre = oCriteres.createFilterDescriptorByObject(oPlage)

Création de l'objet paramètre de filtre optfiltre

Les lignes qui commence par optfiltre sont celles ou tu paramètre ton filtre

optFiltre.setPropertyValue("ContainsHeader",TRUE)
Cette ligne indique que ta base de données (et donc aussi ton filtre) 
possèdent une zone d'en-tête qui te permet d'identifier tes colonnes 
(champs).



optFiltre.setPropertyValue("UseRegularExpressions",TRUE)
Cette ligne indique que ton filtre travaille avec des expressions 
régulières (voir comment écrire les expressions régulières dans l'aide)



optFiltre.setPropertyValue("CopyOutputData",TRUE)
optFiltre.setPropertyValue("OutputPosition",oCellule.CellAddress)
Et ces deux lignes te permettent de dire que tu veux extraire le 
résultat vers une autre cellule




oPlage.filter(optFiltre)

Ça, c'est pour exécuter le filtre avec les options que tu as définie



End Sub




Ça c'est la procédure qui efface le contenu de la feuille active.
De la cellule A5 jusqu'à la cellule I5006

C'est généré avec l'enregistreur de Macro. Je pense que tu as peut être 
un pb ici



Sub Effacement()

Dim oDocumentas object
Dim oDispatcheras object

oDocument   = thisComponent.CurrentController.Frame
thisComponent.currentController.activeSheet = thisComponent.Sheets(2)
Cette ligne peut poser pb si tu as inséré des feuilles devant celles 
existantes (car cela sélectionne la feuille N° de 2 de ton classeur).


Il faut mieux travailler avec les noms de feuille si jamais tu compte 
insérer des feuilles dans ton classeur devant la feuille N° 2 ou tu 
colles le résultat de tes extractions.


Donc tu devrais plutôt ajouter

thisComponent.currentController.activeSheet = oFeuille
 ou oDocument.Sheets.getByName("Extraction") pour remplacer ofeuille

Ou alors simplement supprimer la ligne précédente
(vu que dans la procédure appelante tu sélectionne déjà ofeuille)



oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$5:$I$5006"

oDispatcher.executeDispatch(oDocument, ".uno:GoToCell", "", 0, args1())

oDispatcher.executeDispatch(oDocument, ".uno:ClearContents", "", 0, 
Array())


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

oDispatcher.executeDispatch(oDocument, ".uno:GoToStart", "", 0, args3())

End Sub




Pour nettoyer une feuille, personnellement j'utilise ce code qui 
sélectionne toute la feuille et supprime vraiment tout.



sub netoiefeuilles
   dim document   as object
   dim dispatcher as object
   dim args1(0) as new com.sun.star.beans.PropertyValue

   args1(0).Name = "Flags"
   args1(0).Value = "A"

   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


   oDocument.CurrentController.ActiveSheet = oFeuille

   document   = ThisComponent.CurrentController.Frame

   dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0,Array())

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

   oDocument.CurrentController.ActiveSheet = 
oDocument.Sheets.getByName("Extraction")


   document   =

Re: [users-fr] Ooo 3.2 calc bug filtre spécial

2010-07-23 Par sujet Yves LOMBARDOT

Le 23/07/2010 09:16, Samuel Mounier (Liste CGO) a écrit :

Yves LOMBARDOT a écrit :

Bonjour,

Utilisateur pour mon travail d'une macro de filtre spécial, récupérée il
y a quelques temps déjà sur un forum.

Tout fonctionnait à merveilles sous Ooo 2.4, mais au passage de nos
services à la version 3.2 (oui on va lentement) je déplore un souci très
gênant pour nous. Bug qui ne concerne par ailleurs pas que la macro mais
également l'utilisation du filtre spécial lui même avec les commandes
idoines de calc.

Le problème :
dès qu'une cellule contient un retour à la ligne par Ctrl+entrée, si
l'un des termes recherchés concerne cette colonne, la ligne contenant la
cellule ne sera pas renvoyée en résultat.

Pour l'instant on pallie au problème avec le filtre standard mais je
suis preneur de toute solution temporaire et d'adresse ou faire remonter
ce bug.

En vous remerciant de votre écoute
Cordialement


Bonjour Yves,

As tu vérifié si l'option utiliser expression régulière était choisie ?

Je pense qu'une cellule contenant un caractère de retour à ligne doit 
avoir un critère de filtre un peu particulier (Essaye de l'exprimer 
avec une expression régulière à l'aide de l'aide et ça devrait passer).


Samuel Mounier

Bonjour,
Merci de cette première réponse, je cherche toujours mais si cela peut 
vous aider à comprendre d'où vient mon problème, voici la macro qui 
fonctionnait très bien sous Ooo 2.4. Je m'empresse de rappeler qu'elle 
m'a été gracieusement donnée et que, si je peux y modifier les 
différentes zones, j'aurais été bien incapable de la produire. Et sans 
la macro mais avec le filtre "Données/filtre/filtre spécial" je ne 
trouve pas l'option "utiliser expression régulière". Je peux adresser 
une version basique du fichier si besoin

Milles excuses pour mon inculture
Yves LOMBARDOT

Option Explicit

Sub monFiltreSpecial()

Dim oPlageas Object
Dim optFiltreas Object
Dim oFeuilleas Object
Dim oCelluleas Object
Dim oCriteresas Object

oFeuille = thisComponent.Sheets.getByName("Extraction")
thisComponent.currentController.activeSheet = oFeuille

Effacement()

oCellule = thisComponent.Sheets(2).getCellRangeByName("A4")
oPlage = thisComponent.Sheets(0).getCellRangeByName("A2:i5001")
oCriteres = thisComponent.Sheets(1).getCellRangeByName("A11:i250")

optFiltre = oCriteres.createFilterDescriptorByObject(oPlage)


optFiltre.setPropertyValue("ContainsHeader",TRUE)
optFiltre.setPropertyValue("UseRegularExpressions",TRUE)
optFiltre.setPropertyValue("CopyOutputData",TRUE)
optFiltre.setPropertyValue("OutputPosition",oCellule.CellAddress)

oPlage.filter(optFiltre)

End Sub


Sub Effacement()

Dim oDocumentas object
Dim oDispatcheras object

oDocument   = thisComponent.CurrentController.Frame
thisComponent.currentController.activeSheet = thisComponent.Sheets(2)
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$5:$I$5006"

oDispatcher.executeDispatch(oDocument, ".uno:GoToCell", "", 0, args1())

oDispatcher.executeDispatch(oDocument, ".uno:ClearContents", "", 0, Array())

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

oDispatcher.executeDispatch(oDocument, ".uno:GoToStart", "", 0, args3())

End Sub



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



Re: [users-fr] Ooo 3.2 calc bug filtre spécial

2010-07-23 Par sujet Samuel Mounier (Liste CGO)

Yves LOMBARDOT a écrit :

Bonjour,

Utilisateur pour mon travail d'une macro de filtre spécial, récupérée il
y a quelques temps déjà sur un forum.

Tout fonctionnait à merveilles sous Ooo 2.4, mais au passage de nos
services à la version 3.2 (oui on va lentement) je déplore un souci très
gênant pour nous. Bug qui ne concerne par ailleurs pas que la macro mais
également l'utilisation du filtre spécial lui même avec les commandes
idoines de calc.

Le problème :
dès qu'une cellule contient un retour à la ligne par Ctrl+entrée, si
l'un des termes recherchés concerne cette colonne, la ligne contenant la
cellule ne sera pas renvoyée en résultat.

Pour l'instant on pallie au problème avec le filtre standard mais je
suis preneur de toute solution temporaire et d'adresse ou faire remonter
ce bug.

En vous remerciant de votre écoute
Cordialement


Bonjour Yves,

As tu vérifié si l'option utiliser expression régulière était choisie ?

Je pense qu'une cellule contenant un caractère de retour à ligne doit 
avoir un critère de filtre un peu particulier (Essaye de l'exprimer avec 
une expression régulière à l'aide de l'aide et ça devrait passer).


Samuel Mounier


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



[users-fr] Ooo 3.2 calc bug filtre spécial

2010-07-22 Par sujet Yves LOMBARDOT

Bonjour,

Utilisateur pour mon travail d'une macro de filtre spécial, récupérée il
y a quelques temps déjà sur un forum.

Tout fonctionnait à merveilles sous Ooo 2.4, mais au passage de nos
services à la version 3.2 (oui on va lentement) je déplore un souci très
gênant pour nous. Bug qui ne concerne par ailleurs pas que la macro mais
également l'utilisation du filtre spécial lui même avec les commandes
idoines de calc.

Le problème :
dès qu'une cellule contient un retour à la ligne par Ctrl+entrée, si
l'un des termes recherchés concerne cette colonne, la ligne contenant la
cellule ne sera pas renvoyée en résultat.

Pour l'instant on pallie au problème avec le filtre standard mais je
suis preneur de toute solution temporaire et d'adresse ou faire remonter
ce bug.

En vous remerciant de votre écoute
Cordialement



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