IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Réinitialiser filtre sur plusieurs tableaux [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre à l'essai
    Homme Profil pro
    fonctionnaire utilisant VBA
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : fonctionnaire utilisant VBA
    Secteur : Service public

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 13
    Points
    13
    Par défaut Réinitialiser filtre sur plusieurs tableaux
    Bonjour,

    Je rencontre une difficulté dans le cadre d'une petite macro relative à un filtre sur plusieurs tableaux calc.

    En fait, il s'agit d'un fichier (extrait rendu confidentiel et simplifié joint) partagé, ayant des lignes pouvant être groupées au souhait de l'utilisateur, dans lequel un filtre doit pouvoir être actionné de manière libre.par chacun. Je précise que ce filtre porte sur un ensemble de tableaux, ayant la même en tête de colonnes, les uns au dessous des autres (séparés par des lignes vides). A l'origine, avant de rendre utilisable le fichier, j'actionne moi-même le filtre (dans le cadre de l'extrait joint : Sélection de la zone C4 à N26 puis : Données – Filtre – Autofiltre).

    Je souhaite faire un code permettant de "réinitialser" le filtre (neutraliser les sélections), sans l'enlever, par simple clic sur un bouton. J'ai essayé de coder (Cf; ci-après) mais je ne parviens pas au résultat attendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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 = "ToPoint"
    args1(0).Value = "$C$4"
     
    dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
     
    dispatcher.executeDispatch(document, ".uno:DataFilterRemoveFilter", "", 0, Array())
     
    end sub


    En vous remerciant par avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    je ne sais pas si c'est exactement ce que tu veux mais il suffit de réafficher toutes les lignes masquées par le filtre comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Filtre_OFF()
     Dim monDocument As Object
     Dim lesFeuilles as Object
     Dim maFeuille As Object
     Dim maZone as Object
     Dim mesLignes as Object
     
        monDocument = ThisComponent
        lesFeuilles = monDocument.Sheets
        maFeuille = lesFeuilles.getByName("Par_Secteur")
        maZone = maFeuille.getCellRangeByName("C4:N26")
        mesLignes = maZone.Rows
        mesLignes.IsVisible = true
    end sub
    Le filtre existe toujours et il suffit de cliquer dessus pour le réappliquer.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre à l'essai
    Homme Profil pro
    fonctionnaire utilisant VBA
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : fonctionnaire utilisant VBA
    Secteur : Service public

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup JP.

    Oui cela permet de tout réafficher. La seule chose c'est que la sélection apparaît toujours cochée en ligne 4. Est-il possible d'y remédier ?

    Merci

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    avec les différentes routines qui vont suivre, tu devrais pouvoir t'en sortir :

    1 - Routine en flip flop (une fois active, une deuxième fois désactive etc...) qui active ou désactive le filtrage automatique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub toggle
    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 = "ToPoint"
    args1(0).Value = "$C$4"
    dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
    dispatcher.executeDispatch(document, ".uno:DataFilterAutoFilter", "", 0, Array())
    end sub
    2 - Routine pour définir une plage de filtrage automatique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Creer_AutoFiltre()
     Dim maPlage 'Objet DatabaseRange.
     Dim PlageAdresse
     Dim maFeuille 
     Dim monDocument 
     monDocument = ThisComponent
     If NOT monDocument.DatabaseRanges.hasByName("MaPlageDeBd") Then
     maFeuille = ThisComponent.getSheets().getByName("Par_Secteur")
     maPlage = maFeuille.getCellRangeByName("C4:N26")
     PlageAdresse = maPlage.getRangeAddress()
     monDocument.DatabaseRanges.addNewByName("MaPlageDeBd",PlageAdresse)
     End If
     maPlage = monDocument.DatabaseRanges.getByName("MaPlageDeBd")
     maPlage.AutoFilter = True
    End Sub
    3 - Routine pour enlever les filtres sur une feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Enlever_Filtre()
     Dim monDocument As Object
     Dim lesFeuilles as Object
     Dim maFeuille As Object
     Dim descFiltre As Object
     monDocument = ThisComponent
     lesFeuilles = monDocument.Sheets
     maFeuille = lesFeuilles.getByName("Par_Secteur")
     descFiltre = mafeuille.createFilterDescriptor(True)
     maFeuille.filter(descFiltre)
    End Sub
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre à l'essai
    Homme Profil pro
    fonctionnaire utilisant VBA
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : fonctionnaire utilisant VBA
    Secteur : Service public

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Bonjour JP et merci,

    Je vais essayer de combiner cela un peu plus tard dans la journée.

  6. #6
    Membre à l'essai
    Homme Profil pro
    fonctionnaire utilisant VBA
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : fonctionnaire utilisant VBA
    Secteur : Service public

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Bonsoir JP,

    J'ai lancé la routine 3 pour afficher tout. J'ai essayé de supprimer le filtre en lançant la routine 2 (en remplaçant true par false en ligne 14). Enfin, j'essaye de remettre le filtre en lançant la routine 2 (true en ligne 14). Tout s'affiche mais la sélection précédente reste toujours cochée dans le filtre. Je bloque. Merci de m'aider.

    A+

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    tu n'as pas essayé la routine 1 (toggle) ?
    Parce que si tu fais la routine 1 cela t'efface l'autofiltre.
    Puis tu fais la routine 2 (créer autofiltre) cela te recrée l'autofiltre sans sélection particulière.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre à l'essai
    Homme Profil pro
    fonctionnaire utilisant VBA
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : fonctionnaire utilisant VBA
    Secteur : Service public

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Bonjour JP,

    Cela fonctionne. Merci d'avoir porté attention à mes interrogations et de m'avoir permis de progresser.

    Excellente fin d'année

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD7.5] filtre sur plusieurs valeurs
    Par paupiau dans le forum WinDev
    Réponses: 7
    Dernier message: 20/06/2008, 15h12
  2. Filtres sur plusieurs champs/criteres en meme temps
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 35
    Dernier message: 26/03/2008, 14h23
  3. filtre sur plusieurs colonnes en vba
    Par caloumaya dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/05/2007, 14h05
  4. [VBA Excel] Filtre sur plusieurs critères
    Par tazmania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/12/2006, 11h12
  5. [VBA-E]filtre sur plusieurs Critères avec Excel
    Par Diablo_22 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2006, 20h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo