[Résolu] [Calc] résultat d'un filtre sur une autre feuille

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
michelf30
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 19 oct. 2008 12:57

[Résolu] [Calc] résultat d'un filtre sur une autre feuille

Message par michelf30 »

Bonjour,
ma première macro... pour laquelle j'ai besoin d'explications et d'aide :

Je gère un ensemble de ruches pour lesquelles j'enregistre toutes les visites dans un 'journal' en précisant (colonne M) les opérations de suivi à effectuer en leur donnant une couleur d'arrière plan rouge.
Pour organiser ces choses à faire lors d'une prochaine visite, je fais un filtre sur les cellules rouges qui s'affichent dans une autre feuille : dans la feuille journal : données/plus de filtres/filtre standard/Colonne M, couleur d’arrière plan rouge, copier le résultat vers : Faire (nom de liste dans la feuille A_faire).
J’ai enregistré une macro associée à ce classeur reprenant toute cette manipulation. MAIS hélas cela ne reproduit pas le résultat (après avoir effacé les données présentes sur la feuille A_faire)...
qu'ai-je mal fait ? je vous joins mon fichier test auquel est attaché la macro.
merci d'avance pour votre aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par michelf30 le 31 mai 2025 12:57, modifié 1 fois.
Libreoffice 24.8.2 (M1), sous MacOs Sequoia 15.4.1 (M1)
Java Temurin JRE-21 aarch64 (sous MacOS 15.0)
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12812
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par Bidouille »

Bonjour,

Afin que le code soit indexé par le moteur de recherche du forum, veuillez publier le contenu de la macro à la suite.

Merci également de joindre deux copies d'écran qui montrent le problème et le résultat attendu.
Avatar de l’utilisateur
michelf30
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 19 oct. 2008 12:57

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par michelf30 »

Bonjour
voici le code produit par mon enregistrement de macro

Code : Tout sélectionner

REM  *****  BASIC  *****


sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataFilterStandardFilter", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:FilterExecute", "", 0, Array())


end sub
quant au problème rencontré : l'activation de la macro ne donne aucun résultat
et le résultat escompté : il est présenté dans mon fichier exemple joint

bien cordialement
Libreoffice 24.8.2 (M1), sous MacOs Sequoia 15.4.1 (M1)
Java Temurin JRE-21 aarch64 (sous MacOS 15.0)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26177
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par Dude »

Salut,

L'enregistreur de macro ne permet pas le filtrage car il y a une action sur un dialogue pour le paramétrage.
Il faut passer par l'API comme expliqué dans ce tutoriel : viewtopic.php?t=47388

Filtrer est relativement ardu en terme de codage.
Il est plus simple de passer par zBasic : https://beaussier.com/wiki/index.php?ti ... conditions
Avatar de l’utilisateur
michelf30
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 19 oct. 2008 12:57

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par michelf30 »

Hello,
en effet ça m'embarque dans des codages que je ne connais pas du tout.
Je vais essayer en zBasic comme tu me le conseilles.
Un seul critère me suffit : la "couleur rouge" dans la colonne M ? comment l'exprimer dans le code ?
Libreoffice 24.8.2 (M1), sous MacOs Sequoia 15.4.1 (M1)
Java Temurin JRE-21 aarch64 (sous MacOS 15.0)
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par OOotremer971 »

Bonjour,
michelf30 a écrit : 19 mai 2025 07:53 ça m'embarque dans des codages que je ne connais pas du tout.
LibreOffice embarque une fonction de cellule nommée FILTRE(), elle permet d'obtenir l'équivalent du filtrage obtenu par le menu Données>>Plus de filtre en se basant sur une colonne critère booléenne colonne A dans l'exemple ci-desous :
Capture d’écran du 2025-05-19 16-33-40.png
Résultat obtenu :
Capture d’écran du 2025-05-19 16-34-21.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
Avatar de l’utilisateur
michelf30
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 19 oct. 2008 12:57

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par michelf30 »

Bonjour Oootremer971
Merci pour cette solution.
Tu as appliqué la formule à toute la plage "faire" ?
Je me penche sur le sujet et sa réalisation...
Libreoffice 24.8.2 (M1), sous MacOs Sequoia 15.4.1 (M1)
Java Temurin JRE-21 aarch64 (sous MacOS 15.0)
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par OOotremer971 »

