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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| Sub TrierLesColonnesParNombreDeHit()
With ActiveWorkbook.Worksheets("Travail")
'rafraichir l'écran
Application.ScreenUpdating = False
'première cellule du tableau
Range("A8").Select
lig1 = Selection.Row
col1 = Selection.Column
'dernière ligne
Range("A8").Select
derlig = Selection.End(xlDown).Row
'dernière colonne
Range("A8").Select
dercol = Selection.End(xlToRight).Column
Dim cf()
Dim k As Integer
'k = ActiveSheet.AutoFilter.Filters.Count
'ReDim cf(k)
k = 1
ReDim cf(k)
'identifier les colonnes avec un filtre actif
If ActiveSheet.FilterMode Then 'condition : si l'onglet est filtré
For i = 2 To ActiveSheet.AutoFilter.Filters.Count 'boucles sur toutes les colonnes
If ActiveSheet.AutoFilter.Filters.Item(i).On Then
cf(k) = i: 'si la colonne est filtrée, définie la variable CF
k = k + 1
ReDim Preserve cf(k)
End If
Next i 'prochaine colonne de la boucle
End If 'fin de la condition
'Placer les colonnes avec un filtre en début de feuille
'si on coupe les colonnes filtrées, on perd le filtre -> On coupe les colonnes non filtrées
deb = 1
For i = 1 To k - 1
Range(Cells(1, deb), Cells(1, cf(i) - 1)).EntireColumn.Select
Selection.Cut
Cells(1, cf(i) + 1).EntireColumn.Select
Selection.Insert shift:=xlToLeft, CopyOrigin:=xlFormatFromLeftOrAbove
deb = deb + 1
Next
'rafraichir l'écran
Application.ScreenUpdating = False
'Ordonne les colonnes par ordre croissant de nombre de hits
debutfiltre = deb
For i = debutfiltre To dercol
For j = i To dercol
testi = Cells(6, i).Value
testj = Cells(6, j).Value
If testj > testi Then
'coupe le contenu de la colonne source
Cells(lig1, j).EntireColumn.Select
Selection.Cut
'Selection la colonne à droite
Cells(lig1, i).EntireColumn.Select
Selection.Insert shift:=xlToLeft, CopyOrigin:=xlFormatFromLeftOrAbove
test = debutfiltre
End If
Next
Next
End With
End Sub |
Partager