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.