Il pourrait s'agir d'une question en double avec :

VBA Trier A-Z sur une colonne

Cependant, je veux que les choses soient clarifiées.

J'ai essayé d'utiliser ce code pour mon but:

Sub SortAsc2()

    Dim LastRow As Long
    LastRow = Cells(Rows.Count, "M").End(xlUp).Row

    'Columns("D:D").Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("D"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("D2:D" & LastRow)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Où j'ai eu une erreur :

1004 La méthode 'Range' de object_Global a échoué

J'ai essayé un autre code alors

Sub SortDataWithoutHeader()
    Range("D1:D12").Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlNo
End Sub

Mais le tri n'a lieu qu'à l'intérieur de la colonne, alors que les autres données ne sont pas affectées. Je veux avoir des valeurs d'autres cellules correspondant au tri des données.

enter image description here

Quelqu'un peut-il aider?

0
MKR 14 févr. 2020 à 19:09

1 réponse

Meilleure réponse

Essayez ceci.

Lisez les commentaires du code et ajustez-le en fonction de vos besoins

Code:

Public Sub SortAsc2()

    Dim targetSheet As Worksheet
    Dim targetRange As Range

    Dim lastRow As Long

    ' Set a reference to the sheet
    Set targetSheet = ThisWorkbook.Worksheets("Sheet1")

    ' Find the last non empty row (based on column A)
    lastRow = targetSheet.Cells(targetSheet.Rows.Count, "A").End(xlUp).Row

    ' Set the range to be sorted (A2= begins in row 2 and ends in column K?)
    Set targetRange = targetSheet.Range("A2:K" & lastRow)

    ' Clear current sorting fields
    targetSheet.Sort.SortFields.Clear

    ' You are missing a 1 after "D" in Range in your code
    targetSheet.Sort.SortFields.Add Key:=Range("D1"), _
                                         SortOn:=xlSortOnValues, _
                                         Order:=xlAscending, _
                                         DataOption:=xlSortNormal

    With targetSheet.Sort
        .SetRange targetRange
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Laisse moi savoir si ça fonctionne

1
Ricardo Diaz 14 févr. 2020 à 17:36