[Résolu] [Calc] Filtrer un tableau

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 !

[Résolu] [Calc] Filtrer un tableau

Messagepar bertrandRibon » 02 Juin 2019 19:26

Bonjour,
Présentation :
Je fais très souvent un filtre sur un "gros" (30 colonne,s 1600 lignes) tableau, et je me demandais s'il n'y avait pas moyen d'automatiser cela via une macro, par exemple.
Essai :
J'ai vu que l'on pouvait créer des macros par enregistrement des actions, quitte à modifier/ corriger le code après coup, mais là c'est un flop complet...
Tâches effectuées :
Dans mon tableau de 30 colonnes et 1600 lignes, j'ai 4 colonnes contenant, mettons, 250 termes au total. Je veux filtrer mon tableau sur un ("terme1") de ces 250 termes, et pour ce faire, je fais appel à la fonction filtre standard, qui comporte justement 4 lignes, et pour chacune, je met le nom de la première colonne, je choisis comme condition "=" (égal à), et en valeur mon "terme1". Puis je passe à la deuxième ligne, avec l'opérateur "ou", et je répète les mêmes choses, avec bien sûr le nom de la deuxième colonne, idem pour les 3ème et 4ème lignes. Pas compliqué, facile à vérifier, mais un peu laborieux d'où...
La macro rêvée :
J'en décris le fonctionnement, je peux, puisque c'est un rêve : je me positionne sur n'importe quelle case (non vide) de ces 4 colonnes (je suis donc sur une case qui contient un des 250 termes), et j'appuie sur le raccourci ad-hoc, et mon filtre se fait (sur le terme sélectionné).... le top !
La question :
Cela semble facile, mais je ne sais même pas si c'est faisable, et je n'ai aucune notion des instructions à utiliser... donc si quelqu'un pouvait -outre la faisabilité - me donner ne serait-ce que les instructions à utiliser, je fouillerai pour voir comment en faire une macro...
Merci d'avance à tous, pour ceux qui ont lu, pour ceux qui répondent.....
Cordialement,
Bertrand
Dernière édition par bertrandRibon le 11 Juin 2019 02:37, édité 1 fois.
Open Office 4.1.6 sur Debian 9.8
bertrandRibon
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 10
Inscrit le : 01 Juin 2019 20:29

[Calc] Filtrer un tableau

Messagepar micmac » 02 Juin 2019 19:30

Bonjour,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche.
Avez-vous remarqué comment étaient postées les autres questions ?

Lisez ce fil pour savoir quelle balise utiliser : sutra27295.html#27295

N'oubliez pas que les termes Macro, OpenOffice ne doivent pas être employés car il sont implicites. Essayez de synthétiser au mieux ce que vous cherchez à faire.

Le titre de votre question n'est pas assez explicite ou ne reflète pas le problème que vous décrivez :
< Créer une macro pour filtrer un tableau >
Nous l'avons donc modifié. En effet, lors d'une recherche, ce sujet risquait de passer inaperçu et donc de ne pas aider d'autres personnes ayant le même problème que vous.
Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même au risque de voir votre sujet verrouillé.

Merci de votre collaboration.
Les formats ouverts (ODF) assurent la pérennité de vos documents.
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 6338
Inscrit le : 28 Août 2010 09:45

Re: [Calc] Filtrer un tableau

Messagepar Noonours » 03 Juin 2019 01:29

Bonjour BertrandRibon et bienvenue sur ce forum,

