Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 😎
 

Pièces jointes

Dernière édition:
Re : Filtrer un simple tableau par trimestre

Bonsoir gosselien,

MDR😀

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


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+ 😎
 
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

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
 
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:
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

Dernière édition:
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

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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
901
B
  • Question Question
Réponses
3
Affichages
1 K
O
Réponses
4
Affichages
1 K
Olocsob
O
E
Réponses
1
Affichages
1 K
G
  • Question Question
Réponses
1
Affichages
773
Grouchet
G
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…