Procédure de tri selon critère

Bonjour le Forum

J'ai une procédure de tri à réaliser qui dépasse mes capacités VBA sur un fichier, je viens donc faire appel à votre génie

Le fichier (environ 10 000 lignes) contient des projets qui sont caractérisés par :

  • un numéro de projet
  • un coût
  • une taille
  • une année

J'aimerais pouvoir les trier selon un de ces critères et dans un ordre particulier (croissant ou décroissant).

Le problème est que chaque projet représente plusieurs lignes (ici 2), il faut donc déplacer des "blocs" de lignes

Je pensais à une procédure de type : def tri (numéro première ligne, nb de lignes par projet (=2 ici), critères tri, croissant/décroissant)

Le fichier en PJ est plus parlant et commenté...

je reste disponible si jamais j'ai oublié des informations

Si jamais vous avez des pistes, je suis preneur !

Merci d'avance

Mav'

53procedure-tri.xlsx (11.41 Ko)

Bonsoir,

Ci-joint une proposition à tester.

Principe : ajout de colonnes complémentaires, permettant de trier :

> les informations des 2 lignes sont dupliquées, et on a une clé composée du n° de projet préfixé par A ou B, permettant de conserver les 2 lignes d'un projet ensemble.

Quel que soit le tri, on tri ensuite par n° de projet et par clé.

Exemple :

tri par année croissant => tri fait par année croissant, par projet croisant et par clé.

on obtient ainsi :

2012, projet 7, clé A7 (1ère ligne du projet)

2012, projet 7, clé B7 (1ème ligne du projet)

2012, projet 8 , clé A8

2012, projet 8 , clé B8

etc

Les colonnes complémentaires sont alimentées via le bouton "Init" (à faire une seule fois)

Ensuite, les données sont triées selon le choix (n° projet, coût, taille, date) en cliquant sur un des quatre boutons.

Un nouveau clic sur le bouton inverse le sens de tri.

NB : les colonnes complémentaires peuvent être masquées.

Bouben

Bonjour,

Une proposition Power Query pour structurer les données (mise sous forme de tableau) et VBA pour les différents tris.

A te relire.

Cdlt.

15procedure-tri.xlsm (30.44 Ko)
Public Sub Sort_Data()
Dim TD As Range
Dim shp As Object, shpIndex As Integer
Dim xlSort As XlSortOrder
    Set TD = Range("Donn?es_trait?es")
    If TD.ListObject.DataBodyRange Is Nothing = False Then
        Set shp = ActiveSheet.Shapes(Application.Caller)
        shpIndex = CInt(Right(shp.Name, 2))
        Select Case shpIndex
            Case 1, 4: xlSort = xlAscending
            Case 2, 3: xlSort = xlDescending
        End Select
        With TD.ListObject
            If .ShowAutoFilter Then .AutoFilter.ShowAllData
            With .Sort
                .SortFields.Add TD(0, shpIndex), , xlSort
                .Header = xlYes
                .Apply
                .SortFields.Clear
            End With
        End With
    End If
End Sub
Private Sub Worksheet_Activate()
    ThisWorkbook.RefreshAll
End Sub

Merci à tous les deux !

les deux solutions fonctionnent bien, j'ai pu adapter le code pour qu'il s'adapte bien à mes lignes.

je pensais qu'il y aurait un temps de traitement mais même pas, c'est de l’instantanée avec les filtres.

Merci encore !

Mav'

Rechercher des sujets similaires à "procedure tri critere"