Méssi, méssi ...Victor21 je ne peux pas car ce n'est pas toujours la même a trié...
Function EstTriée(Target As Range, Optional SortOrder As XlSortOrder = xlAscending, Optional HasHeader As Boolean = True) As Boolean
'Auteur: hasco
Dim t As Variant
Dim i As Long
If Target.Columns.Count > 1 Then Set Target = Target.Columns(1)
If HasHeader Then Set Target = Target.Offset(1).Resize(Target.Rows.Count - 1)
t = Target.Value
EstTriée = True
If SortOrder = xlAscending Then
For i = 1 To UBound(t) - 1
If t(i, 1) > t(i + 1, 1) Then
EstTriée = False
Exit For
End If
Next
Else
For i = 1 To UBound(t) - 1
If t(i, 1) < t(i + 1, 1) Then
EstTriée = False
Exit For
End If
Next
End If
End Function
Function EstTriée(Target As Range, Optional SortOrder As XlSortOrder = xlAscending, Optional HasHeader As Boolean = True) As Boolean
'Auteur: hasco Voir le profil: Hasco - Excel Downloads Forums
Dim t As Variant
Dim depart As Long, arrivee As Long, i As Long
Dim pas As Integer, increment As Integer
If Target.Columns.Count > 1 Then Set Target = Target.Columns(1)
If HasHeader Then Set Target = Target.Offset(1).Resize(Target.Rows.Count - 1)
t = Target.Value
EstTriée = True
If SortOrder = xlAscending Then
depart = LBound(t)
arrivee = UBound(t) - 1
pas = 1
Else
depart = UBound(t)
arrivee = LBound(t) + 1
pas = -1
End If
EstTriée = True
For i = depart To arrivee Step pas
If t(i, 1) > t(i + pas, 1) Then
EstTriée = False
Exit For
End If
Next
End Function
Mon module de classe TableIndex en laisse la responsabilité au programme appelant, se contentant de lui indiquer ce qu'il doit comparer. Mais les modules MDictionnArbo et MClassement de OutIdx ont des fonctions TbIdxTV et TbIdxTVcd rendant des TableIndex prêts à l'emploi (il ne reste plus que le parcours à faire) qui donnent satisfaction pour tous types de données, lesquels n'y sont toutefois pas mélangés pour éviter tout risque de résultat imprévisible selon que chaque comparaison aura nécessité ou non la conversion en String d'un des deux termes numérique.Dranreb, ton module de classe fonctionne pour tout type de données
Set Target = Target.Offset(1).Resize(Target.Rows.Count - 1)
If HasHeader Then Set Target = Target.Offset(1).Resize(Target.Rows.Count - 1)
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.ScreenUpdating = False
Call trier_bpu
Sheets(4).Select 'Retour onglet 4
End If
End If
End Sub
Un simple like ne suffisant pas :pfoufff, pourquoi faire simple quand on peut faire compliqué. Pourquoi résister à la demande d'un fichier exemple exposant le problème avec données anonymisées et tout le pataquès?