Bonjour,

Je dois trier un classeur excel selon une colonne, mais ce classeur ne fait malheureusement pas toujours la même taille en termes de ligne.

J'ai donc setup une macro qui calcule le nombre de lignes de l'excel, appelons l'indice i.

Le sort fields se fait sur la range "H2:H" & i
Le sort se fait sur la range "A1:J" & i

Exemple i = 350 : "H2:H350" et "A1:J350"

J'ai logiquement créé deux strings : "H2:H" et "A1:J" auxquels je concatène i une fois calculé.
Sauf que rien n'y fait, en espionnant la valeur de mes strings, au lieu d'avoir par exemple "H2:H350", j'ai "H2:H 350" ce qui fait planter la suite du programme.
J'ai même essayé de supprimer l'espace créé avec .Trim, mais il semble artificiel et ne se supprime pas.

Peut-être n'ai-je pas la bonne approche ?

Merci beaucoup de votre aide, je mets mon code ci-dessous

Antdec


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
Sub Tri_prospect()
'
' Tri_prospect Macro
    Dim i As Integer
    i = 1
    While Worksheets(1).Cells(i, 1).Value <> ""
        i = i + 1
    Wend
    Dim interv1, interv2 As String
    interv1 = Application.WorksheetFunction.Trim("H2:H" & Str(i))
    interv2 = Application.WorksheetFunction.Trim("A1:J" & Str(i))
 
    Cells.Select
    ActiveWorkbook.Worksheets(1).Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets(1).Sort.SortFields. _
        Add2 Key:=Range(interv1), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(1).Sort
        .SetRange Range(interv2)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub