bonjour,
quelques commentaires ajoutés, ainsi que quelques corrections
Sub testtri()
' tri d'une liste continue sur plusieurs feuilles, (première feuille les lignes contenant les données vont de 12 à 32011, sur les autres feuilles les données vont de la ligne 2 à 32001
' on prépare pour chaque feuille les paramètres de tri, sans faire le tri
For i = 1 To Worksheets.Count
With Worksheets(i)
.Sort.SortFields.Clear
If i = 1 Then ' paramètres pour la première feuille tri sur 32000 lignes
.Sort.SortFields.Add Key:=.Range("D12:D32011") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SetRange Range("A12:G32011")
Else ' paramètres pour les feuilles suivantes le tri se fera sur 48000 lignes
.Sort.SortFields.Add Key:=.Range("D2:D48001") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SetRange Range("A2:G48001")
End If
.Sort.Header = xlNo
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
End With
Next i
' s'il n'y a qu'une seule feuille on lance un simple tri sur la feuille et c'est fini
If Worksheets.Count = 1 Then Worksheets(1).Sort.Apply: fin = True Else fin = False
' sinon on lance un tri multifeuille jusqu'à ce que le tri soit fini
While Not fin
c = 0 ' compteur qui sert à determiner si le tri est fini
' algorithme de tri sur plusieurs feuilles
' on vérifie le statut du tri sur la feuille en cours et suivante et on positionne l'indicateur c, si les feuilles sont triées
' on trie la premiere feuille, on copie la moitié supérieure des lignes sur la feuille suivante (donnant 48000 lignes à trier)
' on trie la seconde feuille, on en copie le tiers inférieur (16000 lignes) vers la page précédente
' on répéte ce mécanisme pour toutes les feuilles
For i = 1 To Worksheets.Count - 1
If i <> 1 Then ll = 32001: pl = 16002 Else ll = 32011: pl = 16012
' si la valeur de la dernière ligne de la feuille en cours est inférieure à la valeur de la première ligne de la feuille suivante, on incrémente C (les feuilles en cours et suivante, sont dans le bon ordre)
If Worksheets(i).Range("D" & ll) <= Worksheets(i + 1).Range("D2") Then c = c + 1
' on trie la feuille en cours
Worksheets(i).Sort.Apply
'on copie les 16000 dernieres lignes de la feuille en cours à la fin de la feuille suivante
Worksheets(i).Range("A" & pl & ":G" & ll).Copy Worksheets(i + 1).Range("A32001")
' on trie la feuille suivante
Worksheets(i + 1).Sort.Apply
' on copie les 16000 premières lignes sur la feuille précédente
Worksheets(i + 1).Range("A2:G16001").Copy Worksheets(i).Range("A" & pl)
' on supprime les lignes copiées
Worksheets(i + 1).Range("A2:G16001").Delete shift:=xlUp
Next i
' si toutes les feuilles sont telles dans l'ordre, on a fini
If c = Worksheets.Count - 1 Then fin = True
Wend
Application.ScreenUpdating = True
End Sub