Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sharkantipav

XLDnaute Occasionnel
Bonjour, j'ai une question de Tri atypique,je n'arrive pas a la resoudre a part la faire manuellement.
Je souhaiterai le faire en VBA

J'ai attache un fichier exemple:
En colonne A j'ai des noms puis en colonnes B, C, D j'ai des nombres

1ere etape (facile): Consiste a trier la colonne B (nombres du plus petit au plus grand) pour separer en 2 blocs:
Les nombres > 0 Bloc du haut
Les 0 - Bloc du bas

2e etape (difficile): Trier le tableau ABCD par colonne A alphabetique pour Chaque Bloc c'est la partie difficile que je n'arrive pas a faire

Merci bcp
 

Pièces jointes

Bonjour.
VB:
Sub Macro1()
Dim Plage As Range
Set Plage = ActiveSheet.[A3:F3].Resize(ActiveSheet.[A1000000].End(xlUp).Row - 2)
Plage.Columns("F").FormulaR1C1 = "=SIGN(RC2)"
    Range("A3:F32").Select
With ActiveSheet.Sort
   .SortFields.Clear
   .SortFields.Add Key:=Plage.Columns("F"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
   .SortFields.Add Key:=Plage.Columns("A"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   .SetRange Plage
   .Header = xlNo
   .MatchCase = False
   .Orientation = xlTopToBottom
   .SortMethod = xlPinYin
   .Apply
   End With
Plage.Columns("F").ClearContents
End Sub
 
Bonjour sharkantipav, Dranreb 😉,

Un autre essai. Le code se trouve dans le module de code de Sheet1.
VB:
Sub Trier()
Dim derlig&, plage As Range, nbr0&
  Application.ScreenUpdating = False
  derlig = Cells(Rows.Count, "a").End(xlUp).Row
  If derlig <= 3 Then Exit Sub Else Set plage = Range("a3:e" & derlig)
  plage.Sort key1:=plage(1, 2), order1:=xlDescending, Header:=xlNo
  nbr0 = Application.WorksheetFunction.CountIf(plage.Columns(2), 0)
  If plage.Rows.Count - nbr0 > 0 Then plage.Resize(plage.Rows.Count - nbr0).Sort key1:=plage(1, 1), order1:=xlAscending, Header:=xlNo
  If nbr0 > 0 Then plage.Offset(plage.Rows.Count - nbr0).Resize(nbr0).Sort key1:=plage(1, 1), order1:=xlAscending, Header:=xlNo
End Sub
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
388
Réponses
8
Affichages
561
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
169
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
649
Retour