Comment trier une colonne par des dates via VBA

Fermé
phirexian Messages postés 11 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 8 mars 2014 - 14 mai 2013 à 22:16
phirexian Messages postés 11 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 8 mars 2014 - 15 mai 2013 à 13:25
Mesdames Messieurs bonsoir,

Je souhaiterai vous prévenir à l'avance, je débute en VBA sous Excel , en effet cela fait seulement qu'une semaine que je découvre ce formidable outil.

Voilà mon problème, j'ai un tableau avec un nombre indéfini de ligne mais fini de colonnes à l'instar d'une base de données en réalité.

Dans la seconde colonne de ce tableau je n'ai que des cellules dont les valeurs sont des dates.

Et j'aimerai pouvoir trier chaque ligne auxquelles sont liées ces dates pour pouvoir avoir les lignes de la te date la plus ancienne à la date la plus récente, dans l'ordre chronologique.

Autrement dit je cherche à avoir la date la plus récente au plus bas de la colonne correspondante et la date la plus vieille au plus haute de cette dite colonne.

Voici le code que j'ai écrit, dans l'ensemble il semble fonctionner sauf à la fin oO!!

Sub Trie()
' Trie Macro

'Je cherche une cellule dont le nom est "date" et je la sélectionne
Cells.Find(what:="date").Activate

'Je sélectionne la cellule immédiatement en dessous
ActiveCell.Range("A1").Offset(1, 0).Activate

'Je mémorise l'adresse de cette cellule à l'aide d'une variable tampon "a"
a = ActiveCell.Address(ColumnAbsolute:=True)

'Je cherche une cellule dont le nom est "date" et je la sélectionne
Cells.Find(what:="date").Activate

'Tant que les cellules suivantes, sur la même colonne, ne sont pas vides, je déplace mon curseur d'une cellule vers
'le bas
While ActiveCell.Value <> ""
ActiveCell.Range("A1").Offset(1, 0).Activate
Wend

'Je sélectionne la cellule pleine immédiatement au dessus
ActiveCell.Range("A1").Offset(-1, 0).Activate

'Je mémorise l'adresse de cette cellule à l'aide d'une variable tampon "b"
b = ActiveCell.Address(ColumnAbsolute:=True)

'On appelle la fonction "Derline" qui permet de colorer la ligne en bleu, ce qui va nous servir de référence
'pour la suite
Call derline

'Je cherche une cellule dont le nom est "RT8" et je la sélectionne
Cells.Find(what:="RT8").Activate

'Je sélectionne la cellule immédiatement en dessous
ActiveCell.Range("A1").Offset(1, 0).Activate

'Tant que les cellules, sur la même ligne, n'ont pas la valeur "R7", je déplace mon curseur d'une cellule vers
'la droite
While ActiveCell.Value <> "R7"
ActiveCell.Range("A1").Offset(0, 1).Activate
Wend

'Je sélectionne la cellule immédiatement en dessous
ActiveCell.Range("A1").Offset(1, 0).Activate

'Tant que les cellules, sur la même ligne, n'ont pas la valeur "4", je déplace mon curseur d'une cellule vers
'la droite
While ActiveCell.Value <> "4"
ActiveCell.Range("A1").Offset(0, 1).Activate
Wend

'On sélectionne la cellule immédiatement en dessous
ActiveCell.Range("A1").Offset(1, 0).Activate

'Tant que la cellule sélectionnée n'est pas bleue, on sélectionne la cellule de la ligne suivante
While ActiveCell.Interior.Color <> 15773696
ActiveCell.Range("a1").Offset(1, 0).Activate
Wend

'Je mémorise l'adresse de cette cellule à l'aide d'une variable tampon "c"
c = ActiveCell.Address(ColumnAbsolute:=True)

'Je sélectionne la plage de cellule
Range("a:c").Select

ActiveWorkbook.Worksheets("PROTOTYPE").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("PROTOTYPE").Sort.SortFields.Add Key:=Range( _
"a:b"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("PROTOTYPE").Sort
.SetRange Range("a:c")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

'On appelle la fonction "Sans couleur" pour redonner sa couleur blanche à la ligne précédemment bleue
Call sans_couleur

End Sub

J'aimerai pouvoir laisser un lien sur mon tableau mais je ne sais pas comment? Pourriez-vous déjà m'aider à régler ce dernier problème ^^?

Mon problème est au sujet du ".Apply" 5, 6 lignes de code avant le "End Sub"
Et VBA m'indique ceci: "Erreur d'exécution 1004, référence de tri non valide. Vérifiez qu'elle se trouve bien parmi les données à trier et que la zone trier par n'est pas identique ou vide"

En d'autre termes je crois que VBA ne fait pas ce que je lui demande :S!!!!

Merci infiniment si vous ètes capable de m'aider sans le fichier^^ et / ou de comprendre le fond de ma pensée ainsi que mon code

Cordialement

Phirexian

2 réponses

phirexian Messages postés 11 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 8 mars 2014
14 mai 2013 à 22:35
Voilà mon fichier vous aller pouvoir voir où se trouve mon problème.

https://www.cjoint.com/c/CEowImLh8iT

Vous pouvez lancer la macro à l'aide du bouton Tri et elle se trouve dans le module n°2 de l'interface VBA

Merci infiniment pour votre aide

Cordialement
0
phirexian Messages postés 11 Date d'inscription mardi 14 mai 2013 Statut Membre Dernière intervention 8 mars 2014
15 mai 2013 à 13:25
Up

Pourriez-vous m'aider si le coeur vous en dit bien entendu!
0