macro calc

Bonjour

Voici une nouvelle question envoyée à l'aide du formulaire de demande d'aide (http://fr.libreoffice.org/get-help/poser-une-question/).
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que le demandeur reçoive une copie de votre réponse.

Email: - christian.rabiller@free.fr
Sujet: - macro calc
Question: - Bonjour,
J'avais inclus dans mon document openoffice la macro suivante qui ne fonctionne pas sous libreoffice.
Pouvez-vous m'indiquer les changements qui ont été opérés car aucune erreur n'apparait, mais le filtre n'est pas réalisé.
Merci de votre attention.
option explicit

    sub PysFilter

    Const PysNumFeuille = 0 'Numérotation commence à zéro => 1ère feuille
    Const PysColDeb = 0 'Ibid.
    Const PysColFin = 3
    Const PysLigDeb = 0
    Const PysLigFin = 5

    dim PysFeuille as object, PysPlage as object, PysFiltre as object, PysDataRange as object, i as integer
    dim PysChampFiltre(0) As New com.sun.star.sheet.TableFilterField

    PysFeuille = thisComponent.Sheets.getByIndex(PysNumFeuille) 'Accès à la feuille dont le numéro est en constante
    PysPlage = PysFeuille.getCellRangeByPosition(PysColDeb,PysLigDeb,PysColFin,PysLigFin) 'Accès à la plage concernée

    'Ci-dessous réinitialise le filtre éventuellement déjà posé sur la plage
    PysFiltre= PysPlage.createFilterDescriptor(true)
    PysPlage.filter(PysFiltre)

    for each PysDataRange in thiscomponent.DatabaseRanges 'Boucle sur toutes les plages de données
                                                       'Si porte sur la même plage
       if PysDataRange.DataArea.Sheet = PysNumFeuille and _
          PysDataRange.DataArea.StartColumn = PysColDeb and _
          PysDataRange.DataArea.EndColumn = PysColFin and _
          PysDataRange.DataArea.StartRow = PysLigDeb and _
          PysDataRange.DataArea.EndRow = PysLigFin then
             PysFiltre = PysDataRange.FilterDescriptor 'Accès aux paramètres du filtre
             with PysFiltre 'Les paramètres généraux
                .ContainsHeader = true 'La première ligne = en-tête de colonnes
                .CopyOutputData = false 'Ne copie pas le résultat ailleurs
                .IsCaseSensitive = false 'Ne pas respecter la casse
                .UseRegularExpressions = false 'N'utilise pas d'expressions régulières
             end with

    'Ci-dessous les paramètres par colonne (ici une seule colonne de filtre)
             PysChampFiltre(0).Field = 1 'Le nom est en colonne B
             PysChampFiltre(0).Operator = com.sun.star.sheet.FilterOperator.EQUAL
             PysChampFiltre(0).StringValue = "BERTHO"
             PysFiltre.setFilterFields(PysChampFiltre()) 'Passe les param. "colonnes" au filtre
             PysPlage.filter(PysFiltre) 'Applique le filtre
       end if
    next PysDataRange

    end sub

Bonjour

J'avais inclus dans mon document openoffice la macro suivante
qui ne fonctionne pas sous libreoffice.

S'il n'y a pas d'erreur, sans disposer du classeur je dirais qu'il
manque la définition de la plage de base de données :

Sélectionner toute la plage puis faire Données> Définir la plage,
donner un nom quelconque.

Ce programme a ceci de particulier qu'on part des positions de la
plage (lig/col). Une autre approche est d'accéder directement à
une plage si on connait son nom. Voir :
https://wiki.documentfoundation.org/Macros/Calc/008/fr

Si tu réponds, merci de penser à utiliser la fonction "répondre à tous"
du logiciel de courrier de façon que la liste reçoive la réponse.

Cordialement
Pierre-Yves

Suite...

S'il n'y a pas d'erreur, sans disposer du classeur je dirais qu'il
manque la définition de la plage de base de données

Je m'aperçois n'avoir pas donné d'explication...

Du temps d'OOo, Calc ne supportait qu'un autofiltre par document, causant
la disparition des autofiltres créés avant, même sur des feuilles différentes
(à moins que des plages de base de données n'aient été créés auparavant).

Concrètement, lors de la création d'un auto-filtre, Calc créait une
"plage" invisible nommée "unnamed". Le programme que tu utilisait
pouvait donc trouver au moins cette plage.

La limitation a été levée dans la version 3.4 de LibreOffice.
Toutefois désormais la création d'un auto-filtre n'engendre pas de
création de plage de données "fantôme". Il faut la créer explicitement
pour que le programme fonctionne.

Si tu réponds, merci de penser à utiliser la fonction "répondre à tous"
du logiciel de courrier de façon que la liste reçoive la réponse.

Cordialement
Pierre-Yves

Bonsoir,

Merci de ces précisions.
Dés demain je passe à la mise en place du correctif sur mes documents qui utilisaient des filtres.

Cordialement,
Christian Rabiller