Changer ordre alphabétique d'un filtre

Bonjour à tous,

J'ai un problème avec Excel.

J'ai un TCD avec un filtre. Les éléments du filtre sont rangés par ordre alphabétique par défaut.

Comment-puis-je faire?

J'ai illustré avec un exemple (voir pièce jointe) mon problème?

Je voudrai que dans le filtre il y ai d'abord Dog puis Cat.

Merci d'avance à tous ceux qui pourront m'aider


*Comment puis-je faire pour enlever cette ordre alphabétique et imposer un ordre souhaité?

52test-macro.xlsx (15.03 Ko)

Hello,

Alors j'ai une solution qui peut te dépanner, mais je pense qu'un expert sur le forum va trouver mieux.

L'idée est d'ecrire Dog_1, Cat_2, Lion_3.

Et de faire dans les options du TCD Trier par ordre de source de données.

Mais tu veux peut-être pas que les valeurs s'affichent avec _1,_2,_3 ?

Voila pour le moment ce que je peux te proposer

Merci d'avoir quand même pris le temps de me répondre.

Malheureusement, je ne peux pas contourner mon problème avec votre solution.

Le fait est que les valeurs "Dog", "Cat" viennent d'un export d'une base de données. Or, je ne peux pas changer les libellés dans la base.

Il m'est nécessaire et indispensable de conserver les noms comme tel.

J'imagine ça aurait été trop beau pour être vrai.

Après j'ai recrée de zero un tcd et j'ai bien l'ordre que tu souhaites. Sinon a chaque refesh de ta base tu crée un nouveau tcd de zéro pour avoir le filtre dans l’ordre de la source de donnée.

30sort-filter.xlsx (17.24 Ko)

Re,

Oui je vois qu'effectivement dans votre fichier l'ordre est "respecté".

Par contre, étant que mon tableau de données et le tableau TCD sont construits à partir d'une macro.

J'aimerai pouvoir également imposé l'ordre par défaut de mon filtre via une commande VB.

Je ne sais pas si c'est assez clair ce que je veux dire...

Merci d'avance pour votre aide.

Bonjour,

quand tu crées ton TCD commence par mettre Animals dans Etiquettes de ligne.

Clic-droit sur une étiquette, 'Trier / Options de tris supplémentaire...' choisir 'Manuel' puis bouton 'Autres options...', décocher 'Tri automatique'. valider.

Sur le TCD cliquer-glisser Dog à sa place.

Emmener le champ Animal à sa place dans 'Filtre du rapport'

eric

PS : je viens de voir que le faisais par macro, ça aurait été bien de le dire tout de suite.

Bonjour @eriiic

PS : je viens de voir que le faisais par macro, ça aurait été bien de le dire tout de suite.

Veuillez-m 'excuser...

L'enregistreur de macro te dit :

    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Animal"). _
        PivotItems("Lion").Position = 2

Remet les tous en place par une boucle

eric

Bien, merci.

Je vais tester avec mes "vraies" données.

Je vous tiens au courant...

ça marche je suis intéressé par le sujet

Bonjour,

Une proposition à étudier.

Clic droit sur le nom de la feuille TCD ; Visualiser le code.

Cdlt.

Je suis de retour...

@eriiic (tout court):

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Animal"). _

PivotItems("Lion").Position = 2

J'ai testé mais une erreur se déclenche "Impossible de lire la propriété PivotTable de la classe Worksheet"

@Jean-Eric:

La macro fonctionne. Toutefois, je souhaite écrire mes lignes de commande dans un module et non dans une feuille.

Cela ne fonctionne pas, si je copie dans un module et que j'enlève le "private".

Aussi, j'ai joint la macro TCD et la ligne de commande (inspiré par la réponse d'eriiic).

Pourriez-vous me dire pourquoi cela ne fonctionne pas svp? Qu'est-ce que je devrai changer?

Merci d'avance pour votre aide.

Hello,

J'ai le message d'erreur suivant quand je lance ma macro, tu parlais de celui la?

Si j'enleve la derniére ligne ça fonctionne comme tu veux je pense

'        ActiveSheet.PivotTables("TCD_1").PivotFields("Poste"). _
'        PivotItems("Travaux").Position = 3
capture filter

Re,

