[users-fr] Ooo 3.2 calc bug filtre spécial
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
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
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
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
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