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

Macros et VBA Excel Discussion :

Sauvegarde et restitution de filtres sur 3 onglets différents


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut Sauvegarde et restitution de filtres sur 3 onglets différents
    Bonjour,

    je fais appel à vous car je ne parviens pas à utiliser ce code retrouvé et qui me semble être opportun pour ce que je souhaite faire

    Comment faire pour appeler ces méthodes et restituer correctement les informations ?

    Par avance merci à vous !

    un humble néophyte

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ' Sub:      SaveListObjectFilters
    ' Purpose:  Save filter on worksheet
    ' Returns:  wks.AutoFilterMode when function entered
    ' Source: http://stackoverflow.com/questions/9489126/in-excel-vba-how-do-i-save-restore-a-user-defined-filter
    '
    ' Arguments:
    '   [Name]      [Type]  [Description]
    '   wks         I/P     Worksheet that filter may reside on
    '   FilterRange O/P     Range on which filter is applied as string; "" if no filter
    '   FilterCache O/P     Variant dynamic array in which to save filter
    '
    ' Author:   Based on MS Excel AutoFilter Object help file
    '
    ' Modifications:
    ' 2006/12/11 Phil Spencer: Adapted as general purpose routine
    ' 2007/03/23 PJS: Now turns off .AutoFilterMode
    ' 2013/03/13 PJS: Initial mods for XL14, which has more operators
    ' 2013/05/31 P.H.: Changed to save list-object filters
     
    Function SaveListObjectFilters(lo As ListObject, FilterCache()) As Boolean
    Dim ii As Long
     
    filterRange = ""
        With lo.AutoFilter
            filterRange = .Range.Address
            With .Filters
                ReDim FilterCache(1 To .Count, 1 To 3)
                For ii = 1 To .Count
                    With .Item(ii)
                        If .On Then
    #If False Then ' XL11 code
                            FilterCache(ii, 1) = .Criteria1
                            If .Operator Then
                                FilterCache(ii, 2) = .Operator
                                FilterCache(ii, 3) = .Criteria2
                            End If
    #Else   ' first pass XL14
                            Select Case .Operator
     
                            Case 1, 2   'xlAnd, xlOr
                                FilterCache(ii, 1) = .Criteria1
                                FilterCache(ii, 2) = .Operator
                                FilterCache(ii, 3) = .Criteria2
     
                            Case 0, 3 To 7 ' no operator, xlTop10Items, _
    xlBottom10Items, xlTop10Percent, xlBottom10Percent, xlFilterValues
                                FilterCache(ii, 1) = .Criteria1
                                FilterCache(ii, 2) = .Operator
     
                            Case Else    ' These are not correctly restored; there's someting in Criteria1 but can't save it.
                                FilterCache(ii, 2) = .Operator
                                ' FilterCache(ii, 1) = .Criteria1   ' <-- Generates an error
                                ' No error in next statement, but couldn't do restore operation
                                ' Set FilterCache(ii, 1) = .Criteria1
     
                            End Select
    #End If
                        End If
                    End With ' .Item(ii)
                Next
            End With ' .Filters
        End With ' wks.AutoFilter
    End Function
     
     
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ' Sub:      RestoreListObjectFilters
    ' Purpose:  Restore filter on listobject
    ' Source: http://stackoverflow.com/questions/9489126/in-excel-vba-how-do-i-save-restore-a-user-defined-filter
    ' Arguments:
    '   [Name]      [Type]  [Description]
    '   wks         I/P     Worksheet that filter resides on
    '   FilterRange I/P     Range on which filter is applied
    '   FilterCache I/P     Variant dynamic array containing saved filter
    '
    ' Author:   Based on MS Excel AutoFilter Object help file
    '
    ' Modifications:
    ' 2006/12/11 Phil Spencer: Adapted as general purpose routine
    ' 2013/03/13 PJS: Initial mods for XL14, which has more operators
    ' 2013/05/31 P.H.: Changed to restore list-object filters
    '
    ' Comments:
    '----------------------------
    Sub RestoreListObjectFilters(lo As ListObject, FilterCache())
    Dim col As Long
     
    If lo.Range.Address <> "" Then
        For col = 1 To UBound(FilterCache(), 1)
     
    #If False Then  ' XL11
            If Not IsEmpty(FilterCache(col, 1)) Then
                If FilterCache(col, 2) Then
                    lo.AutoFilter field:=col, _
                        Criteria1:=FilterCache(col, 1), _
                            Operator:=FilterCache(col, 2), _
                        Criteria2:=FilterCache(col, 3)
                Else
                    lo.AutoFilter field:=col, _
                        Criteria1:=FilterCache(col, 1)
                End If
            End If
    #Else
     
            If Not IsEmpty(FilterCache(col, 2)) Then
                Select Case FilterCache(col, 2)
     
                Case 0  ' no operator
                    lo.Range.AutoFilter field:=col, _
                        Criteria1:=FilterCache(col, 1) ' Do NOT reload 'Operator'
     
                Case 1, 2   'xlAnd, xlOr
                    lo.Range.AutoFilter field:=col, _
                        Criteria1:=FilterCache(col, 1), _
                        Operator:=FilterCache(col, 2), _
                        Criteria2:=FilterCache(col, 3)
     
                Case 3 To 6 ' xlTop10Items, xlBottom10Items, xlTop10Percent,     xlBottom10Percent
    #If True Then
                    lo.Range.AutoFilter field:=col, _
                        Criteria1:=FilterCache(col, 1) ' Do NOT reload 'Operator' , it doesn't work
                    ' wks.AutoFilter.Filters.Item(col).Operator = FilterCache(col, 2)
    #Else ' Trying to restore Operator as well as Criteria ..
                    ' Including the 'Operator:=' arguement leads to error.
                    ' Criteria1 is expressed as if for a FALSE .Operator
                    lo.Range.AutoFilter field:=col, _
                        Criteria1:=FilterCache(col, 1), _
                        Operator:=FilterCache(col, 2)
    #End If
     
                Case 7  'xlFilterValues
                    lo.Range.AutoFilter field:=col, _
                        Criteria1:=FilterCache(col, 1), _
                        Operator:=FilterCache(col, 2)
     
    #If False Then ' Switch on filters on cell formats
    ' These statements restore the filter, but cannot reset the pass Criteria, so the filter hides all data.
    ' Leave it off instead.
                Case Else   ' (Various filters on data format)
                    lo.RangeAutoFilter field:=col, _
                        Operator:=FilterCache(col, 2)
    #End If ' Switch on filters on cell formats
     
                End Select
            End If
     
    #End If     ' XL11 / XL14
        Next col
    End If
    End Sub

  2. #2
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Bonsoir,

    Si ton classeur ne comporte pas de tableau "Mis sous forme de tableau", pourquoi ne pas utiliser l'affichage personnalisé ? (Onglet Affichage... Affichage personnalisé, Ajouter etc...) que tu pourras appeler à la demande en conservant les paramètres de Mise en page, filtre, ligne et colonnes masquées ?

    Ce que j'en dis est peut-être à côté de la demande, mais je pose la question tout de même ?

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 558
    Par défaut
    Bonjour

    A noter que les vues prennent en compte l'ensemble des onglets : si chaque onglet doit pouvoir être filtré-défiltré indépendamment des autres, ce n'est pas facilement utilisable.

    Quand à la question de Nikimizi c'est le grand flou :"...ce code retrouvé et qui me semble être opportun pour ce que je souhaite faire" qui ne nous dit rien de ce qu'il a et de ce qu'il veut obtenir...

    A noter que ce code est destiné aux listes mises sous forme de tableaux...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Bonjour,

    j'ai conscience que ce n'était pas forcément clair (pensant que le titre suffirait)

    J'ai un fichier qui possède 4 onglets :

    - 3 premiers des données
    - 4eme vient consolider les 3 premiers onglets en 1 seul. Cette consolidation automatisée écrase tous filtres précédemment apposés.

    Je souhaite donc intercaler la possibilité de sauvegarder le placement et les filtres appliqués (quelque soit l'onglet), laisser tourner la macro existante (qui supprime ces filtres pour diverses raisons de recopie) et réappliquer les filtres apposés sur les 3 onglets pour ne pas avoir à le refaire à chaque fois qu'une reconsolidation serait lancée.

    J'espère que c'est bien plus clair comme cela ?

    ma question pouvant également être encore plus simple et axé code :

    Comment appeler correctement : SaveListObjectFilters et RestoreListObjectFilters au vu du code trouvé ? (si vous aviez des exemples, ce serait super ^^)

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Que signifie pour toi la consolidation des trois onglets ?
    La simple copie des données des trois onglets à la suite l'une des autres dans le quatrième onglet ou bien une consolidation telle quelle est conçue dans l'outil Consolidation d'excel (Commande Consolider du groupe Outils de données) de l'onglet [Données] et dans ce dernier cas est-ce une consolidation par catégorie ou bien par position ?
    Concernant les filtres.
    Imaginons que les critères des filtres soient totalement différents dans les trois onglets, comment conçois-tu le filtre du quatrième onglet ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    une recopie basique à la suite afin de n'avoir plus qu'un seul tableau au lieu des 3 splittés des premiers onglets.

    Le but de l'onglet 4 de consolidation est d'avoir une vision complète sur lequel il existe GCD et TCD divers. Aucun besoin de filtre sur ce 4eme onglet.

    Ma problématique est vraiment de pouvoir garder les filtres apposés sur les 3 premiers (sauvegarder avant / traitement de recopie du 4eme / Ré-application des filtres des 3 premiers onglets).

    Edit : pour te répondre il s'agit bien d'une recopie par position

Discussions similaires

  1. Problème de lancement avec un TreeView sur un onglet différent
    Par CEREFX dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/02/2016, 20h39
  2. Sélection d'un filtre sur un onglet
    Par ElPibeOro dans le forum QlikView
    Réponses: 1
    Dernier message: 08/09/2015, 10h27
  3. Filtre sur onglet d'un rapport
    Par denils dans le forum Deski
    Réponses: 4
    Dernier message: 29/09/2009, 09h36
  4. Réponses: 4
    Dernier message: 23/03/2009, 11h46
  5. Réponses: 6
    Dernier message: 22/05/2008, 12h34

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