Si j’enlève la dernière ligne ça fonctionne comme tu veux je pense

Effectivement, le TCD se construit (il n'y avait pas de problème là-dessus) mais justement c'est la dernière ligne que j'ai ajouté et qui "impose" un ordre pour le contenu du filtre.

Donc si j'enlève la dernière ligne alors les valeurs du filtres sont rangées par ordre alphabétique.

Or précédemment, @eriiic nous avez proposé une ligne de commande qu'il a obtenu en utilisant l'enregistreur de macro.

Je me suis donc appuyé dessus pour modifier ma macro TCD et ajouter ces nouvelles lignes de commande. Dans lesquelles, on choisit la "position" du contenu du filtre.

C'est pourquoi, si j'enlève la dernière ligne alors mon problème n'intervient pas du tout dans ma macro.

En espérant avoir été clair dans mes explications.

Merci d'avance pour votre aide.

Mais ne fait pas une compil des 2 sans chercher à comprendre chaque proposition qui sont indépendantes.

Je te montrais la ligne à mettre dans une boucle pour trier dans l'ordre que tu veux. Toi tu l'ajoutes toutes seule à la fin d'une autre proposition. Ca n'a pas de sens...

Jean-Eric (plus courageux) t'a fait un truc plus complet. S'il manque qq chose regarde, analyse, et si tu ne trouves pas demande en complétant tes explications.

eric

Bonsoir,

A tester.

Cdlt.

Option Explicit
'Option Private Module

Public Sub CreatePivotTables()
' Déclaration des variables
Dim WB As Workbook
Dim WSDATA As Worksheet, WSPT As Worksheet
Dim LO As ListObject
Dim PTCACHE As PivotCache
Dim PT As PivotTable
Dim lastCol As Long, lastRow As Long, I As Long
Dim V As Variant

    ' Optimisation procédure
    '--------------------------------------------------------------------------
    Application.ScreenUpdating = False

    ' Initialisation des variables
    '--------------------------------------------------------------------------
    Set WB = ActiveWorkbook
    Set WSDATA = WB.Worksheets("Base")
    Set LO = WSDATA.ListObjects(1)
    Set WSPT = WB.Worksheets("TCDs")
    V = Array("Ger.", "Entretien", "Travaux") 
   ' Suppression TCD
    On Error Resume Next
    For Each PT In WSPT.PivotTables
        PT.TableRange2.Clear
    Next PT
    On Error GoTo 0

    ' Création cache TCDs
    '--------------------------------------------------------------------------
    Set PTCACHE = WB.PivotCaches.Create _
                  (SourceType:=xlDatabase, _
                   SourceData:=LO.Range)

    ' Création TCD 1
    '--------------------------------------------------------------------------
    Set PT = PTCACHE.CreatePivotTable _
             (TableDestination:=WSPT.Cells(4, 1), _
              TableName:="TCD_1")
    With PT
        .ManualUpdate = True
        .AddFields RowFields:="Code - Nom du groupe", _
                   ColumnFields:="Nature", _
                   PageFields:="Poste"
        With .PivotFields("Réalisé (en €)")
            .Orientation = xlDataField
            .Function = xlSum
            .NumberFormat = "#,##0;[Red](#,##0);"
            .Caption = "Réalisé (en €) "
        End With
        ' Mise en forme TCD
        .RowAxisLayout xlTabularRow
        .TableStyle2 = "PivotStyleMedium9"
        .ManualUpdate = False
       .ManualUpdate = True
        For I = 0 To UBound(V)
            .PivotFields("Poste").PivotItems(V(I)).Position = I + 1
        Next I
        .ManualUpdate = False 
    End With

    ' Restitution TCDs
    '--------------------------------------------------------------------------
    With WSPT
        .Activate
        .[B1].Select
    End With

    ' RAZ variables
    '--------------------------------------------------------------------------
    Set LO = Nothing
    Set PT = Nothing: Set PTCACHE = Nothing
    Set WSPT = Nothing: Set WSDATA = Nothing
    Set WB = Nothing

End Sub

Bonjour @Jean-Eric,

Cela fonctionne parfaitement!

Je vous en suis très reconnaissant pour votre précieuse aide.

Merci beaucoup!

Bien cordialement-

Rechercher des sujets similaires à "changer ordre alphabetique filtre"