Salut Boyoo,
Salut gmb,
petite variante que je vous propose parce que récemment développée pour mon propre usage.
- un clic en [A10] ouvre une liste de validation reprenant les comptes existants : la liste scrolle sur le compte choisi ;
- la suite se passe toujours sur la ligne d'en-tête bleue ;
- un clic sur le compte lui-même met le compte en italique rouge = tri descendant ;
- nouveau clic remet le compte en noir normal = tri ascendant ;
- la macro calcule les lignes de ce compte et les inscrit en [A1:B1] : pas effacer, évidemment !
3 tris
1. simple sélection trie le tableau sur base de cette colonne ;
2. - sélectionner plusieurs cellules trie le tableau sur base Key1:= colonne correspondant à la 1ère cellule de la sélection - Key2:= la colonne correspondant à la dernière cellule ;
- la même sélection mais en intégrant cette fois la première ligne sous la bleue dans la sélection inverse les Key1 et Key2
3. en utilisant CTRL, sélectionner 3 cellules simples trie Key1 - Key2 - Key3 selon l'ordre dans lequel vous avez exécuter votre triple sélection.
If Target.Interior.Color <> RGB(255, 255, 255) And Target.Row > 10 And Target.Column > 1 Then
If Selection.Cells(1, 1).Row = CInt([A1]) Then
iIdx = IIf(Range("A" & [A1]).Font.Italic = False, 1, 2)
Application.ScreenUpdating = False
Select Case Selection.Areas.Count
Case 1
iCol = Target.Column
If Selection.Columns.Count = 1 Then
If Selection.Rows.Count = 1 Then _
sCol1 = fctCol(iCol): _
Range("A" & [A1]).Resize([B1] - [A1] + 1, Cells(10, Columns.Count).End(xlToLeft).Column).Sort _
key1:=Range(sCol1 & [A1] + 1), order1:=Choose(iIdx, xlAscending, xlDescending), Orientation:=xlTopToBottom, Header:=xlYes
Else
sCol1 = IIf(Selection.Rows.Count = 1, fctCol(iCol), fctCol(iCol + Selection.Columns.Count - 1))
sCol2 = IIf(Selection.Rows.Count = 1, fctCol(iCol + Selection.Columns.Count - 1), fctCol(iCol))
Range("A" & [A1]).Resize([B1] - [A1] + 1, Cells(10, Columns.Count).End(xlToLeft).Column).Sort _
key1:=Range(sCol1 & [A1] + 1), order1:=Choose(iIdx, xlAscending, xlDescending), _
key2:=Range(sCol2 & [A1] + 1), order2:=Choose(iIdx, xlAscending, xlDescending), _
Orientation:=xlTopToBottom, Header:=xlYes
End If
Case 3
sCol1 = fctCol(Selection.Areas(1).Cells(1, 1).Column)
sCol2 = fctCol(Selection.Areas(2).Cells(1, 1).Column)
sCol3 = fctCol(Selection.Areas(3).Cells(1, 1).Column)
Range("A" & [A1]).Resize([B1] - [A1] + 1, Cells(10, Columns.Count).End(xlToLeft).Column).Sort _
key1:=Range(sCol1 & [A1] + 1), order1:=Choose(iIdx, xlAscending, xlDescending), _
key2:=Range(sCol2 & [A1] + 1), order2:=Choose(iIdx, xlAscending, xlDescending), _
key3:=Range(sCol3 & [A1] + 1), order3:=Choose(iIdx, xlAscending, xlDescending), _
Orientation:=xlTopToBottom, Header:=xlYes
Range("B" & [A1]).Select
End Select
Application.ScreenUpdating = True
End If
End If
Á tester, comme on dit...
A+