Récuperer tris de colonne sur Excel

Bonjour.

J'ai un problème sur Excel en VBA.

J'ai lu la doc (F1), fait pas mal de tests mais je n'arrive toujours pas à trouver sur quelle colonne a été fait un tri.

Je voudrais savoir s'il est possible de récupérer la ou les colonnes sur lesquelles sont faites un tri (par filtre ou par la fonction tri)

Le problème est le suivant : le classeur est dans un état X fixé par l'utilisateur (état variable : avec des filtres ou non, des tris ou non).

L'utilisateur lance une macro qui met le classeur dans un état Y (un tri particulier en général) et je voudrais qu'à la fin de la macro je puisse remettre le classeur à l'état X (que je ne connais pas puisqu'il est variable).

C'est pour ça que je voudrais récupérer les infos des filtres/tris (si possible).

J'ai trouvé comment récupérer les critères de filtres (voir code) mais je ne trouve rien sur les tris

Option Explicit

Public Sub BalayeFiltre()
    Dim I As Long
    Dim Wks As Worksheet
    Dim FieldStatus() As String
    Dim Critere() 'As String
    Dim Operateur() As Boolean
    Dim Critere2() 'As String

    Set Wks = Worksheets(1)
    If Not Wks.AutoFilterMode Then Range("A1").AutoFilter

    'tableau pour récuperer l'état (actif ou non) du filtre)
    ReDim FieldStatus(1 To Wks.AutoFilter.Filters.Count)
    'tableaux pour récuperer les critères et état d'operator de chaque colonne
    ReDim Critere(1 To Wks.AutoFilter.Filters.Count)
    ReDim Operateur(1 To Wks.AutoFilter.Filters.Count)
    ReDim Critere2(1 To Wks.AutoFilter.Filters.Count)

    'balayage des filtres/colonnes
    With Wks.AutoFilter
        For I = 1 To Wks.AutoFilter.Filters.Count
            If .Filters(I).On = True Then
                FieldStatus(I) = "activé"
                Critere(I) = .Filters(I).Criteria1
                If .Filters(I).Operator Then
                    Operateur(I) = .Filters(I).Operator
                    Critere2(I) = .Filters(I).Criteria2
                Else
                    Operateur(I) = False
                    Critere2(I) = ""
                End If
            Else
                FieldStatus(I) = "désactivé"
            End If
        Next
    End With
End Sub

Grâce aux tableaux, je sais comment sont définis les critères et je peux les remettre comme ils étaient, mais je n'ai rien sur les tris.

Je suis bloqué, j'ai fait la doc en long et en large et je ne trouve rien.

Merci de m'avoir lu, je vous serais très reconnaissant de m'aider.

Bonne journée.

Est-il possible d'avoir un bout de fichier ? Pour effectuer quelques tests ?

Si tu veux, mais le fichier n'a pas d'importance : je veux juste savoir pour une feuille quel est le tri effectué (par quelle colonne le tri est fait).

Voila un fichier opérationnel (je l'utilise pour faire mes tests). Le fichier cible est beaucoup trop gros et ça n'avancerait à rien.

erohares a écrit :

L'utilisateur lance une macro qui met le classeur dans un état Y (un tri particulier en général) et je voudrais qu'à la fin de la macro je puisse remettre le classeur à l'état X (que je ne connais pas puisqu'il est variable).

Pourquoi ne pas simplement copier la feuille à l'état X, puis la restaurer à la fin de la macro ?

Parce que les données sont modifiées.

Une solution serait de travailler avec le tableau Excel mis dans un tableau de variables, mais je pose cette question pour éviter d'avoir à tout re-coder.

C'est bizarre, ça a l'air bête comme question, mais je ne trouve de réponse nulle part :s. Il se peut que .sort ne soit qu'une méthode et qu'on ne puisse rien récupérer... la doc Excel n'est pas très claire quand même je trouve !

erohares a écrit :

Parce que les données sont modifiées.

Les deux états X ne sont donc pas les mêmes ?

Il faut que tu soit le plus précis possible !

Merci pour tes réponses et ta rapidité.

Oui c'est vrai que je n'ai pas été clair sur ce point là.

Le classeur est une nomenclature. Les données sont importées par des programmes et exportées vers d'autres. Il y a une macro qui exporte des données où je fais des tris (pour comparer les lignes et en fusionner éventuellement). Le client voudrais conserver les tris/filtres qu'il a appliqué même après lancement de la macro, hors je suis presque obligé de désactiver les filtres et faire mes propres tris. C'est pour ça que je veux récupérer toutes les infos des filtres pour remettre les tris/filtres mis en place avant le lancement de la macro.

Donc quand je parle d'état, c'est surtout l'état des filtres/tris

Insère une colonne supplémentaire remplie avec une série incrémentée au pas de 1 qui sera triée avec les autres colonnes. En fin d'utilisation, le tri sera réalisé sur cette colonne insérée.

Evite de fusionner des cellules pour ne pas avoir de résultat surprenant lors des tris.

screen 1 screen 2

C'est une solution qui a le mérite de fonctionner.

Merci

Rechercher des sujets similaires à "recuperer tris colonne"