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 :

Macro OBasic sur Filtre : Ajouter / Supprimer un champ supplementaire en conservant les autres


Sujet :

OpenOffice & LibreOffice

  1. #1
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut Macro OBasic sur Filtre : Ajouter / Supprimer un champ supplementaire en conservant les autres
    Bonjour,

    Je cherche une macro Libre Office 6.2.5 pour modifier un filtre existant sur une plage de données.
    Je voudrais ajouter (ou supprimer) un champ supplémentaire en conservant les champs existants.
    J'ai essayé ce code mais il ne fonctionne pas :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Sub FiltrePourPesee
    ' Filtre les non pesés / Désactive le filtrage des non pesés.
    '
     Dim oDescFiltreOld as Object
     Dim oDescFiltreNew as Object
     Dim oChampsFiltres3new(0) As New com.sun.star.sheet.TableFilterField3
     Dim oValeursChampFiltre3(0) As New com.sun.star.sheet.FilterFieldValue
     Dim oFeuille as Object                    
     Dim oPlageDeDonnees as Object
     Dim oChampsFiltres3old as Object
     Dim sNomPlageDeDonnees as String
     Dim iQteChampsFiltres as Integer
     Dim iNumChampFiltre as Integer
     Dim bFiltreNonPesesActif as Boolean
     Dim idx as Integer        'index
     
        ' Définir la plage de données
        oFeuille = ThisComponent.getCurrentController.getActiveSheet()
        sNomPlageDeDonnees = "db_" &  Replace(oFeuille.Name, "-", "_") 
        oPlageDeDonnees = thiscomponent.DatabaseRanges.getByName(sNomPlageDeDonnees)
        ' Tester le filtre 
        If oPlageDeDonnees.AutoFilter = FALSE then
            ' Pas de filtre automatique : mettre un filtre automatique sur la plage de données
            oDescFiltreNew = oPlageDeDonnees.referredCells.createFilterDescriptor(TRUE)    'descripteur vierge
            oDescFiltreNew.ContainsHeader = TRUE
            oDescFiltreNew.UseRegularExpressions = FALSE 
            oPlageDeDonnees.AutoFilter = TRUE
        End If
        ' Descripteur actuel
        oDescFiltreOld = oPlageDeDonnees.referredCells.createFilterDescriptor(FALSE)    'descripteur actuel
        oChampsFiltres3old() = oDescFiltreOld.FilterFields3
        iQteChampsFiltres = Ubound(oChampsFiltres3old)
        ' Nouveau descripteur
        oDescFiltreNew = oPlageDeDonnees.referredCells.createFilterDescriptor(TRUE)        'descripteur vierge
        With oDescFiltreNew            
            .ContainsHeader = TRUE          
            .UseRegularExpressions = FALSE 
        End With
        ' Ajouter / Supprimer le filtrage des 'non pesés' sur la colonne « Tri »    
        If iQteChampsFiltres = -1 then
            ' Aucun filtrage : définir le filtre 'non pesés' de la colonne « Tri »
             Redim Preserve oChampsFiltres3new(0)
            With oChampsFiltres3new(0)
                .Field = 10                    
                .Operator = com.sun.star.sheet.FilterOperator.EQUAL
                With oValeursChampFiltre3(0)
                    .IsNumeric = FALSE
                    .NumericValue = 0            
                    .StringValue = "º"
                End With
                .Values = oValeursChampFiltre3
            End With
            oDescFiltreNew.FilterFields3 = oChampsFiltres3new()    
        Else
            If iQteChampsFiltres = 0 And oChampsFiltres3old(0).Field = 10 then
                 ' Si uniquement filtre 'non pesés' : utiliser le filtre vierge
            Else
                ' Si le filtre a plusieurs champs
                iNumChampFiltre = -1
                For idx = 0 to iQteChampsFiltres
                    If oChampsFiltres3old(idx).Field = 10 then
                        ' Filtre non pesé actif
                        bFiltreNonPesesActif = TRUE
                    Else
                        ' Ajouter les anciens champs à la nouvelle table de champs
                        iNumChampFiltre = iNumChampFiltre + 1
                        Redim Preserve oChampsFiltres3new(iNumChampFiltre)
                           oChampsFiltres3new(iNumChampFiltre) = oChampsFiltres3old(idx)
                    End If
                Next idx
                If Not bFiltreNonPesesActif then
                    ' Si le champ «Tri» n'est pas filtré
                    iNumChampFiltre = iNumChampFiltre + 1
                    Redim Preserve oChampsFiltres3new(iNumChampFiltre)
                    ' Ajouter un filtre 'Non pesés' sur la colonne « Tri »
                    With oChampsFiltres3new(iNumChampFiltre)
                        .Field = 10                    'K : Tri
                        .Operator = com.sun.star.sheet.FilterOperator.EQUAL
                        With oValeursChampFiltre3(0)
                            .IsNumeric = FALSE            
                            .NumericValue = 0            
                            .StringValue = "º"
                        End With
                        .Values = oValeursChampFiltre3
                    End With
                End If 
                oDescFiltreNew.FilterFields3 = oChampsFiltres3new()
            End If  
        End If  
        ' Filtrer
        oPlageDeDonnees.referredCells.filter(oDescFiltreNew)
     
    End Sub
    En pas à pas, le nouveau descripteur semble correct mais le résultat n'est pas celui attendu.

    Le fichier allégé : Pb activer desactiver filtre.ods

    Lorsque je place manuellement un filtre sur une ou plusieurs colonnes, par exemple sur l'année et le club, je voudrais que la macro ci-dessus conserve ce filtre et ajoute un champ sur la colonne 'Tri'.
    Inversement, lorsque la colonne 'Tri' est filtrée, je voudrais supprimer ce 'champfiltre' en conservant celui des autres colonnes.

    EDIT : En fait, la macro fonctionne partiellement, elle ne fonctionne que lorsqu'il n'a qu'une seule valeur par champ filtre. Elle bugue si on filtre avec plusieurs valeurs dans la même colonne (par exemple plusieurs clubs)
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut Comment rétablir tous les critères des filtres ?
    Bonjour le Forum,

    Mon problème n'étant toujours pas résolu, j'ai donc simplifié le problème :
    - Je mets en place manuellement un filtre avec plusieurs critères.
    - la macro est simple :
    - Mémorisation du descripteur de filtre
    - Mise en place d'un descripteur vierge
    - Rétablissement du descripteur mémorisé

    Le problème : seul le premier critère de filtrage est rétabli. Comment rétablir tous les critères ?

    Le Filtre manuel :
    Nom : pb filtre 4.jpg