michelf30 a écrit : 20 mai 2025 12:36 Tu as appliqué la formule à toute la plage "faire" ?
Non dans le précédent fichier mais ce n'est pas pratique lorsqu'il s'agit d'actualiser le filtre.

Oui dans le fichier joint ci-dessous (plage A3;Z60) cela permet de modifier la colonne A de la feuille journal sans avoir à ressaisir la formule dans la feuille A_faire mais dans ce cas, les cellules vides affichent un message d'erreur impossible à faire disparaître avec des fonctions genre SIERREUR(), SI(ESTERREUR() etc...du coup j'ai appliqué un style conditionnel BlancBlancBlanc pour masquer les parasites.

Il n'y a plus qu'a ajouter ou retirer des valeurs 1 colonne A feuille journal pour faire afficher au filtre ce que l'on souhaite.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26177
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par Dude »

michelf30 a écrit : 19 mai 2025 07:53 Un seul critère me suffit : la "couleur rouge" dans la colonne M ? comment l'exprimer dans le code ?
Qu'est ce qui fait que le rouge est appliqué ? Comme l'indique OOotremer971, il suffit d'exprimer ça par une donnée et non une couleur.
En reprenant son exemple, cela donne :

Code : Tout sélectionner

Sub Main
  GlobalScope.BasicLibraries.loadLibrary("zBasic")
  Dim oFiltre as variant
  oFiltre = zFiltre.Demarre("journal", "A2:Z23")
  zFiltre.Parametre(oFiltre, "entete", "O")
  zFiltre.Colonne(oFiltre, 1, "", 2, "N", 1)
  zFeuille.Cree("Résultat")
  zFiltre.Execute(oFiltre, "Résultat", "A1")
End Sub
Avatar de l’utilisateur
michelf30
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 19 oct. 2008 12:57

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par michelf30 »

Bonsoir,
j'étudie dans un premier temps le fichier de OOotremer971. Je le trouve très intéressant (peut-être parce qu'il fait appel à des formules et non des macros que je ne maitrise pas (ou pas encore...).
Il correspond tout à fait à ce que je veux faire : Si une visite s'impose, on rempli la colonne A de la feuille journal ce qui affiche la ligne dans la feuille A_faire et on enlève cette donnée quand c'est fait et la ligne de "A_faire" s'efface.
Je vois qu'on peut inscrire toute valeur numérique, date, valeur monétaire, mais pas alphabétique, sinon plus rien ne s'affiche dans la 2e feuille. C'est normal ? existe-t-il une façon de le faire avec des valeurs alphabétiques ? cela pourrait m'être utile et éviterait des erreur de saisie (si par mégarde on saisit une lettre par ex.)
Merci encore à OOotremer971 pour cette solution et le temps passé.

Je me penche très bientôt sur l'idée de Dude et sa macro. Merci aussi pour l'intérêt porté à ma demande.

bon week end
Michel
Libreoffice 24.8.2 (M1), sous MacOs Sequoia 15.4.1 (M1)
Java Temurin JRE-21 aarch64 (sous MacOS 15.0)
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par OOotremer971 »

michelf30 a écrit : 23 mai 2025 20:34 Je vois qu'on peut inscrire toute valeur numérique, date, valeur monétaire, mais pas alphabétique, sinon plus rien ne s'affiche dans la 2e feuille. C'est normal ?
Oui ! la fonction FILTRE() attend un critère booléen (VRAI ou FAUX) pour exporter ou non vers la plage de destination la ligne (ou colonne) concernée par ledit critère. Alors pourquoi ça fonctionne aussi avec une date ou une autre valeur numérique ? car toute valeur numérique supérieure à zéro est considérée comme VRAI par opposition à FAUX pour la valeur zéro.
michelf30 a écrit : 23 mai 2025 20:34 existe-t-il une façon de le faire avec des valeurs alphabétiques ?
Oui ! avec une formule retournant une valeur booléenne (VRAI ou FAUX) selon qu'un critère est renseigné ou non dans la cellule critère.

Code : Tout sélectionner

