Tri cellule

Bonjour,

Je vous expose ma problématique : je fais mes comptes sur Excel et du coup cela arrive que les dépenses et recettes ne soient pas triées chronologiquement.

J'avais récupérer une macro pour trier automatiquement du plus ancien au plus récent et également pour qu'à chaque fois que je l'utilise, ma cellule active se retrouve aux alentours de mes dernières lignes de compte rentrées :

Sub TriDate()
'
' TriDate Macro
'
' Touche de raccourci du clavier: Ctrl+m
'
    Columns("A:F").Select
    Range("F684").Activate
    ActiveWorkbook.Worksheets("Comptes").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Comptes").Sort.SortFields.Add Key:=Range("C2:C9000" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Comptes").Sort
        .SetRange Range("A1:F9000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Range("B999").Select
End Sub

Le problème c'est que je dois régulièrement retourner dans la macro pour modifier l'avant-dernière ligne "Range("B999").Select

J'aimerais savoir s'il y a une solution pour que lorsque j'utilise ma touche de raccourcie afin d'activer la macro, la cellule se positionne automatiquement sur la dernière ligne de compte rentrée (ou bien la première cellule vide juste en-dessous n'importe).

Je joins un fichier d'exemple.

5test.xlsm (54.05 Ko)

Bonjour,

proposition d'adaptation

Sub TriDate()
'
' TriDate Macro
'
' Touche de raccourci du clavier: Ctrl+m
    With Sheets("comptes")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("B2:B" & dl ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SetRange .Range("A1:F" & dl)
        .Sort.Header = xlYes
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
        .Range("B" & dl + 1).Select
    End With
End Sub

Bonjour,

Merci de ta réponse

Malheureusement rien ne se passe

Edit : finalement j'ai trouvé une solution en naviguant un peu partout :

A la place de : Range("B999").Select

Je mets : Range("B9999").End(xlUp).Offset(1, 0).Select

Le 9999 est arbitraire, 10000 fonctionne tout autant.

Je n'ai pas vraiment compris comment ça fonctionne malheureusement mais ça fonctionne. ^^

Merci quand même !

Bonjour Dimit19,

D'après ta réponse, je pense que le code VBA de h2so4 aurait marché en changeant simplement un chiffre :

dl = .Cells(Rows.Count, 2).End(xlUp).Row

Ainsi, ça détectera la dernière cellule utilisée selon la colonne B et non plus selon la colonne A.

Je n'ai pas téléchargé ton fichier ; peut-être aussi faudrait-il mettre : .Sort.SetRange .Range("B1:F" & dl)

Rien ne t'empêche d'essayer de nouveau la macro TriDate() de h2so4.


Tu a écrit :

Je n'ai pas vraiment compris comment ça fonctionne malheureusement mais ça fonctionne. ^^

Pour ta ligne Range("B9999").End(xlUp).Offset(1, 0).Select elle signifie : on part de la cellule B9999 et on monte au-dessus jusqu'à trouver la 1ère cellule non vide, par exemple B19 ; ensuite, le .Offset(1, 0) fait un décalage ligne de +1 donc B20 ; et un décalage colonne de 0, donc même colonne Btoujours B20 ; le .Select sélectionne cette cellule.

À toi de vérifier si le décalage d'une ligne en dessous est adapté et justifié par rapport au travail à faire, ici la sélection d'une cellule ; si tu veux que la cellule active soit B20, c'est parfait ; si tu préfères qu'elle soit B19, enlève le .Offset(1, 0) devenu inutile :

Range("B9999").End(xlUp).Select

Si pour ton tableau tu remplis tellement de lignes que tu atteins ou dépasse la ligne 9999, ça ne marchera plus ! car il faut partir d'une cellule située sous la dernière ligne de données utilisée pour que ça marche !

il vaudrait mieux alors mettre : Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select

ou : Range("B" & Rows.Count).End(xlUp).Select

Rows.Count retourne le nombre de lignes maximum : 1 048 576 avec Excel 2007 (et versions ultérieures) ; 65 535 avec Excel 2003 (et versions antérieures).

dhany

Rechercher des sujets similaires à "tri"