Affichages : 1103
Taille : 159,5 Ko

    La macro :
    Code LO Basic : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub FiltreProbleme
     Dim oDescFiltreOld as Object
     Dim oDescFiltreNew as Object
     Dim oChampsFiltres3new(0) As New com.sun.star.sheet.TableFilterField3
     Dim oValeursChampFiltre3(0) As New com.sun.star.sheet.FilterFieldValue
     Dim oFeuille as Object                    
     Dim oPlageDeDonnees as Object
     Dim oChampsFiltres3old as Object
     Dim sNomPlageDeDonnees as String
     Dim iQteChampsFiltres as Integer
     
        ' Définir la plage de données
        oFeuille = ThisComponent.getCurrentController.getActiveSheet()
        sNomPlageDeDonnees = "db_" &  Replace(oFeuille.Name, "-", "_") 
        oPlageDeDonnees = thiscomponent.DatabaseRanges.getByName(sNomPlageDeDonnees)
        ' Tester le filtre 
        If oPlageDeDonnees.AutoFilter = FALSE then
            ' Pas de filtre automatique : mettre un filtre automatique sur la plage de données
            oDescFiltreNew = oPlageDeDonnees.referredCells.createFilterDescriptor(TRUE)    'descripteur vierge
            oDescFiltreNew.ContainsHeader = TRUE
            oDescFiltreNew.UseRegularExpressions = FALSE 
            oPlageDeDonnees.AutoFilter = TRUE
        End If
        ' Descripteur actuel
        oDescFiltreOld = oPlageDeDonnees.referredCells.createFilterDescriptor(FALSE)    'descripteur actuel
        oChampsFiltres3old() = oDescFiltreOld.FilterFields3
        ' Nouveau descripteur
        oDescFiltreNew = oPlageDeDonnees.referredCells.createFilterDescriptor(TRUE)        'descripteur vierge
        With oDescFiltreNew            
            .ContainsHeader = TRUE          
            .UseRegularExpressions = FALSE 
        End With
        ' Mettre en place le nouveau filtre
        oPlageDeDonnees.referredCells.filter(oDescFiltreNew)
        ' Rétablir l'ancien filtre
        oPlageDeDonnees.referredCells.filter(oDescFiltreOld)
     
    End Sub

    Le fichier :
    Pb activer desactiver filtre .ods

    oChampsFiltres3old() contient bien la bonne description mais .... ?
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 938
    Points : 9 250
    Points
    9 250
    Par défaut
    hello,
    en utilisant le code de F3K Total trouvé dans un forum allemand ici , cela semble fonctionner :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub S_apply_autofilter  
        dim odatabaserange,oFilterDescriptor as Object
        dim oChampsFiltres3old as Object
        odatabaserange = thiscomponent.databaseranges(0)
        oFilterDescriptor = odatabaserange.FilterDescriptor
        oChampsFiltres3old() =  oFilterDescriptor.FilterFields3
        S_remove_autofilter
        oFilterDescriptor.setFilterFields3(oChampsFiltres3old)
        odatabaserange.refresh
    end sub
     
     
    Sub S_remove_autofilter
        dim odatabaserange,oFilterDescriptor as Object
        odatabaserange = thiscomponent.databaseranges(0)
        oFilterDescriptor = odatabaserange.FilterDescriptor
        oFilterDescriptor.setFilterFields(array())
        odatabaserange.referredcells.Rows.Isvisible = True
        odatabaserange.refresh
    end sub
     
     
    Sub S_refresh_autofilter
        dim odatabaserange as Object
        odatabaseranges = thiscomponent.databaseranges'(0)
        for i = 0 to odatabaseranges.count - 1
            odatabaserange = odatabaseranges(i)
            odatabaserange.refresh
        next i
    end sub
    Si je lance la macro S_apply_autofilter qui efface le filtre au milieu, je me retrouve bien avec le filtrage initial. A noter qu'il utilise toujours le même FilterDescriptor.

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

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut Macro OBasic sur Filtre : Ajouter / Supprimer un champ supplementaire en conservant les autres
    Bonjour,

    Citation Envoyé par jurassic pork Voir le message
    Si je lance la macro S_apply_autofilter qui efface le filtre au milieu, je me retrouve bien avec le filtrage initial. A noter qu'il utilise toujours le même FilterDescriptor.
    Un grand merci !!! . Ça m'a permis de trouver une solution à mon premier post.

    Effectivement, en conservant le même descripteur de filtre (FilterDescriptor) on peut modifier (ou ajouter / supprimer) des champs multicritéres (FilterFields3).
    Dans ce cas, il est indispensable de rafraichir la plage de données (DatabaseRange.Refresh) après chaque modification.

    Voici le code la macro modifiée :
    Code LO Basic : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Sub FiltrePourPesee
    ' Filtre les non pesés / Désactive le filtrage des non pesés.
    '
     Dim oChampsFiltres3new(0) As New com.sun.star.sheet.TableFilterField3        'champs filtres new
     Dim oValeursChampFiltre3(0) As New com.sun.star.sheet.FilterFieldValue        'valeur du champ filtre
     Dim oDescFiltreOld as Object            'descripteur de filtre actuel
     Dim oChampsFiltres3old as Object        'champs filtres old
     Dim oFeuille as Object                    'feuille                
     Dim oPlageDeDonnees as Object            'plage de données
     Dim sNomPlageDeDonnees as String        'nom de la plage de données
     Dim iQteChampsFiltres as Integer        'quantité de champs filtres
     Dim iNumChampFiltre as Integer            'numéro de champ filtre
     Dim bFiltreNonPesesActif as Boolean    'filtre non pesés actif
     Dim idx as Integer                        'index
     
        ' Définir la plage de données
        oFeuille = ThisComponent.getCurrentController.getActiveSheet()
        sNomPlageDeDonnees = "db_" &  Replace(oFeuille.Name, "-", "_") 
        oPlageDeDonnees = thiscomponent.DatabaseRanges.getByName(sNomPlageDeDonnees)
        ' Tester le filtre 
        If oPlageDeDonnees.AutoFilter = FALSE then
            ' Pas de filtre automatique : mettre un filtre automatique sur la plage de données
            oDescFiltreOld = oPlageDeDonnees.referredCells.createFilterDescriptor(TRUE)    'descripteur vierge
            oDescFiltreOld.ContainsHeader = TRUE
            oDescFiltreOld.UseRegularExpressions = FALSE 
            oPlageDeDonnees.AutoFilter = TRUE
        End If
        ' Descripteur actuel
        oDescFiltreOld = oPlageDeDonnees.FilterDescriptor    
        oChampsFiltres3old() = oDescFiltreOld.FilterFields3
        iQteChampsFiltres = Ubound(oChampsFiltres3old)
        ' Effacer le filtre
        oDescFiltreOld.setFilterFields(array())
        oPlageDeDonnees.referredcells.Rows.Isvisible = True
        oPlageDeDonnees.refresh
        ' Nouveaux champs du filtre
        If iQteChampsFiltres = -1 then
            ' Aucun filtrage : définir le filtre 'non pesés' de la colonne « Tri »
             Redim Preserve oChampsFiltres3new(0)
            With oChampsFiltres3new(0)
                .Field = 10                    
                .Operator = com.sun.star.sheet.FilterOperator.EQUAL
                With oValeursChampFiltre3(0)
                    .IsNumeric = FALSE
                    .NumericValue = 0            
                    .StringValue = "º"
                End With
                .Values = oValeursChampFiltre3
            End With
            ' Appliquer le filtre
               oDescFiltreOld.setFilterFields3(oChampsFiltres3new)
               oPlageDeDonnees.refresh          
        Else
            If iQteChampsFiltres = 0 And oChampsFiltres3old(0).Field = 10 then
                 ' Si uniquement filtre 'non pesés' : utiliser le filtre effacé
            Else
                ' Si le filtre a plusieurs champs
                iNumChampFiltre = -1
                For idx = 0 to iQteChampsFiltres
                    If oChampsFiltres3old(idx).Field = 10 then
                        ' Filtre non pesé actif
                        bFiltreNonPesesActif = TRUE
                    Else
                        ' Ajouter les anciens champs à la nouvelle table de champs
                        iNumChampFiltre = iNumChampFiltre + 1
                        Redim Preserve oChampsFiltres3new(iNumChampFiltre)
                           oChampsFiltres3new(iNumChampFiltre) = oChampsFiltres3old(idx)
                    End If
                Next idx
                If Not bFiltreNonPesesActif then
                    ' Si le champ «Tri» n'est pas filtré
                    iNumChampFiltre = iNumChampFiltre + 1
                    Redim Preserve oChampsFiltres3new(iNumChampFiltre)
                    ' Ajouter un filtre 'Non pesés' sur la colonne « Tri »
                    With oChampsFiltres3new(iNumChampFiltre)
                        .Field = 10                    'K : Tri
                        .Operator = com.sun.star.sheet.FilterOperator.EQUAL
                        With oValeursChampFiltre3(0)
                            .IsNumeric = FALSE            
                            .NumericValue = 0            
                            .StringValue = "º"
                        End With
                        .Values = oValeursChampFiltre3
                    End With
                End If 
                ' Appliquer le filtre
                oDescFiltreOld.setFilterFields3(oChampsFiltres3new)
                oPlageDeDonnees.refresh          
            End If
        End If  
     
    End Sub

    Et le fichier corrigé : Pb activer desactiver filtre 1.ods

    Je passe ce post en Résolu, bien que je ne comprenne pourquoi je ne parviens pas au même résultat en utilisant un nouveau descripteur de filtre.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Ce n'est plus Résolu !

    Je n'avais pas eu besoin de cette macro depuis 2 ans (interruption cause COVID)
    Ce qui fonctionait très bien avec la version 6.2.5 ne fonctionne plus avec la version 7.3.7.2
    C'est curieux, les champs sont correctement définis mais SetFilterFields3 ne fonctionne pas

    Patrice
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  6. #6
    Candidat au Club
    Homme Profil pro
    Retired Software Developer
    Inscrit en
    Février 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Retired Software Developer

    Informations forums :
    Inscription : Février 2023
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Avez-vous trouvé une solution?
    Patrice, excusez mon français, ce texte a été traduit de l'anglais par Google. J'ai exactement le même problème que vous signalez ici : une macro Calc qui fonctionnait bien sous LibreOffice v7.1 mais échoue sous v7.4. Je suis d'accord que le problème est lié à un changement dans TableFilterField3.

    Avez-vous découvert une solution ? Je ne trouve aucune information utile sur TableFIlterField3 sur Internet. Merci pour toute aide.

    Charly

  7. #7
    Candidat au Club
    Homme Profil pro
    Retired Software Developer
    Inscrit en
    Février 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Retired Software Developer

    Informations forums :
    Inscription : Février 2023
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Voici une solution
    Apparemment, quelque temps après LibreOffice la v7.1, la définition de com.sun.star.sheet.FilterFieldValue a été modifiée pour ajouter deux nouvelles propriétés : FilterType et ColorValue (tous deux LONG INTEGER). En plus de définir correctement la propriété IsNumeric, vous DEVEZ également spécifier FilterType comme com.sun.star.sheet.FilterFieldType.NUMERIC ou com.sun.star.sheet.FilterFieldType.STRING. Quand j'ai fait cela, mon filtre a fonctionné sans autres changements. Voir this
    link pour l'énumération de FilterType. Je n'ai pas poursuivi le filtrage par couleur.

    J'espère que ceci vous aide.

    Charly

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Citation Envoyé par wrighch Voir le message
    Apparemment, quelque temps après LibreOffice la v7.1, la définition de com.sun.star.sheet.FilterFieldValue a été modifiée pour ajouter deux nouvelles propriétés : FilterType et ColorValue (tous deux LONG INTEGER). En plus de définir correctement la propriété IsNumeric, vous DEVEZ également spécifier FilterType comme com.sun.star.sheet.FilterFieldType.NUMERIC ou com.sun.star.sheet.FilterFieldType.STRING. Quand j'ai fait cela, mon filtre a fonctionné sans autres changements. Voir this
    link pour l'énumération de FilterType. Je n'ai pas poursuivi le filtrage par couleur.

    J'espère que ceci vous aide.

    Charly
    Merci, cette information m'a permis de ré-utiliser mon ancien filtre de type TableFilterField3 que j'ai abandonné.
    L'inconvenient, c'est que lorsqu'on charger la table d'un filtre existant, FilterType est toujour défini comme NUMERIC même lorsque IsNumeric = FALSE.
    Il faut donc balayer toutes les valeur pour redéfinir correctement FilterType.
    J'ai utilisé une boucle du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ffy = ffx.values
    nbv = Ubound(ffy)
    For ix2 = 0 to nbv
        If ffy(ix2).IsNumeric = FALSE then
            ffy(ix2).FilterType = com.sun.star.sheet.FilterFieldType.STRING
        End If
    Next ix2
    ffx.values = ffy
    Encore merci, cordialement

    Patrice
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

Discussions similaires

  1. Ajouter + supprimer - des champs dans un formulaire
    Par tmedtcom dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/05/2012, 11h20
  2. Réponses: 1
    Dernier message: 10/08/2011, 11h33
  3. Réponses: 4
    Dernier message: 08/06/2011, 15h43
  4. Comment ajouter un enregistrement à une table et modifier les autres
    Par Pepitos dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 20/03/2007, 19h53
  5. Réponses: 4
    Dernier message: 11/05/2006, 17h23

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