=SI(B3="";FAUX();VRAI())
Dans le fichier joint ci-dessous, cette formule est stockée colonne A (masquée pour l'esthétique :) ) et le critère est saisi colonne B. Mais c'est bien la colonne A qui est considérée comme colonne critère booléen dans la fonction FILTRE() :tesfou: :

Code : Tout sélectionner

=FILTRE($journal.B3:AA60;$journal.A3:A60)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
Avatar de l’utilisateur
michelf30
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 19 oct. 2008 12:57

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par michelf30 »

Excellent ! ça m'ouvre plein de perspectives... Merciiii

en revanche je n'arrive pas à modifier les formules de la feuille "A_faire". Un avertissement s'affiche : Impossible de modifier uniquement une partie de la matrice.
Tu as mis une protection particulière ?
Comment appliquer la formule à toutes les cellules ?
ou comment définir cette "matrice" ?

merci encore pour ton aide, tellement efficace !
Libreoffice 24.8.2 (M1), sous MacOs Sequoia 15.4.1 (M1)
Java Temurin JRE-21 aarch64 (sous MacOS 15.0)
cwolan
Membre hOOnoraire
Membre hOOnoraire
Messages : 167
Inscription : 14 févr. 2021 22:15

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par cwolan »

Bonjour,
OOotremer971 a écrit : 20 mai 2025 18:07 (...) les cellules vides affichent un message d'erreur impossible à faire disparaître avec des fonctions genre SIERREUR(), SI(ESTERREUR() etc...du coup j'ai appliqué un style conditionnel BlancBlancBlanc pour masquer les parasites.
Il y a d'autres inconvénients, comme le montrent les tests séparés ci-dessous (votre fichier Rucher 4.3test.ods).


Test n°1
  1. la feuille journal : dans la plage B3:B60, ne laissez qu'une seule cellule non vide, par exemple B3.
La fonction FILTRE() de la feuille A_faire ne devrait afficher qu'une seule ligne avec des données, mais toutes les lignes de la plage sont identiques.


Test n°2
  1. dans la feuille A_faire supprimez la formule matricielle =FILTRE($journal.B3:AA60;$journal.A3:A60)
  2. dans la cellule A3, saisissez à nouveau cette formule matricielle
  3. dans la feuille journal saisissez n'importe quelle valeur dans la cellule B5
La fonction FILTRE() de la feuille A_faire n'affiche pas toutes les lignes appropriées.


Test n°3
  1. dans la feuille A_faire supprimez la formule matricielle =FILTRE($journal.B3:AA60;$journal.A3:A60)
  2. dans la cellule A3, saisissez à nouveau cette formule matricielle
  3. dans la feuille journal saisissez n'importe quelle valeur dans la cellule B22
La fonction FILTRE() de la feuille A_faire n'affiche pas toutes les lignes appropriées.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 1.1.5 – 4.1.16
LibreOffice 3.3.0.4 – 26.2
Windows 7,10,11 64-bit
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2791
Inscription : 16 avr. 2010 13:31

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par OOotremer971 »

Bonjour à tous,
michelf30 a écrit : 24 mai 2025 07:07 en revanche je n'arrive pas à modifier les formules de la feuille "A_faire". Un avertissement s'affiche : Impossible de modifier uniquement une partie de la matrice.
C'est le comportement habituel lorsqu'on ne sélectionne pas toute la plage concernée par une fonction matricielle. Pour sélectionner l'intégralité de la plage concernée il faut sélectionner n'importe quelle cellule de cette plage puis appuyer sur les touches Ctrl+/ (Ctrl + Slash). Mais je constate avec ma configuration que ça ne permet pas de modifier la formule a posteriori alors que ça devrait. Je peux juste la supprimer et la ressaisir :?
Après dans l'aide intégrée, au sujet de cette fonction FILTRE(), je lis :
Capture d’écran du 2025-05-24 07-22-54.png
C'est déroutant.

@cwolan
cwolan a écrit : 24 mai 2025 10:39 Il y a d'autres inconvénients, comme le montrent les tests séparés ci-dessous (votre fichier Rucher 4.3test.ods).
Je reproduis le test n°1 mais pas les autres avec ma configuration :
Capture d’écran du 2025-05-24 07-30-56.png
J'ai tenté en incorporant une réponse booléenne directement dans la fonction FILTRE() pour écarter l’hypothèse que l'utilisation d'une cellule intermédiaire pour générer la réponse booléenne aurait une quelconque influence inattendue.,,ce n'est pas le cas !
Nouvelle formule testée dans le fichier joint ci-dessous :

Code : Tout sélectionner

=FILTRE($journal.A3:Y60;NON(ESTVIDE($journal.A3:A60));"") 

Code : Tout sélectionner

NON(ESTVIDE($journal.A3:A60))
Retourne VRAI() ou FAUX() selon qu'une cellule de la colonne A est renseignée ou non.

En conclusion, chez moi la fonction dysfonctionne uniquement lorsqu'il s'agit de filtrer une seule ligne facilement contournable en sélectionnant une ligne vide en plus de la ligne à filtrer.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian GNU/Linux 12 (bookworm)
Avatar de l’utilisateur
michelf30
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 19 oct. 2008 12:57

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par michelf30 »

Merci pour cette nouvelle mouture qui me semble plus facile.

Après utilisation, j'ai apporté quelques modifications en rapport avec l'utilisation réelle.
J'ai élargi la matrice à 600 lignes au lieu de 60
et j'ai utilisé la colonne O "ToDo" (au lieu de A) qui me semblait plus logique pour la saisie, juste à la suite des constats des choses à faire. Avec ta nouvelle formule on peut y mettre tout ce qu'on veut ce qui ouvre des possibilités intéressantes pour moi (et les apiculteurs destinataires). Par exemple date, remarque etc...
Il suffira d'effacer les données de cette colonne O (dans Journal) pour que la ligne disparaisse dans "A_faire".
J'avais pensé utiliser directement la colonne "A faire" mais je préfère ne pas devoir effacer le travail qui a été accompli. D'où l'idée initiale d'une couleur d'arrière plan quand ce n'est pas fait et sans arrière plan quand c'est fait... Mais ce sera très bien comme ça.

J'ai mis un point dans O600 pour que la ligne soit utilisée et qu'il n'y ait pas l'erreur bizarre s'il n'y a qu'une seule autre ligne.

je joins mon fichier si ça peut servir.
Bon week end et merci encore pour tout ce que j'ai appris grâce à vous !
🐝
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libreoffice 24.8.2 (M1), sous MacOs Sequoia 15.4.1 (M1)
Java Temurin JRE-21 aarch64 (sous MacOS 15.0)
cwolan
Membre hOOnoraire
Membre hOOnoraire
Messages : 167
Inscription : 14 févr. 2021 22:15

Re: [Calc] résultat d'un filtre sur une autre feuille

Message par cwolan »

Bonjour,

@OOotremer971
Merci pour votre réponse rapide. Et juste pour info…
OOotremer971 a écrit : 24 mai 2025 11:50 Après dans l'aide intégrée, au sujet de cette fonction FILTRE(), je lis :
FILTRE.png
C'est déroutant.
Je dirais oui et non.
La fonction FILTRE pourrait faire partie de ODF Version 1.5 cf. OASIS OFFICE-4156.
OOotremer971 a écrit : 24 mai 2025 11:50 Je reproduis le test n°1 mais pas les autres avec ma configuration :
confi.png
J'ai effectué tous les tests avec différentes versions de LibreOffice sous Windows 7, 10 et 11.
Le rapport de bogue 127808 (et ses doublons) peut entrer en jeu ici.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 1.1.5 – 4.1.16
LibreOffice 3.3.0.4 – 26.2
Windows 7,10,11 64-bit
Avatar de l’utilisateur
michelf30
Membre hOOnoraire
Membre hOOnoraire
Messages : 171
Inscription : 19 oct. 2008 12:57

Re : [Calc] résultat d'un filtre sur une autre feuille

Message par michelf30 »

Bonjour à tous et à Oukcha qui m'interpelle sur la non clôture du présent sujet.

Deux voies m'ont été proposées pour la résolution de mon problème : une par des fonctions proposée par Oootremer971, et une autre par macro proposée par Dude.
N'étant pas rompu aux macros, j'ai commencé à étudié la première proposition en l'appliquant à mon classeur. ça semble aller dans l'ensemble.
Je suis en train maintenant d'étudier la 2e proposition faisant appel à des macros sous zbasic et intéressante elle aussi. Les 2 (langage et macros) sont nouveaux pour moi et me demandent du temps. J'y vais étape par étape en posant d'autres questions sur le forum pour comprendre et aller plus loin.
Mon étude n'est pas terminée et est toujours d'actualité.
Mais s'il faut vraiment le clôturer, il n'y a pas de problème. Je reviendrai avec d'autres questions au fur et à mesure de mon apprentissage.

Merci encore pour l'aide apportée jusque là.
Michel
Libreoffice 24.8.2 (M1), sous MacOs Sequoia 15.4.1 (M1)
Java Temurin JRE-21 aarch64 (sous MacOS 15.0)