Macro pour trier une zone sur condition de cellule

bonjour le Forum,

je bute sur une macro me permettant de trier sur la colonne D = désignation dans mon exemple

trier une zone : de B9 à G jusqu'à la dernière ligne

la dernière ligne est testée sur la colonne D

on veut trier sur cette même col D en ignorant les cellules = 0

Le code que j'ai mis fonctionne bien mais me place les lignes à 0 avant la zone triée, donc ne les ignore pas et les inclue dans le tri

comment rajouter ou modifier le code pour que les lignes dont la cellule D = 0 soit ignorée de la zone à trier ?

LigneCodeDateDésignationPaiementDébitCrédit
1ZZ11-marsZUT400.00
2UU12-marsDDD200.00
3VV13-marsCRE350.00
4RR14-marsCOV800.00
5AA15-marsCOCO400.00
6ZAA16-marsCC350.00
7DD17-marsBRA300.00
8BB18-marsBB200.00
9RR19-marsABS800.00
10CC20-marsAAA300.00
110
120
130
140
150
160
170
180
190
200
Sub MonTri()
    Dim derligne As Integer
    Dim cellule As Range
    derligne = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row
    For Each cellule In ActiveSheet.Range("D9:D" & derligne)
        If cellule <> 0 Then
        '===
        ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("D9:D" & derligne), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("A9:G" & derligne)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    '===
        End If
    Next
    MsgBox Ok
End Sub

Un grand merci pour votre aide

bonjour,

Sub MonTri()
     Dim derligne As Integer

     With ActiveSheet.Range("A1").CurrentRegion.Offset(8).Resize(, 7)    'cette plage a partir de la ligne 9 & 7 colonnes
          .Sort .Range("C1"), Header:=xlNo     'sorter la colonne C
          derligne = ActiveSheet.Range("C" & Rows.Count).End(xlUp).Row     'détecter la dernière ligne C
          .Resize(Application.Max(1, derligne - 8)).Sort .Range("D1"), Header:=xlNo      'sorter partie de la plage
     End With
End Sub

Merci BsAlv pour ta réponse

mais cela met la zone triée à la fin du fichier après la dernière ligne où la cellule D=0

je joins un fichier test pour expliquer

je pense avoir trouvé une astuce pour évite les complications :

au lieu de 0 je mets ZZZ sur la col.D

ainsi plus de problème de tri sur une valeur

mais bon peut-être une astuce pour résoudre le problème avec 0

encore merci

ce problème avec 0 reste, si cellules sont vides au lieu de 0, ca marche aussi.

Sub FID()

     With ActiveSheet.Range("A8").CurrentRegion.Resize(, 7)    'cette plage (dynamique) autour de A8 avec 7 colonnes
          MsgBox "la plage est " & .Address
          For i = 2 To .Rows.Count
               If .Cells(i, 4).Value = 0 Then .Cells(i, 4).Value = ""     'vide au lieu de votre "Z" !
          Next
          .Sort .Range("D1"), Header:=xlyes     'sorter la colonne D avec des entêtes
     End With
End Sub

un grand merci !

bonne soirée

Rechercher des sujets similaires à "macro trier zone condition"