[Résolu par job75] Filtrer un simple tableau par trimestre

Lone-wolf

XLDnaute Barbatruc
Bonsoir le forum,

il paraît que l'on trouve tout sur le web et pourtant...

Je cherche à trier un tableau trimestre par trimestre au lancement d'une combobox parametrée comme ceci.


Code:
Sub Combo2()
 Dim j As Integer
    Feuil1.ComboBox2.Clear
    
    With Feuil1
    For j = 2 To .Range("a65536").End(xlUp).Row
        .ComboBox2 = DatePart("q", .Range("a" & j))
        If .ComboBox2.ListIndex = -1 Then .ComboBox2.AddItem DatePart("q", .Range("a" & j))
    Next j
    .ComboBox2.ListIndex = -1
    End With
    End Sub

Le problème c'est que je ne trouve pas une syntaxe pour pouvoir le faire. Une idée?


A bientôt :cool:
 

Pièces jointes

  • Classeur-test.xls
    45.5 KB · Affichages: 46
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Filtrer un simple tableau par trimestre

Bonsoir gosselien,

MDR:D

Et bien voilà, j'ai trouver une solution, peut-être peut-on l'améliorer. :rolleyes:


Code:
Dim x as integer
___________________________________

Private Sub ComboBox2_Change()

x = Me.ComboBox2.Value
If x = 1 Then
    ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=1, Criteria1:= _
        xlFilterAllDatesInPeriodQuarter1, Operator:=xlFilterDynamic
     x = x + 1
 ElseIf x = 2 Then
    ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=1, Criteria1:= _
        xlFilterAllDatesInPeriodQuarter2, Operator:=xlFilterDynamic
        x = x + 1
ElseIf x = 3 Then
    ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=1, Criteria1:= _
        xlFilterAllDatesInPeriodQuarter3, Operator:=xlFilterDynamic
        x = x + 1
ElseIf x = 4 Then
    ActiveSheet.ListObjects("Tableau9").Range.AutoFilter Field:=1, Criteria1:= _
        xlFilterAllDatesInPeriodQuarter4, Operator:=xlFilterDynamic
End If
End Sub


A+ :cool:
 

job75

XLDnaute Barbatruc
Re : Filtrer un simple tableau par trimestre

Bonsoir Lone-wolf, gosselien,

Avec le filtre avancé ce n'est quand même pas la mer à boire :

Code:
Private Sub ComboBox1_Change()
[C2] = "=(IF(E$1=""Toute année"",1,YEAR(A2)=--E$1))*(IF(H$1=""Tout trimestre"",1,1+INT((MONTH(A2)-1)/3)=--LEFT(H$1)))"
[A1].CurrentRegion.AdvancedFilter xlFilterInPlace, [C1:C2]
[C2] = ""
End Sub

Private Sub ComboBox2_Change()
ComboBox1_Change
End Sub
Les ComboBoxes sont alimentées classiquement dans la Workbook_Open.

Fichier joint.

Bonne nuit.
 

Pièces jointes

  • Classeur-test(1).xls
    84.5 KB · Affichages: 47

Lone-wolf

XLDnaute Barbatruc
Re : Filtrer un simple tableau par trimestre

Bonjour job,

j'ai enregistrer la macro en passant par le filtre avancé justement. Mais faire la macro comme toi tu l'a fait, j'en suis encore au stade de croissance (nouveau né ;) ).

Merci mille fois encore pour ton aide.


Amicalement Lone-wolf
 

Lone-wolf

XLDnaute Barbatruc
Re : Filtrer un simple tableau par trimestre

Bonjour job,

j'ai enregistrer la macro en passant par le filtre avancé justement. Mais faire la macro comme toi tu l'a fait, j'en suis encore au stade de croissance (nouveau né ;) ).

Merci mille fois encore pour ton aide.

Désolé pour le doublon du message, il y a eu un bloccage du navigateur.


Amicalement Lone-wolf
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : [Résolu par job75] Filtrer un simple tableau par trimestre

Bonjour Lone-wolf, le forum,

Dans ce fichier (2) la feuille est protégée.

La colonne A bien sûr et les cellules liées E1 et H1 doivent être déverrouillées.

Le code de la feuille :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:A]) Is Nothing Then Exit Sub
[E1] = "Toute année"
[H1] = "Tout trimestre"
End Sub

Private Sub ComboBox1_Change()
[C2] = "=(IF(E$1=""Toute année"",1,YEAR(A2)=--E$1))*(IF(H$1=""Tout trimestre"",1,1+INT((MONTH(A2)-1)/3)=--LEFT(H$1)))"
[A1].CurrentRegion.AdvancedFilter xlFilterInPlace, [C1:C2]
[C2] = ""
End Sub

Private Sub ComboBox2_Change()
ComboBox1_Change
End Sub
Dans ThisWorkbook :

Code:
Private Sub Workbook_Open()
With Feuil1
  .ComboBox1.List = Array(2015, 2016, 2017, 2018, 2019, 2020, "Toute année")
  .ComboBox2.List = Array("1er trimestre", "2ème trimestre", "3ème trimestre", "4ème trimestre", "Tout trimestre")
  .Protect "TOTO", UserInterfaceOnly:=True
End With
End Sub
Bonne journée.
 

Pièces jointes

  • Classeur-test(2).xls
    85 KB · Affichages: 47
Dernière édition:

job75

XLDnaute Barbatruc
Re : [Résolu par job75] Filtrer un simple tableau par trimestre

Re,

L'inconvénient des ComboBoxes c'est qu'il est difficile d'éviter l'invite à la fermeture (sans modifications).

Il vaut mieux utiliser des listes de validation :

Code:
Private Sub Workbook_Open()
Feuil1.Protect "TOTO", UserInterfaceOnly:=True
Me.Saved = True 'évite l'invite à la fermeture
End Sub
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [E1,G1]) Is Nothing Then
  [C2] = "=(IF(E$1=""Toute année"",1,YEAR(A2)=--E$1))*(IF(G$1=""Tout trimestre"",1,1+INT((MONTH(A2)-1)/3)=--LEFT(G$1)))"
  [A1].CurrentRegion.AdvancedFilter xlFilterInPlace, [C1:C2]
  [C2] = ""
ElseIf Not Intersect(Target, [A:A]) Is Nothing Then
  [E1] = "Toute année"
  [G1] = "Tout trimestre"
End If
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Classeur-test(3).xls
    75.5 KB · Affichages: 53

Lone-wolf

XLDnaute Barbatruc
Re : [Résolu par job75] Filtrer un simple tableau par trimestre

Bonsoir job,

merci pour ces infos. Mais je ne comprend pas " il est difficile d'éviter l'invite à la fermeture (sans modifications)."

Qu'est-ce que ça veux dire?


Ps: je pense avoir compris mais... dans ThisWorkbook avant fermeture, on peut mettre Application.DisplayAlerts = False: ActiveWorkbook.Save.



Amicalement Lone-wolf
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 888
Membres
103 404
dernier inscrit
sultan87