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'
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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.
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 SubPrivate Sub Worksheet_Activate()
ThisWorkbook.RefreshAll
End SubMerci à 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'