XL 2013 VBA problème de tri entre versions d'Excel

Ptrs32

XLDnaute Nouveau
Bonjour,

J'ai un soucis avec une macro que j'ai codé pour l'entreprise dans laquelle je suis. Globalement l'étape qui pose problème dans mon script est le tri des lignes du tableur.

Pour vous expliquer mes données, j'ai plusieurs lignes qui correspondent à des patients. Sur chaque lignes il y a plusieurs champs qui contiennent des codes de la forme "26:01" ou "42:01/42:02" ou "15:02/15:04/15:06" ...etc. Soit deux nombres séparés par ":" et parfois plusieurs codes séparés par "/" dans la même cellule.

La partie de traitement des données est éprouvée et fiable mais le soucis viens du fait que cette macro est disponible sur différents ordinateurs ne comportant pas tous la même version d'Excel (2010 et 2013).

Sur certains ordinateurs dont la version est 2010, il arrive occasionnellement que lors de cette phase de tri, certains codes soient modifiés comme ceci, "42:01/42:03" devient "42:01/42:42" ; "15:02/15:04/15:06" devient "15:02/15:15" ; "12:01/12:05/12:06/12:25" devient "12:01/12:12"...
Comme vous voyez les codes sont ramenés à deux même s'il y en avait plus et le dernier numéro est toujours le même que le premier.

Pour informations les cellules sont toutes au format Texte pour justement ne pas êtres assimilées a un date ou autre. Le bug concerne uniquement ces codes et non les autres données plus classiques (entiers, chaines) et uniquement les cellules comportant plusieurs codes (donc séparés par "/").
Ce bug n'apparait jamais (jusqu’à maintenant en tout cas) sur la version 2013.

Je suppose donc qu'Excel 2010 subit un bug dans le tri des données à cause du schéma un peu particulier de ces codes.

Voici mon script pour le tri :
VB:
ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Columns(lastCol - 2) , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:=Columns(lastCol - 1) , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:=Columns(lastCol) , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range(Cells(cellEntete.row, 1), Cells(lastrow, lastCol + 3).Address)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Présentation du problème
  • Avant le tri
positioncode 1code 2code 3code 4code 5code 6code 7code 8code 9
18
26:01/26:24/26:26/26:39/26:56/26:71N
29:01/29:02/29:26/29:32
35:01/35:40N/35:42/35:57/35:68/35:94/35:101/35:108/35:116/35:119/35:120/35:122/35:123/35:130N/35:131/35:132/35:134N/35:137/35:138/35:139/35:143/35:144/35:145N/35:147
38:01/38:20/38:21/38:24/38:27
04:01/04:09N/04:19/04:24/04:28/04:29/04:30/04:41/04:49/04:57/04:62/04:63/04:65/04:66/04:67/04:73/04:75/04:76/04:78/04:79/04:81/04:82/04:83/04:84
12:03/12:04/12:23/12:32/12:34/12:35/12:37/12:38/12:39N/12:42Q/12:43/12:46N/12:47/12:48/12:50
04:04/04:23
13:01/13:02/13:102/13:105/13:109/13:112/13:113N
03:02/03:32/03:37
  • Après le tri
positioncode 1code 2code 3code 4code 5code 6code 7code 8code 9
126:01/26:2629:01/29:2935:01/35:3538:01/38:3804:01/04:0412:03/12:1204:04/04:0413:01/13:1303:02/03:03


Alors si quelqu'un a une idée sur l'origine du problème ou souhaite plus d'information merci d'avance :)
 
Solution
Bonjour Ptrs32, bienvenue sur XLD,

Je ne vois vraiment pas pourquoi un tri modifierait le contenu des cellules.

Essayez à tout hasard la bonne vieille méthode de tri qui fonctionne sur toutes versions Excel :
VB:
Range(Cells(cellEntete.Row, 1), Cells(lastrow, lastCol + 3)).Sort _
    Columns(lastCol - 2), xlDescending, Columns(lastCol - 1), , xlDescending, Columns(lastCol), xlDescending, Header:=xlYes
A+

job75

XLDnaute Barbatruc
Bonjour Ptrs32, bienvenue sur XLD,

Je ne vois vraiment pas pourquoi un tri modifierait le contenu des cellules.

Essayez à tout hasard la bonne vieille méthode de tri qui fonctionne sur toutes versions Excel :
VB:
Range(Cells(cellEntete.Row, 1), Cells(lastrow, lastCol + 3)).Sort _
    Columns(lastCol - 2), xlDescending, Columns(lastCol - 1), , xlDescending, Columns(lastCol), xlDescending, Header:=xlYes
A+
 

Ptrs32

XLDnaute Nouveau
Bonjour Ptrs32, bienvenue sur XLD,

Je ne vois vraiment pas pourquoi un tri modifierait le contenu des cellules.

Essayez à tout hasard la bonne vieille méthode de tri qui fonctionne sur toutes versions Excel :
VB:
Range(Cells(cellEntete.Row, 1), Cells(lastrow, lastCol + 3)).Sort _
    Columns(lastCol - 2), xlDescending, Columns(lastCol - 1), , xlDescending, Columns(lastCol), xlDescending, Header:=xlYes
A+
Oh d'accord je ne savais pas qu'on pouvait réduire à ce point. Merci.
Maintenant comme je n'arrive pas à reproduire ce problème moi-même ça risque de prendre du temps de vérifier si ta solution fonctionne mais dans tous les cas elle réduit mon code et ça c'est cool.

Ce qui me fait dire que c'est le tri qui provoque ce bug c'est que juste avant je calcule un score pour chaque patient en comparant chacun des codes à une référence. Et même lorsque le bug apparait ce score est correct. Alors que si le changement de code était apparut avant, le score aurait été impacté.

Merci
 

Discussions similaires

Haut Bas