Sort Excel - Problème séquence dans Sort et VBA

En Excel, lorsque je trie (SORT) une colonne (“A”) en ordre croissant, j’obtiens le classement suivant:

Colonne A
S_A.SYSTEM----------------> plus petit
SAP_NEW_30D------------> plus grand

Ensuite en VBA, si je balaie les Rows du début à la fin, j’obtiens un problème de séquence.
En VBA, il considère l’inverse

S_A.SYSTEM----------------> plus grand
SAP_NEW_30D------------> plus petit

Ce phénomène ne se passe que lorsque les cellules contiennent des caractères spéciaux ("_",".",
)

Je dois absolument avoir une même séquence dans le Sort et dans le VBA.
Est-ce que quelqu’un a une solution ?
Merci beaucoup.

:hello:

c’est quoi la formule que tu as utilisées ??

je n’ai aucun problème de ce type avec

Sub test()
Range("a1:a700").Sort key1:=Range("a1"), order1:=xlAscending
End Sub

Avec ton code, si tu tries les 2 rows suivantes sur Col 1 et puis Col 2

Col1…Col2
X
X…C

Tu devrais obtenir
X
X…C

Mais, tu obtiendras
X…C
X

Par contre si tu mets ces 2 rows dans une table, que tu tries la table et puis que tu ré-écris cette table triée dans 2 rows, tu obtiens bien:
X
X…C

C’est un gros fichier (environ 60.000 Rows) que je dois trier sur 6 Clés.
Je commence par concaténer les 6 clés dans ZN_B que je mets ensuite dans la colonne 45 (en forçant des longeurs pour chaque clé, sinon, premier problème).
Ensuite, facile, on trie sur cette colonne 45, ce qui veut dire qu’il trie sur les 6 clés en une fois.
A ce niveau-là, je n’ai pas de problème non plus.
Le problème se situe au moment ou je relis le fichier trié en VBA (row après row). Et, c’est là qu’il considère que “S_A.SYSTEM” est plus grand que “SAP_NEW_30D”
Alors que le Sort les présente comme “S_A.SYSTEM” plus petit que “SAP_NEW_30D”

'===========================
Sub Tri_Sheets_Norm_Role_TCODE()
For irow = 2 To 100000
If Worksheets(“Norm_Role_TCODE”).Cells(irow, 4) = “” Then GoTo TB_1
ZN_B_1 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 4)
ZN_B_2 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 5)
ZN_B_3 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 6)
ZN_B_4 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 14)
ZN_B_5 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 16)
ZN_B_6 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 24)

  ZN_B_1_Rep = ZN_B_1 & String$(20 - Len(ZN_B_1), " ")
  ZN_B_2_Rep = ZN_B_2 & String$(25 - Len(ZN_B_2), " ")
  ZN_B_3_Rep = ZN_B_3 & String$(35 - Len(ZN_B_3), " ")
  ZN_B_4_Rep = ZN_B_4 & String$(60 - Len(ZN_B_4), " ")
  ZN_B_5_Rep = ZN_B_5 & String$(40 - Len(ZN_B_5), " ")
  ZN_B_6_Rep = ZN_B_6 & String$(60 - Len(ZN_B_6), " ")

  ZN_B = ZN_B_1_Rep & ZN_B_2_Rep & ZN_B_3_Rep & ZN_B_4_Rep & ZN_B_5_Rep & ZN_B_6_Rep
  Worksheets("Norm_Role_TCODE").Cells(irow, 45) = ZN_B
Next irow

TB_1:

Worksheets("Norm_Role_TCODE").Range("A:AS").Sort _
Key1:=Worksheets("Norm_Role_TCODE").Range("AS2"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns

Columns("AS:AS").Select
Selection.ClearContents
Range("A1").Select

End Sub
'=========================
Sub Lecture()
AseqBus = NseqBus
irow = irow + 1 ’ +1 dans irow correspond à lecture du fichier

’ Fin de fichier 1 ?
’ ------------------

If Worksheets(“Norm_Role_TCODE”).Cells(irow, 4) = “” Then

End If

’ Garniture Nouvelle séquence en forçant des longueurs fixes
’ ----------------------------------------------------------

ZN_B_1 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 4)
ZN_B_2 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 5)
ZN_B_3 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 6)
ZN_B_4 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 14)
ZN_B_5 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 16)
ZN_B_6 = Worksheets(“Norm_Role_TCODE”).Cells(irow, 24)

ZN_B_1_Rep = ZN_B_1 & String$(20 - Len(ZN_B_1), " ")
ZN_B_2_Rep = ZN_B_2 & String$(25 - Len(ZN_B_2), " ")
ZN_B_3_Rep = ZN_B_3 & String$(35 - Len(ZN_B_3), " ")
ZN_B_4_Rep = ZN_B_4 & String$(60 - Len(ZN_B_4), " ")
ZN_B_5_Rep = ZN_B_5 & String$(40 - Len(ZN_B_5), " ")
ZN_B_6_Rep = ZN_B_6 & String$(60 - Len(ZN_B_6), " ")

ZN_B = ZN_B_1_Rep & ZN_B_2_Rep & ZN_B_3_Rep & ZN_B_4_Rep & ZN_B_5_Rep & ZN_B_6_Rep
NseqBus = ZN_B

’ Test séquence de tri correcte sur fichier 1
’ -------------------------------------------

If NseqBus < AseqBus Then
Msg = “Lecture Erreur séquence de tri sur fichier Business” & Chr(13) _
& Chr(13) _
& “Ancienne séquence =” & Chr(13) _
& AseqBus & Chr(13) _
& Chr(13) _
& Chr(13) _
& “Nouvelle séquence =” & Chr(13) _
& NseqBus
Style = vbYes + vbCritical + vbDefaultButton2 ’ Définit les boutons.
Title = "Suivi de la procédure " ’ Définit le titre.
Response = MsgBox(Msg, Style, Title)
Stop
End If



End Sub