Détermination des critères de tri (Microsoft Excel)
Supposons qu’un collègue vous donne une feuille de calcul contenant plusieurs centaines de lignes de données dans 27 colonnes. Avant de commencer à travailler avec les données, vous voudrez peut-être savoir si elles ont déjà été triées. Connaître les informations peut non seulement éliminer le besoin de recourir aux données, mais vous donnera également une idée de ce que votre collègue a estimé être la façon la plus importante d’examiner les données.
Malheureusement, Excel ne dispose pas d’un moyen intégré pour déterminer les critères de tri utilisés pour une plage de données. Vous pourriez théoriquement écrire une macro qui vérifierait chaque colonne et voir si elle était dans l’ordre croissant ou décroissant. Cela vous dira si cette seule colonne a été triée, mais cela ne signifie pas nécessairement que la table de données entière a été triée par cette colonne – cela pourrait simplement être une coïncidence si la colonne est triée et que le tri a été effectué par un autre colonne. La tâche de vérification devient encore plus délicate lorsque vous commencez à envisager des tris secondaires et tertiaires.
Cependant, vous pouvez essayer une chose pour déterminer si une colonne particulière est triée et si elle est triée par ordre croissant ou décroissant. (Rappelez-vous: cela ne vous dira pas si la colonne particulière était la colonne principale utilisée pour le tri, cela ne vous dira que si la colonne est triée.)
L’idée derrière la macro est de copier le contenu de la colonne dans une feuille de calcul temporaire, deux fois. Par exemple, si vous souhaitez extraire la colonne F, la macro copie la colonne F dans les colonnes A et B de la feuille de calcul temporaire. La macro trie ensuite la colonne B dans l’ordre croissant et la compare à la colonne A. Si les colonnes triées et non triées sont identiques, la colonne d’origine était dans l’ordre croissant. Ensuite, la colonne B est triée par ordre décroissant et la comparaison est refaite. Encore une fois, si les colonnes sont égales, la colonne est dans l’ordre décroissant.
Sub TestIfSorted(i) Dim CColumn as Number Dim CSheet as String Dim FlagSort as String 'Identify Current Column and Current Sheet CColumn = i CSheet = ActiveSheet.Name FlagSort = "" 'Add a temporary sheet to test for sorting Sheets.Add ActiveSheet.Name = "TempSort" 'Copy CURRENT column to Columns A,B in Current Sheet Sheets(CSheet).Select Columns(CColumn).Select Selection.Copy Sheets("TempSort").Select Range("A1").Select ActiveSheet.Paste Range("B1").Select ActiveSheet.Paste Application.CutCopyMode = False 'In Column C test for equality of Columns A/B 'If Sum in C1=0 then OK otherwise Col A<>Col B Range("B2").Select Selection.End(xlDown).Select Bottom = ActiveCell.Row Range(Cells(2, 3), Cells(Bottom, 3)).Select Selection.FormulaArray = "=IF(RC[-2]=RC[-1],0,1)" Range("C1").Select ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[6535]C)" 'Sort Column B--Ascending - See if c1=0 Columns("B:B").Select Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption1:=xlSortNormal If Cells(1, 3).Value = 0 Then FlagSort = "Ascending" 'Sort Column B--Descending - See if c1=0 Columns("B:B").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, DataOption1:=xlSortNormal If Cells(1, 3).Value = 0 Then FlagSort = "Descending" If FlagSort = "Ascending" Then 'Color Header on original sheet yellow Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 36 End If If FlagSort = "Descending" Then 'Color Header on original sheet orange Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 44 End If 'Delete temporary sheet Sheets("TempSort").Select ActiveWindow.SelectedSheets.Delete End Sub
Une fois qu’il est déterminé si la colonne d’origine était dans l’ordre croissant ou décroissant, la première cellule de la colonne dans la feuille de calcul d’origine est définie sur jaune ou orange, respectivement. Enfin, la feuille de calcul temporaire est supprimée.
Cette macro peut être modifiée pour être appelée une fois pour chaque colonne d’une table de données. L’exécution de la macro pour une table entière ne prendrait pas autant de temps, mais fournirait une représentation colorée indiquant si les colonnes individuelles sont triées par ordre croissant ou décroissant.
Bien sûr, toute macro comme celle-ci n’est pas triviale, il vous sera donc peut-être plus facile de déterminer comment vous souhaitez trier les données, puis de les trier de cette façon dès le départ.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (2395) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.