Supposons un graphique avec uniquement des valeurs dans les deux premières colonnes A et B comme ceci

enter image description here

Je voudrais d'abord trier le graphique par ordre alphabétique de la colonne A, c'est-à-dire les X en haut, puis les Y et les Z.

Le 2ème coup doit être un tri de la colonne B en considérant la colonne A, c'est-à-dire en gardant le bloc de X et en trier leurs nombres dans la colonne B. De même avec les blocs de Y et Z.

La 1ère étape fonctionne correctement avec le code suivant:

Sub sort()
Dim SortClmn As String
Dim Area As String
Area= "A1:B10"
SortClmn = "A"
ActiveSheet.Range(Area).Sort _
Key1:=Range(SortClmn & "1"), Order1:=xlDescending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub

Comment dois-je changer ce code pour appliquer la 2ème étape?

Merci d'avance

0
os23 23 mai 2018 à 15:05

4 réponses

Meilleure réponse

La méthode la plus simple consiste à trier la colonne B, puis à trier la colonne A, cela obtiendra l'effet souhaité. Utilisez la même méthode que vous avez utilisée, mais triez la première colonne b puis la colonne a.

Si je modifie votre code, il ressemblera à ceci

Sub sort()
Dim SortClmn As String
Dim Area As String
Area = "A1:B10"
SortClmn = "B"
ActiveSheet.Range(Area).sort _
Key1:=Range(SortClmn & "1"), Order1:=xlAscending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
Area = "A1:B10"
SortClmn = "A"
ActiveSheet.Range(Area).sort _
Key1:=Range(SortClmn & "1"), Order1:=xlAscending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub
1
Ricards Porins 23 mai 2018 à 12:17
  1. Enregistrez une macro;
  2. Sélectionnez la table.
  3. Dans le ruban - Données> Trier;

enter image description here

  1. Sélectionnez la première colonne que vous souhaitez trier;
  2. Appuyez sur Ajouter un niveau ;
  3. Sélectionnez la deuxième colonne que vous souhaitez trier;
  4. Voir le code généré ;;
  5. Refactorisez-le, en avançant Select, Activate et en mettant les variables de chaîne;

Range.Sort, méthode MSDN

0
Vityata 23 mai 2018 à 12:13
Sub sort()
    lastRow = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
    With ActiveWorkbook.ActiveSheet.sort
     .SortFields.Clear
     .SortFields.Add Key:=Range("A1:A" & lastRow), Order:=xlAscending
     .SortFields.Add Key:=Range("B1:B" & lastRow), Order:=xlAscending
     .SetRange Range("A2:B" & lastRow)
     .Header = xlNo
     .Apply
    End With
End Sub

Quelque chose comme ça?

0
Radek Piekný 23 mai 2018 à 12:19

Bien que je pensais (tout comme @Vityata), vous pouvez simplement enregistrer une macro et modifier le code en conséquence ... Je vous donnerais un exemple direct:

Activesheet.Range("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"), Order2:=xlAscending, Header:=xlNo, MatchCase:=False, Orientation:=xlTopToBottom
0
JvdV 24 mai 2018 à 06:35