Trie décroissant par VBA

Bonjour,

J'utilise une fonction de trie par ordre décroissant sur un tableau que j'ai réalisé grâce à l'enregistreur de macro VBA.

Ce trie est effectué sur la colonne 'G' de mon tableau grâce à un filtre présent sur la cellule G5. Ainsi, cette fonction me permet de trier les lignes de mon tableau grâce aux heures entrées dans la colonne G.

Je vous joins un fichier de test qui reprend mon code, est-il possible de l'optimiser ?

A vous relire.

Horusbk

Bonjour,

Un exemple à adapter avec les éléments fournis.

Cdlt.

Public Sub Sort_Data()
Dim rng As Range, lastRow As Long
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, 7).End(xlUp).Row
        Set rng = .Cells(5, 7).Resize(lastRow - 4)
        With .Sort
            .SortFields.Clear
            .SortFields.Add Key:=rng(1, 1), SortOn:=xlSortOnValues, Order:=xlDescending
            .SetRange rng
            .Header = xlYes
            .Apply
        End With
    End With
End Sub

Bonjour,

Autre solution :

    nb_demandes = Application.CountA(Columns("G"))
    ActiveSheet.Range("G5").Resize(nb_demandes).Sort key1:=Range("G5"), order1:=xlDescending, Header:=xlYes

Bonsoir Jean-Eric et Thev,

Merci pour vos retours, je vais les tester.

Thev, pour la variable nb_demandes ai-je besoin de la déclarer ?

Merci,

Horusbk

Thev, pour la variable nb_demandes ai-je besoin de la déclarer ?

bien sûr

dim nb_demandes as long

Bonjour,

Merci Thev pour cette précision !

Vos deux solutions me conviennent, merci encore pour votre aide. Je vais les exploiter

Horusbk

EDIT:

J'ai une erreur lors de l'exécution du code :

"Erreur d'exécution '438': Propriété ou méthode non gérée par cet objet". Qui pointe sur cette ligne en débogage :

ActiveSheet.Range("G5").Resize(nb_demandes).Sort key1:=Range("G5"), order1:=xlDescending, Header:=xlYes

Merci d'avance,

Horusbk.

J'ai une erreur lors de l'exécution du code :

"Erreur d'exécution '438': Propriété ou méthode non gérée par cet objet". Qui pointe sur cette ligne en débogage :

ActiveSheet.Range("G5").Resize(nb_demandes).Sort key1:=Range("G5"), order1:=xlDescending, Header:=xlYes

Si vous avez une erreur, c'est que nb_demandes = 0

nb_demandes = Application.CountA(Columns("G"))

Application.CountA(Columns("G")) compte le nombre de cellules non vides en colonne G : =NBVAL(G:G)

Alors le mieux est de conditionner le tri :

    If nb_demandes > 0 Then ActiveSheet.Range("G5").Resize(nb_demandes).Sort key1:=Range("G5"), order1:=xlAscending, Header:=xlYes

Bonjour Thev,

J'y comprends rien... parfois j'ai le message d'erreur et d'autre fois non. Bizarre et même avec le conditionnement j'ai ce même message d'erreur (parfois).

Toutefois, avec ce code ce n'est que la colonne G (avec le filtre en "G5") qui est trié. Est-il possible de trier, toujours sur cette colonne, mais en élargissant le trie aux autres lignes du tableau ?

Horusbk

J'y comprends rien... parfois j'ai le message d'erreur et d'autre fois non. Bizarre et même avec le conditionnement j'ai ce même message d'erreur (parfois).

C'est peut-être alors que ce n'est pas la bonne feuille qui est active. En modifiant le code ainsi, il ne peut s'appliquer qu'à votre feuille VAE

   With Sheets("VAE")
        nb_demandes = Application.CountA(.Columns("G"))
        If nb_demandes > 0 Then .Range("G5").Resize(nb_demandes).Sort key1:=.Range("G5"), order1:=xlDescending, Header:=xlYes
    End With

Toutefois, avec ce code ce n'est que la colonne G (avec le filtre en "G5") qui est trié. Est-il possible de trier, toujours sur cette colonne, mais en élargissant le trie aux autres lignes du tableau ?

Si vous voulez élargir le tri à l'ensemble des colonnes utilisées de votre feuille, vous pouvez utiliser ce code

     With Sheets("VAE")
        nb_demandes = Application.CountA(.Columns("G"))
        If nb_demandes > 0 Then .UsedRange.EntireColumn.Rows(5).Resize(nb_demandes).Sort key1:=.Range("G5"), order1:=xlDescending, Header:=xlYes
    End With

Merci Thev pour cet update.

Plus de problème avec le message d'erreur lors de l'exécution du code. Peut-être une faute de frappe de mon côté

Merci encore, je passe en résolu !

Horusbk

Rechercher des sujets similaires à "trie decroissant vba"