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 ?
| Ligne | Code | Date | Désignation | Paiement | Débit | Crédit |
| 1 | ZZ | 11-mars | ZUT | 400.00 | ||
| 2 | UU | 12-mars | DDD | 200.00 | ||
| 3 | VV | 13-mars | CRE | 350.00 | ||
| 4 | RR | 14-mars | COV | 800.00 | ||
| 5 | AA | 15-mars | COCO | 400.00 | ||
| 6 | ZAA | 16-mars | CC | 350.00 | ||
| 7 | DD | 17-mars | BRA | 300.00 | ||
| 8 | BB | 18-mars | BB | 200.00 | ||
| 9 | RR | 19-mars | ABS | 800.00 | ||
| 10 | CC | 20-mars | AAA | 300.00 | ||
| 11 | 0 | |||||
| 12 | 0 | |||||
| 13 | 0 | |||||
| 14 | 0 | |||||
| 15 | 0 | |||||
| 16 | 0 | |||||
| 17 | 0 | |||||
| 18 | 0 | |||||
| 19 | 0 | |||||
| 20 | 0 |
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 SubUn 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 SubMerci 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 Subun grand merci !
bonne soirée