Tout à fait d'accord, mais l'application peut être telle que l'usager terminal pourrait souhaiter conserver un ordre qu'il avait demandé tout en demandant une opération qui en exige un autre. C'est pourquoi j'ai proposé l'indexation, qui ne détruit pas l'ordre des données tout en permettant quand même d'y accéder selon un certain ordre de tri.c'est plus long de rechercher s'il elle est triée que de la trier directement
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
compteur = 0
If Sh.Name = "graphs" Then
compteur = compteur + 1
Call Macro1 'Dans Module1, macro pour trier les BPUs
'Une fois trié: je veux qu'on retourne sur la feuille "graphs":
If compteur > 0 Then 'Si on est déjà passé par le tri des BPUs:
Sheets(2).Select
Exit Sub
End If
End If
End Sub
Dim compteur As Integer
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "graphs" Then
'Si la plage Source n'a pas été triée on appelle la macro et on incremente le compterur sinon on ne fait rien
If compteur = 0 Then Call Macro1 'Dans Module1, macro pour trier les BPUs
compteur = compteur + 1
End If
End Sub
Sub trier_bpu()
Call nb_lignes
'On trie les bpuS:
ActiveWorkbook.Worksheets(1).AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets(1).AutoFilter.Sort.SortFields.Add Key:=Range("A1:A" & I), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(1).AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Sub nb_lignes()
Sheets(1).Select
I = Sheets(1).Range("A1").End(xlDown).Row
End Sub