Tri automatique des dates

Bonjour à Toutes et Tous,

Je me suis créé un tableau sur Excel pour mes relances commerciales et ce dernier me sert au quotidien.

Je souhaiterais que ce dernier puisse trier les dates (colonne E) en ordre croissant (et toutes les lignes forcément) à chaque nouvelle entrée , cela me ferait gagner beaucoup de temps dans mon travail. Je ne connais pas du tout VBA et cela me parait très compliqué.

Pourriez-vous m'aider svp ? Si vous avez des commentaires d'amélioration à me faire sur ce tableau, n'hésitez pas. Toutes les bonnes idées sont les bienvenues.

Je vous remercie sincèrement d'avance.

Très bonne journée à vous tous.

36tdb.xlsx (74.49 Ko)

Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ln%
    ln = Me.Cells(Rows.Count, 3).End(xlUp).Row
    If Not Intersect(Target, Me.Range("E2:E" & ln)) Is Nothing Then
        With Me.Range("A1:AC" & ln)
            .Sort key1:=.Cells(1, 5), order1:=xlAscending, Header:=xlYes
        End With
    End If
End Sub

A placer dans le module de la feuille.

Cordialement.

Bonjour MFerrand,

Je vous remercie beaucoup de votre réponse. J'avoue ne pas savoir ce qu'est le module. Pourriez-vous m'en dire plus svp ?

Je vous remercie vraiment d'avance.

Clic droit sur l'onglet > Visualiser le code > ce qui t'amène dans l'éditeur VBA, directement sur le module de la feuille.

Tu y colles la macro, qui interviendra automatiquement à chaque changement dans la colonne E de ton tableau.

Cordialement.

Merci beaucoup de ton retour rapide.

Je suis sincèrement désolé mais je ne vois pas du tout l'onglet "Visualiser le code".

Je suis vraiment nul.

Pourrais-tu m'éclairer stp ?

Encore merci d'avance.

Visualiser le code figure dans le menu contextuel du clic droit sur un onglet.

Apprendre à se servir d'Excel est un pré-requis !

Tu as raison.

Je suis désolé mais je ne vois pas du tout comment faire et ou cela se trouve, à partir de mon fichier.

Je fais clique droit, par exemple, sur la première date et voilà ce que j'ai :

Comment dois-je procéder stp ?

Je te remercie d'avance de ta compréhension.

print ecran

Sais-tu ce qu'est un onglet ?

2017 12 12 155359

Oui c'est bon, j'ai réussi grâce à toi. Ouiiiiiiiiiiiiiiiiiiiiiiii. Un énorme merci.

Je me permets de te poser une dernière question stp car cela m'intéresse beaucoup.

Que signifient tous ces codes stp ?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ln%

ln = Me.Cells(Rows.Count, 3).End(xlUp).Row

If Not Intersect(Target, Me.Range("E2:E" & ln)) Is Nothing Then

With Me.Range("A1:AC" & ln)

.Sort key1:=.Cells(1, 5), order1:=xlAscending, Header:=xlYes

End With

End If

End Sub

Si je voulais trier les dates par date de relance, comment devrais-je procéder stp ?

Bonjour,

Lorsque tu cites du code, mets le sous balises Code, l'indentation en sera conservée, ce sera beaucoup plus lisible, et tout le monde t'en saura gré !

La procédure déclarée par :

Private Sub Worksheet_Change(ByVal Target As Range)

est une procédure dite évènementielle, c'est à dire qui se déclenche automatiquement chaque fois que l'évènement Change (modification du contenu d'une ou plusieurs cellules de la feuille) survient sur la feuille à laquelle le module dans lequel elle se trouve est attaché.

Elle ne fonctionnera que dans un module de feuille de calcul et uniquement pour la feuille concernée par le module.

Sache aussi que l'on évite d'écrire la déclaration d'une évènementielle soi-même, on laisse VBA le faire, par sélection de l'objet (ici Worksheet) dans la liste déroulante gauche du module qui produit la déclaration de la proc. d'évènement par défaut (SelectionChange pour Worksheet), puis étant positionné dans cette proc. par sélection de l'évènement dans la liste déroulante droite. (Ensuite on efface ce qu'on n'utilise pas.) Cela évite pas mal d'erreurs.

Lorsque l'évènement survient, la proc. est lancée en signalant l'emplacement de la modification : Target qui figure en argument indique la plage modifiée.

ln est une variable déclarée de type Integer, destinée à dimensionner ton tableau en recueillant la dernière ligne utilisée.

Me, dans un module d'objet, désigne toujours l'objet, donc ici c'est la feuille Devis.

On recherche la dernière ligne utilisée en partant de la dernière ligne de la colonne 3 (C) avec la méthode End et en remontant (xlUp) : Row renverra le numéro de ligne.

On teste ensuite si Target (cellule modifiée) se trouve dans la colonne E du tableau (E2:E à ln) en considérant l'intersection de ces deux plages : si elle existe (n'est pas Nothing) on poursuit, sinon rien ne se passe.