une proposition vite-fait avec une macro déclenchée par un double-clic sur la donnée que tu veux filtrer.
(pour ça, il faut faire un clic-droit sur l'onglet de la feuille, puis "Evènements de la feuille..." et assigner la macro au double-clic)

Le script en question:
Code : Tout sélectionner   AgrandirRéduire
Sub FiltrerDblClick(oEv As Object)

oDoc = thisComponent
oFeuil = oDoc.sheets.getByName("Feuille1")
MaZone = oFeuil.getCellRangeByName("A1:J100") 'zone à determiner

Dim LeChampFiltre(0) As New com.sun.star.sheet.TableFilterField2

With LeChampFiltre(0)
   .Field = oEv.CellAddress.Column
   .Operator = com.sun.star.sheet.FilterOperator2.EQUAL
   .IsNumeric = False
   .StringValue = oEv.String
End With

MonFiltre = MaZone.createFilterDescriptor(true)

With MonFiltre
   .ContainsHeader = true
   .Orientation = com.sun.star.table.TableOrientation.COLUMNS
   .FilterFields2 = LeChampFiltre()
End With

MaZone.Filter(MonFiltre)

End Sub

Alors c'est très simplifié et ne tient pas compte d'une éventuelle sélection multiple de cellules, d'un double-clic en dehors de tes données, ou d'un retour avec un affichage de données non-filtrées... et autres "garde-fous" ... :lol:

J'ai créé un fichier exemple ci dessous, qui conserve les en-têtes de colonnes, dis nous si c'est en gros ce que tu attends. (le filtre peut être déclenché par autre chose qu'un double-clic: bouton, commande dans le menu...)

BertrandRibon.ods
(18.04 Kio) Téléchargé 20 fois


COOordialement,
Dernière édition par Noonours le 15 Oct 2019 19:30, édité 1 fois.
Noonours plantigrade râleur

Pour obtenir la réponse la plus précise possible, N’HÉSITEZ SURTOUT PAS À JOINDRE UN FICHIER

LibO 6.2.8.2 sous Windows 10
LibO 5.0.6.3 (obligation de version) sous Win 7
Avatar de l’utilisateur
Noonours
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 320
Inscrit le : 11 Mai 2013 01:11
Localisation : Aix en Provence

Re: [Calc] Filtrer un tableau

Messagepar bertrandRibon » 04 Juin 2019 00:19

Bonjour et merci de t'être penché sur mon problème...
J'ai essayé, et la macro ne donne pas tout à fait le résultat que je souhaite... et je ne me suis pas encore assez investi dans la programmation pour comprendre comment cela fonctionne et pouvoir la modifier moi même... c'est prévu, il me faut juste y consacrer le temps nécessaire...
Pour mieux me faire comprendre, j'ai fait le tableau joint qui ressemble à mon tableau, et si, par exemple, on se met dans la case D6 (qui contient "Kiwi") pour lancer la macro, il faudrait obtenir les 7 lignes qui comportent le mot "Kiwi" dans une quelconque des colonnes 3,4 5 ou 6, et donc avoir les dates des 17, 20, 22, 23, 24 mai (deux fois) et 3 juin.
Mille mercis d'avance,
Bertrand
Pièces jointes
BertrandRibon.ods
Fichier Calc d'essai comportant la macro
(15.17 Kio) Téléchargé 21 fois
Open Office 4.1.6 sur Debian 9.8
bertrandRibon
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 10
Inscrit le : 01 Juin 2019 20:29

Re: [Calc] Filtrer un tableau

Messagepar Dude » 04 Juin 2019 08:02

Salut,

Avec zBasic, tu filtres en quelques lignes :
no_problemo.gif
Clic sur l'image pour en voir l'animation
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21128
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Filtrer un tableau

Messagepar bertrandRibon » 05 Juin 2019 05:00

Bonjour,
Merci, c'est tout à fait cela...
Il ne me reste plus qu'à mettre une variable à la place de "Kiwi" dans le programme et affecter la valeur de la cellule dans laquelle je me trouve à cette variable lors du lancement du programme.
Pas trop le temps dans la semaine, je me mettrai dessus ce WE...
Merci pour tout
Bertrand
Open Office 4.1.6 sur Debian 9.8
bertrandRibon
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 10
Inscrit le : 01 Juin 2019 20:29

Re: [Calc] Filtrer un tableau

Messagepar bertrandRibon » 10 Juin 2019 19:38

Bonjour, à tous et notamment à Dude qui est à l'origine de l'essai que je viens de faire, mais vous avez peut être la réponse...
J'ai donc retranscrit le bout de code dans un univers de macro, après avoir chargé, et je pense, correctement installé l'extension zBasic, et quand je fais tourner la macro "Main", j'ai le message d'erreur suivant : "zBasic = zFiltre.Execute Aucun critère déclaré via zFiltre.colonne", et stop. Par contre, il va au bout du programme car la feuille "Résultat" se crée correctement, mais vide...
Voila, je n'ai pas trop d'idée, à part aller voir la syntaxe de la commande zFiltre, mais manifestement, ça marche tel quel chez Dude, alors je suis perplexe... ou j'ai mal retranscrit, mais je me suis crevé les yeux à vérifier...
Bref; je suis preneur de toute suggestion, d'avance, merci
Bertrand
PS : Je joins le fichier avec la macro qui devrait suivre...
Pièces jointes
BertrandRibon.ods
(15.17 Kio) Téléchargé 16 fois
Open Office 4.1.6 sur Debian 9.8
bertrandRibon
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 10
Inscrit le : 01 Juin 2019 20:29

Re: [Calc] Filtrer un tableau

Messagepar Dude » 10 Juin 2019 19:48

Déjà, tu fais gagner du temps à tout le monde en publiant en plus du document, la macro.
Cela nous évite d'avoir à télécharger systématiquement des documents inutilement.

bertrandRibon a écrit:j'ai le message d'erreur suivant : "zBasic = zFiltre.Execute Aucun critère déclaré via zFiltre.colonne",

Je ne vois nulle part, l'utilisation de zBasic dans la macro de ton document :
Code : Tout sélectionner   AgrandirRéduire
Sub FiltrerDblClick(oEv As Object)

oDoc = thisComponent
oFeuil = oDoc.sheets.getByName("Feuille1")
MaZone = oFeuil.getCellRangeByName("A1:J100")

Dim LeChampFiltre(0) As New com.sun.star.sheet.TableFilterField2

With LeChampFiltre(0)
   .Field = oEv.CellAddress.Column
   .Operator = com.sun.star.sheet.FilterOperator2.EQUAL
   .IsNumeric = False
   .StringValue = oEv.String
End With

MonFiltre = MaZone.createFilterDescriptor(true)

With MonFiltre
   .ContainsHeader = true
   .Orientation = com.sun.star.table.TableOrientation.COLUMNS
   .FilterFields2 = LeChampFiltre()
End With

MaZone.Filter(MonFiltre)

End Sub

Commence déjà par correctement exécuter l'exemple que je te donne. :roll:
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21128
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Filtrer un tableau

Messagepar bertrandRibon » 10 Juin 2019 20:18

Bonsoir,
Désolé pour les perturbations, mais il faut que j'apprenne en même temps à utiliser ce site, les macros et debian (notamment pour les pièces jointes), cela fait un peu beaucoup à la fois (pour moi).
La macro que tu cites est un exemple proposé par la première personne à répondre à ma demande, je ne sais pas où elle est.
Ci-dessous la macro que j'ai retranscrite (je ne sais pas faire de jolis encadrements de couleur comme vous le faites, mais je crois avoir vu quelque part comment faire, j'irai le lire, promis), mais je ne suis pas sûr qu'elle soit attachée au fichier que j'ai envoyé.
Par contre, je suis sûr que c'est celle là que j'exécute, car elle crée bien une nouvelle feuille intitulé "Résultat", et quand je ne supprime pas cette feuille avant un nouvel essai, j'ai le message "Cette feuille existe déjà", avant le deuxième message "Aucun critère déclaré via zFiltre.Colonne".

Code : Tout sélectionner   AgrandirRéduire
Sub Main
GlobalScope.BasicLibraries.loadLibrary("zBasic")
Dim oFiltre as variant
oFiltre= zFiltre.Demarre("Feuille1", "A1:J183")
zFiltre.Parametre(oFiltre, "entete", "O")
zFiltre.Colonne(oFiltre, 3, "", 2, "N", "Kiwi")
zFiltre.Colonne(oFiltre, 4, "OR", 2, "N", "Kiwi")
zFiltre.Colonne(oFiltre, 5, "OR", 2, "N", "Kiwi")
zFiltre.Colonne(oFiltre, 6, "OR", 2, "N", "Kiwi")
zFeuille.Cree("Résultat")
zFiltre.Execute(oFiltre, "Résultat", "A1")
End Sub
Open Office 4.1.6 sur Debian 9.8
bertrandRibon
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 10
Inscrit le : 01 Juin 2019 20:29

Re: [Calc] Filtrer un tableau

Messagepar Noonours » 11 Juin 2019 00:00

Bonjour,
Je re-tente une proposition d'une macro sans l'utilisation de l'extension zBasic qui filtre sur les 4 colonnes C, D, E et F et copie le résultat sur une feuille nommée "Résultats" (cette dernière est créée si elle n'existe pas)

