Il y a des premiers éléments, mais ce n'est pas encore tout à fait cela 
1. Analyse ce que tu veux faire :
- Chercher le premier E0.
- Chercher le deuxième E0
- Trier les données entre le premier et le deuxième E0
- Chercher le troisième E0
- Trier les données entre le deuxième et le troisième E0
- etc ...
2. Regarde ce que tu as dans ton code
Tu as un code pour trier une plage de cellules. Attention, ici tu as trié avec un filtre automatique. Ce n'est pas ce que tu veux, puisqu'un filtre automatique tri toute la colonne. Pour trier seulement une plage, avec l'enregistreu de macro tu obtiens :
1 2 3 4 5 6 7 8 9 10 11
| ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A6"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange Range("A6:A8")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With |
Ici, on tri la plage A6:A8.
Il faut l'adapter avec une plage variable.
Ici, tu cherche le premier E0 :
Set C = Worksheets(1).Range("A1:A11").Find(What:="E0")
Et ici, le prochain:
Set C = Worksheets(1).Range("A1:A11").FindNext(C)
Ta plage ne s'étend que de A1 à A11 ?
3. On combine
Tu peux créer une méthode qui à partir de 2 cellules effectue un tri entre les 2 cellules. Je te guide :
1 2 3 4 5 6 7
| Sub triEntreCe(cel1 As Range, cel2 As Range)
'1. vérifier qu'il y a bien quelque chose entre les deux cellules --> si non : on sort de la méthode
'tu peux utiliser Offset : cel1.Offset(1, 0) te donne la cellule juste en dessous de cel1
If .... Then Exit Sub
'2. Faire le tri de la plage de cellules entre cel1 et cel2 (les deux exclues), donc les cellules entre cel1.Offset(1, 0) et cel2.Offset(-1, 0) les deux inclues.
'pour cela utilise le code obtenu par enregistreur de macro et adapte avec les bonnes cellules
End Sub |
Ensuite tu créés la méthode principale qui fera tous les tris. Je te guide :
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
| Sub tri()
Dim cel0 As Range
Dim cel1 As Range
Dim cel2 As Range
Dim dernCel As Range
'1. Cherche la première occurence de E0
Set cel0 = ...
Set cel1 = cel0
'2. Vérifie que cel1 n'est pas Nothing --> sinon on sort de la méthode
If ... Then Exit Sub
'3. Cherche la deuxième occurence de E0
Set cel2 = ....
'4. Boucle tant que cel2 <> cel0
While ...
'i. Faire le tri entre cel1 et cel2
Call triEntreCel(cel1, cel2)
'ii. cel1 prend la valeur de cel2
Set cel1 = ...
'iii. cel2 prend la valeur de la prochaine occurence de E0
Set cel2 = ...
Wend
'5. Maintenant cel2 vaut cel0, il faut donc faire le tri entre cel1 et la dernière cellule de la colonne.
dernCel = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp) 'permet d'avoir la dernière cellule non vide de la colonne A
Call triEntreCel(cel1, dernCel.Offset(1, 0))
End Sub |
Est-ce que tu arriveras à compléter ?
Partager