Si le test est positif, on applique à la totalité du tableau un tri croissant sur la colonne E.

Si tu voulais trier sur un autre critère, tu changes la clé de tri : .Cells(1, 1) te fera trier sur la colonne A...

Cordialement.

Merci beaucoup de ta réponse et de ton aide. C'est super.

Je te souhaite une très bonne journée.

Bonjour stephdu44,

Tu a écrit :

Merci beaucoup de ta réponse et de ton aide. C'est super.

C'est très bien que MFerrand t'a aidé à résoudre ton problème ; quand un de tes exercices est résolu, tu dois le passer en résolu, mais ce n'est pas en affichant le petit panneau « Si ton problème est résolu... » ! c'est en cliquant sur la coche ☑ du message de 5:00 de MFerrand qui a résolu ton problème.

Cordialement

Bonjour MFerrand,

Je me permets de te solliciter à nouveau car je souhaiterais avoir tes conseils précieux pour m'aider.

Sur le tableau joint, je souhaiterais :

  • Feuille option : avoir les dates (colonne E) dans l'ordre croissant (ex : janvier 2018 à décembre 2018)
  • Feuille Résas en cours : avoir les dates (colonne E) dans l'ordre croissant (ex : janvier 2018 à décembre 2018)
  • Feuille Résas 2017 : avoir les dates (colonne E) dans l'ordre décroissant (ex : décembre 2018 à janvier 2018)
  • Feuille Perdus : avoir les dates (colonne E) dans l'ordre décroissant (ex : décembre 2018 à janvier 2018)
  • Feuille Archives : avoir les dates (colonne E) dans l'ordre décroissant (ex : décembre 2018 à janvier 2018)

Je te remercie vraiment d'avance car je n'arrive pas du tout avec VBA, tout seul.

Très bonne journée à toi

2tableau.xlsm (548.26 Ko)

Bonjour,

Il s'agit de faire la même chose que précédemment sur plusieurs feuilles, avec une petite variante, c'est que l'ordre peut être croissant ou décroissant. Et une autre petite variante, c'est que l'extension du tableau en colonnes peut être différente.

On pourrait dupliquer la première procédure établie, pour chaque feuille en l'adaptant, mais il y a mieux à faire !

VBA nous offre la possibilité de programmer les évènements de feuille au niveau classeur : si cela n'a pas d'intérêt (au contraire) lorsqu'une seule feuille est concernée, cela en prend dès lors que plusieurs feuilles le sont, car on n'a plus qu'à établir une seule procédure là où il en aurait fallu autant que de feuilles...

L'équivalent de la procédure Change au niveau classeur est une procédure SheetChange : logique, elle ne réagit pas pour une seule feuille, mais pour toutes. Sa déclaration diffère aussi légèrement, si elle nous renvoie la plage modifiée (comme la procédure feuille), elle nous passe également la feuille concernée. Avec ces éléments on peut donc parfaitement adapter notre procédure au niveau classeur...

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim ln%, k%, ord%
    ln = Sh.Cells(Rows.Count, 3).End(xlUp).Row
    If ln <= 2 Then Exit Sub
    If Not Intersect(Target, Sh.Range("E2:E" & ln)) Is Nothing Then
        k = Sh.Cells(1, Columns.Count).End(xlToLeft).Column
        Select Case Sh.Name
            Case "Options", "Résas en cours": ord = xlAscending
            Case Else: ord = xlDescending
        End Select
        With Sh.Range("A1").Resize(ln, k)
            .Sort key1:=.Cells(1, 5), order1:=ord, Header:=xlYes
        End With
    End If
End Sub

On le voit, on procède donc comme auparavant, mais là on l'on utilisait Me pour désigner la feuille, on aura Sh pour cibler la bonne feuille. On recherche l'extension en ligne du tableau (comme auparavant, mais on prend la précaution d'interrompre s'il n'y a pas de ligne de données ou une seule, pas de tri à faire dans ce cas...) On vérifie également que la colonne E est impactée, et si c'est le cas, alors on va définir l'ordre de tri dans une variable, selon le nom de la feuille. On récupère également l'extension en colonnes du tableau.

Et muni de ces informations, l'opération va se dérouler comme précédemment...

NB- Toutes les feuilles sont concernées dans le classeur. Si ce n'était pas le cas, il conviendrait lors des tests d'interrompre si la feuille n'était pas concernée.

Cordialement.

Bonjour MFerrand,

J'essaie de t'envoyer le document car celui-ci est trop volumineux en MP.

Je te remercie beaucoup de ton aide.

Si tu mets la macro du post précédent dans un module de feuille, elle n'a aucune chance de jamais s'exécuter car c'est une évènement de niveau classeur et elle doit donc être placé dans son module ThisWorkbook.

J'y ai replacé la version modifié et supprimé les morceaux subsistant dans les feuilles...

Cordialement.

BonjourMFerrand,

Je te remercie vraiment pour tout ce que tu as fait et pour ta disponibilité.

A très bientôt.

Rechercher des sujets similaires à "tri automatique dates"