Code : Tout sélectionner   AgrandirRéduire
REM  *****  BASIC  *****

Sub FiltrerDblClick(oEv As Object)

oDoc = thisComponent
LesFeuil = oDoc.sheets
oFeuil = LesFeuil.getByName("Feuille1")
MaZone = oFeuil.getCellRangeByName("A1:J1000")

Dim LeChampFiltre(3) As New com.sun.star.sheet.TableFilterField2

With LeChampFiltre(0)
   .Field = 2 'colonne C
   .Operator = com.sun.star.sheet.FilterOperator2.EQUAL
   .IsNumeric = False
   .StringValue = oEv.String
End With

With LeChampFiltre(1)
   .Connection = com.sun.star.sheet.FilterConnection.OR
   .Field = 3 'colonne D
   .Operator = com.sun.star.sheet.FilterOperator2.EQUAL
   .IsNumeric = False
   .StringValue = oEv.String
End With

With LeChampFiltre(2)
   .Connection = com.sun.star.sheet.FilterConnection.OR
   .Field = 4 'colonne E
   .Operator = com.sun.star.sheet.FilterOperator2.EQUAL
   .IsNumeric = False
   .StringValue = oEv.String
End With

With LeChampFiltre(3)
   .Connection = com.sun.star.sheet.FilterConnection.OR
   .Field = 5 'colonne F
   .Operator = com.sun.star.sheet.FilterOperator2.EQUAL
   .IsNumeric = False
   .StringValue = oEv.String
