Comment trier une colonne par des dates via VBA
phirexian
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
phirexian Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
phirexian Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Comment trier une colonne par des dates via VBA
- Trier colonne excel - Guide
- Déplacer une colonne excel - Guide
- Comment faire des colonnes sur word - Guide
- Formule somme excel colonne - Guide
- Nombre de jours entre deux dates excel - Guide
2 réponses
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
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