trier des données, par colonne, pour chaque année

soif77

XLDnaute Nouveau
bonjour,

merci pour les reponses que j'ai eu recemment, cool ce forum !

j en ai une autre....lol

comment je peux faire pour, a partir d'un tableau d'archives(avec des dates donc), pouvoir classer ces infos par année ? en fait, je veux que tous les enregistrments de 2006, se mettent en colonne B, tous ceux de 2007 en colonne C etc. et encore mieux : le faire a partir de date de débu et date de fin ?

hier j ai pu grace au forum trier entre 2 dates, a partir d'une macro, et je veux maintenant pouvoir les classer par année, ou mois, peu importe

une idée

je sais pas si je suis clair, mais merci en tou ca !
 

Cousinhub

XLDnaute Barbatruc
Re : trier des données, par colonne, pour chaque année

Bonsoir,

Pour ton problème, je me sers du filtre élaboré.....

Regarde le fichier joint...

Le code :

Code:
Sub tri_annee()
Dim Annees As Object, Cel As Range
Dim It
Application.ScreenUpdating = False
Set Annees = CreateObject("Scripting.Dictionary")
Range("B1:IV1000").ClearContents
Range("A1:A" & [A65000].End(xlUp).Row).Name = "base"
Range("A2:A" & [A65000].End(xlUp).Row).Name = "base2"
For Each Cel In [base2]
    If Not Annees.Exists(Year(Cel)) Then Annees.Add Year(Cel), Year(Cel)
Next Cel
For Each It In Annees.Items
    With [IV1].End(xlToLeft)
        x = .Offset(0, 2).Resize(2, 1).Address
        y = .Offset(0, 1).Address
        Range(y).Value = [A1]
        .Offset(1, 2).FormulaR1C1 = "=YEAR(RC1)=" & It
        Range("base").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range(x), CopyToRange:=Range(y)
        Range(y) = It
    End With
Next It
Range(x).ClearContents
End Sub

le fichier exemple :

Edit, pour tester, clique sur le rectangle jaune "Date", bonne soirée
 

Pièces jointes

  • soif77_v1.zip
    9.6 KB · Affichages: 55
Dernière édition:

soif77

XLDnaute Nouveau
Re : trier des données, par colonne, pour chaque année

bhbh,

cela marche, nikel, cependant je voudrais mettre une limite à ça. C'est-à-dire que j'aimerai avoir seulement les 3 dernières années, voir les 5. Car si j'ai 10 années d'enregistrments ca me sort les 10 et pour moi c'est inutile. Saurais-tu comment faire ça ?
 

chris

XLDnaute Barbatruc
Re : trier des données, par colonne, pour chaque année

Bonjour

Ne connaissant pas le dictionnary que me fait découvrir bhbh (je le salue amicalement et le remercie de cette nouveauté pour moi), j'ai modifié son code pour limiter à 3 ans en utilisant un array
Code:
Sub tri_annee()
Dim Annees As Object, Cel As Range
Dim It
Application.ScreenUpdating = False
Set Annees = CreateObject("Scripting.Dictionary")
Range("B1:IV1000").ClearContents
Range("A1:A" & [A65000].End(xlUp).Row).Name = "base"
Range("A2:A" & [A65000].End(xlUp).Row).Name = "base2"
For Each Cel In [base2]
    If Not Annees.Exists(Year(Cel)) Then Annees.Add Year(Cel), Year(Cel)
Next Cel
'Conversion du dictionnary en array
aItems = Annees.Items
z = UBound(aItems)
For i = z - 2 To z
    It = aItems(i)
    With [IV1].End(xlToLeft)
        x = .Offset(0, 2).Resize(2, 1).Address
        y = .Offset(0, 1).Address
        Range(y).Value = [A1]
        .Offset(1, 2).FormulaR1C1 = "=YEAR(RC1)=" & It
        Range("base").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range(x), CopyToRange:=Range(y)
        Range(y) = It
    End With
Next i
Range(x).ClearContents
End Sub

PS : j'ai oublié de préciser que le code fonctionne si les dates initiale sont bien classées en ordre croissant
 
Dernière édition:

soif77

XLDnaute Nouveau
Re : trier des données, par colonne, pour chaque année

chris,

je sais pas si t as eu mon message d avant mais maintenat il me met ca

It = aItems(i)

"Erreur d'exécution 9 : l'indice n'appartient pas à la sélection"

Sais tu pourquoi ?

Merci en tout cas
 

Discussions similaires

Réponses
3
Affichages
446