VBA Excel Tri d'une plage nommée par une colonne particulière
J'ai une plage sélectionnée et à l'intérieur de cette Plage, je voudrais effectuer un tri par colonne particulière, de sorte que chaque ligne est gardé le même c'est à dire la fonction de tri juste réorganise l'ensemble des lignes en fonction de la colonne j'ai choisi de trier par.
Mon code jusqu'à présent est: est-ce
Sub CustomSortAscendingExcel(ByVal control As IRibbonControl, ByRef cancelDefault As Variant)
Dim selRange As range
Dim usedRange As range
Dim checkRange As range
Dim shtData As Worksheet
Set shtData = Worksheets("Data")
shtData.Activate
shtData.Unprotect
Set selRange = Selection
Set usedRange = returnUsedRange
Set checkRange = Intersect(usedRange, selRange)
If Not Application.Intersect(usedRange, selRange) Is Nothing Then
With ActiveSheet
usedRange.Sort Key1:=selRange, Order1:=xlAscending, DataOption1:=xlSortNormal, MatchCase:=False, SortMethod:=xlPinYin, _
Header:=xlNo, Orientation:=xlSortColumns
.Sort.Apply
End With
Et similaires pour le tri Décroissant. Cela fonctionne très bien pour colonne1. Mon problème est que pour les colonnes 2, 3, 4, il ne fonctionne que pour les lignes qui ont une valeur dans colonne1 pas pour tout ce qui ne. Par exemple dans l'image ci-dessous le tri par colonne 3 correctement réorganise les 9 premières lignes mais pas les deux derniers.
Quelqu'un peut-il suggérer une manière de résoudre ce problème? Merci!
- la zone fait référence à
usedRange
dans votre code? - usedRange se réfère ici à l'ensemble de la table (A:2, D:11), selRange se réfère à la colonne j'ai choisi de trier par
- l'idée est bonne pour le résoudre... +1 pour lui-dessous.
Vous devez vous connecter pour publier un commentaire.
J'ai enregistré une macro simple qui sélectionne Range("A1:D5") , s'applique le filtre, puis trie dans l'ordre croissant sur la 3e colonne (C)
regardez ceci:
Maintenant, il n'y a pas beaucoup que vous avez à faire pour résoudre votre problème 🙂