End With

MonFiltre = MaZone.createFilterDescriptor(true)

If not LesFeuil.hasByName("Résultats") then   LesFeuil.insertNewByName("Résultats", oFeuil.RangeAddress.sheet +1)

With MonFiltre
   .CopyOutputData = True
   .OutputPosition = LesFeuil.getByName("Résultats").getCellRangeByName("A1").CellAddress
   .ContainsHeader = True
   .Orientation = com.sun.star.table.TableOrientation.COLUMNS
   .FilterFields2 = LeChampFiltre()
End With

MaZone.Filter(MonFiltre)

End Sub
Noonours plantigrade râleur

Pour obtenir la réponse la plus précise possible, N’HÉSITEZ SURTOUT PAS À JOINDRE UN FICHIER

LibO 6.2.8.2 sous Windows 10
LibO 5.0.6.3 (obligation de version) sous Win 7
Avatar de l’utilisateur
Noonours
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 320
Inscrit le : 11 Mai 2013 01:11
Localisation : Aix en Provence

Re: [Calc] Filtrer un tableau

Messagepar bertrandRibon » 11 Juin 2019 02:24

Booonjour !
Ca fonctionne ! Merci Noonours ! Pas bien compris pourquoi cela n'a pas fonctionné du premier coup, pourtant j'avais fait un copier-collé de la macro pour être sûr de ne rien oublier, mais la deuxième fois, cela a marché...
Du coup, je l'ai adapté à mon gros fichier,en changeant le numéro des colonnes et la taille de la feuille (ça, j'y arrive, mdr), ça fonctionne toujours...
Remarque N°1, logique : il faut supprimer la feuille "résultat" à chaque fois, car si le résultat suivant comporte moins de lignes, les lignes excédentaires du premier résultat subsistent...
Remarque N°2 : Serait-ce gênant (ou risqué) de ne pas faire une nouvelle feuille, mais d'afficher le résultat directement dans la feuille en cours, sachant qu'il faudra alors supprimer le filtre pour retrouver le fichier originel ?
Mais sinon, je l'ai testé sous toutes les coutures, ça fonctionne parfaitement... pas besoin de garde fous (encore que...), il n'y a que moi qui l'utilise, je suis censé savoir ce que je fais... le seul vrai danger est de faire un double-clic ailleurs que dans la zone considérée, ce qui n'est pas gênant si on fait une nouvelle feuille, d'où l'intérêt de la nouvelle feuille.
Merci mille fois de la persévérance, Noonours, c'est une bonne qualité
Merci à tous les lecteurs et contributeurs, je vois bien que ce que vous faites n'est pas facile, mais ça permet bien d'avancer...
Bertrand
Open Office 4.1.6 sur Debian 9.8
bertrandRibon
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 10
Inscrit le : 01 Juin 2019 20:29

Re: [Calc] Filtrer un tableau

Messagepar bertrandRibon » 11 Juin 2019 02:31

Donc le problème est résolu.
Re Merci
Bertrand
Open Office 4.1.6 sur Debian 9.8
bertrandRibon
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 10
Inscrit le : 01 Juin 2019 20:29


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : MSN [Bot] et 6 invité(s)