Trier en conservant les formules
Je ne pense pas qu'il s'agisse d'un bug mais d'un choix dicté par un problème de vitesse. Si les cellules étaient réordonnées "physiquement" ça prendrait beaucoup plus de temps que simplement remplacer les valeurs d'origine par les valeurs triées. Le fait de déplacer une seule cellule -et c'est ce qu'il faut faire si l'on veut que les formules suivent- entraîne pour le tableur beaucoup plus d'opérations que le simple fait de changer son contenu. Le tri se contente donc de modifier les valeurs de la plage sans toucher aux cellules en tant qu'objets, c'est pourquoi les formules ne sont pas ajustées. J'ai fait un petit test par macro de ce que pourrait donner un tri "physique" des cellules, qui ne perturberait pas les formules:
sub TestTri()
Dim S, I As Integer, Calc As Long, P As Range
Calc = Application.Calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Set P = Application.InputBox("Référence de la plage à trier " _
& "(1 seule colonne, sans en-tête)", Type:=8)
If P.Columns.Count > 1 Then exit sub
S = P.Value
P.Offset(, 1).Insert xlShiftToRight
P.Offset(, 1).Value = Evaluate("""" & Left(P.Address(0, 0), _
(P.Column < 27) + 2) & """&ROW(" & P.Address & ")")
P.Resize(, 2).Sort P.Item(1)
P.Value = S
S = P.Offset(, 1)
For I = 1 To UBound(S)
Range(S(I, 1)).Cut P.Item(I, 2)
Next I
P.Delete xlShiftToLeft
Application.Calculation = Calc
end subTant que la colonne à trier est de petite taille (une centaine de cellules) c'est assez rapide. Mais par exemple avec une plage de 4000 cellules le tri prend déja une bonne vingtaine de secondes sur un XP+ 1700 alors qu'un tri normal est quasi-instantané. Ce serait bien sûr plus rapide se ce type de tri était codé dans Excel lui-même plutôt que dans une procédure VBA bricolée, mais les opérations de base -déplacer des cellules- seraient les mêmes.
Auteur : Laurent Longre
Mots clefs associés à cette page : formule, trier, tri
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
