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