XL 2016 filtrer sous condition colonne date trimestriellement en vba

Excellerateur

XLDnaute Occasionnel
Bonjour chers membres!

je cherche à automatiser le filtrage de la colonne date dans mon code et que cela ne soit pas en dur.


je m'explique:
Au début de ma macro je définis le choix du trimestre que je voudrais prendre en compte (Q1, Q2, Q3 ou Q4) comme défini en début de macro.

Je voudrais qu'une fois qu'on a choisi le trimestre, que le tri correspondant se fasse automatiquement sur le trimestre associé (voir code ci-dessous).

VB:
NomPro = "Gates"
Annee = Sheets("Boutons").Range("B16").Value            'ici j'ai associé la date à une cellule particulière afin qu'elle puisse être modifiée au besoin par l'utilisateur'
Trimestre = "Sheets("Boutons").Range("B16").Value"  'pareil ici j'ai défini une cellule dans laquelle on saisi le trimestre (Q2 par exemple)''


Worksheets.Add After:=ActiveSheet
    ActiveSheet.Name = "Regroupement_" & Trimestre
    Sheets("Bill").Select
    DerniereLigne = Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("$A$1:$L$" & DerniereLigne).AutoFilter Field:=3, Criteria1:= _
        ">=04/01/" & Annee, Operator:=xlAnd, Criteria2:="<=06/30/" & Annee

En gros je crois que dans une première étape il y aura une condition "si" qui devra pointer le trimestre sélectionné, puis en fonction de la sélection , faire les filtres.

J'espère que ma description est assez claire.
Comme j'aime bien le préciser, je ne connais pas le vba, je suis en plein apprentissage dans le tas.


Merci d'avance à tous les contributeurs.
 
Solution
C
Bonjour Excellerateur

Tu peux utiliser un truc du style
VB:
Sub Test()
  Dim MoisDeb As Integer, MoisFin As Integer, jFin As Integer
  Dim NomPro As String, Annee As Integer, sTrim As String
  NomPro = "Gates"
  Annee = Sheets("Boutons").Range("B16").Value       'ici j'ai associé la date à une cellule particulière afin qu'elle puisse être modifiée au besoin par l'utilisateur'
  sTrim = Sheets("Boutons").Range("B17").Value   ' pareil ici j'ai défini une cellule dans laquelle on saisi le trimestre (Q2 par exemple)''
  Select Case sTrim
    Case "Q1": MoisDeb = 1: MoisFin = 3: jFin = 31
    Case "Q2": MoisDeb = 4: MoisFin = 6: jFin = 30
    Case "Q3": MoisDeb = 7: MoisFin = 9: jFin = 30
    Case "Q4": MoisDeb = 10: MoisFin = 12: jFin = 31...
C

Compte Supprimé 979

Guest
Bonjour Excellerateur

Tu peux utiliser un truc du style
VB:
Sub Test()
  Dim MoisDeb As Integer, MoisFin As Integer, jFin As Integer
  Dim NomPro As String, Annee As Integer, sTrim As String
  NomPro = "Gates"
  Annee = Sheets("Boutons").Range("B16").Value       'ici j'ai associé la date à une cellule particulière afin qu'elle puisse être modifiée au besoin par l'utilisateur'
  sTrim = Sheets("Boutons").Range("B17").Value   ' pareil ici j'ai défini une cellule dans laquelle on saisi le trimestre (Q2 par exemple)''
  Select Case sTrim
    Case "Q1": MoisDeb = 1: MoisFin = 3: jFin = 31
    Case "Q2": MoisDeb = 4: MoisFin = 6: jFin = 30
    Case "Q3": MoisDeb = 7: MoisFin = 9: jFin = 30
    Case "Q4": MoisDeb = 10: MoisFin = 12: jFin = 31
  End Select
    Worksheets.Add After:=ActiveSheet
    ActiveSheet.Name = "Regroupement_" & trimestre
    Sheets("Bill").Select
    DerniereLigne = Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("$A$1:$L$" & DerniereLigne).AutoFilter Field:=3, Criteria1:= _
        ">=" & MoisDeb & "/01" & "/" & Annee, Operator:=xlAnd, Criteria2:="<=" & MoisFin & "/" & jFin & "/" & Annee
End Sub

A+
 

Excellerateur

XLDnaute Occasionnel
Bonjour Excellerateur

Tu peux utiliser un truc du style
VB:
Sub Test()
  Dim MoisDeb As Integer, MoisFin As Integer, jFin As Integer
  Dim NomPro As String, Annee As Integer, sTrim As String
  NomPro = "Gates"
  Annee = Sheets("Boutons").Range("B16").Value       'ici j'ai associé la date à une cellule particulière afin qu'elle puisse être modifiée au besoin par l'utilisateur'
  sTrim = Sheets("Boutons").Range("B17").Value   ' pareil ici j'ai défini une cellule dans laquelle on saisi le trimestre (Q2 par exemple)''
  Select Case sTrim
    Case "Q1": MoisDeb = 1: MoisFin = 3: jFin = 31
    Case "Q2": MoisDeb = 4: MoisFin = 6: jFin = 30
    Case "Q3": MoisDeb = 7: MoisFin = 9: jFin = 30
    Case "Q4": MoisDeb = 10: MoisFin = 12: jFin = 31
  End Select
    Worksheets.Add After:=ActiveSheet
    ActiveSheet.Name = "Regroupement_" & trimestre
    Sheets("Bill").Select
    DerniereLigne = Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("$A$1:$L$" & DerniereLigne).AutoFilter Field:=3, Criteria1:= _
        ">=" & MoisDeb & "/01" & "/" & Annee, Operator:=xlAnd, Criteria2:="<=" & MoisFin & "/" & jFin & "/" & Annee
End Sub

A+
Bonjour cher fil, bonjour forum,

@BrunoM45 je crois qu je me suis précipité dans mes conclusions.
lorsque j'essaye de faire le filtre ça me fait une sélection vide.

Voici en image le code que j'ai adapté sur mon fichier

1663746773869.png

Je ne sais pas si il y une erreur en fait
 

Pièces jointes

  • Filtre1.PNG
    Filtre1.PNG
    8.8 KB · Affichages: 23
  • 1663746720171.png
    1663746720171.png
    22.4 KB · Affichages: 23
Dernière édition:

Excellerateur

XLDnaute Occasionnel
Bonjour Excellerateur

Tu peux utiliser un truc du style
VB:
Sub Test()
  Dim MoisDeb As Integer, MoisFin As Integer, jFin As Integer
  Dim NomPro As String, Annee As Integer, sTrim As String
  NomPro = "Gates"
  Annee = Sheets("Boutons").Range("B16").Value       'ici j'ai associé la date à une cellule particulière afin qu'elle puisse être modifiée au besoin par l'utilisateur'
  sTrim = Sheets("Boutons").Range("B17").Value   ' pareil ici j'ai défini une cellule dans laquelle on saisi le trimestre (Q2 par exemple)''
  Select Case sTrim
    Case "Q1": MoisDeb = 1: MoisFin = 3: jFin = 31
    Case "Q2": MoisDeb = 4: MoisFin = 6: jFin = 30
    Case "Q3": MoisDeb = 7: MoisFin = 9: jFin = 30
    Case "Q4": MoisDeb = 10: MoisFin = 12: jFin = 31
  End Select
    Worksheets.Add After:=ActiveSheet
    ActiveSheet.Name = "Regroupement_" & trimestre
    Sheets("Bill").Select
    DerniereLigne = Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("$A$1:$L$" & DerniereLigne).AutoFilter Field:=3, Criteria1:= _
        ">=" & MoisDeb & "/01" & "/" & Annee, Operator:=xlAnd, Criteria2:="<=" & MoisFin & "/" & jFin & "/" & Annee
End Sub

A+
Bonjour cher fil, bonjour @BrunoM45,

En effet @BrunoM45 (sans prétention aucune), j'ai comme l'impression que le code ne prend pas en compte la sélection du trimestre tel que défini en amont (Q1, Q2, Q3, Q4).

Merci d'avance
 

Excellerateur

XLDnaute Occasionnel
Salut Excellerateur

Sans fichier... comment dire :rolleyes::eek:
Salut,

En effet je suis en stage dans une entreprise et je ne peux pas transmettre les fichiers originaux (si non fin de stage et autres risques), c'est pourquoi j'ai fais une réplique du fichier mais qui n'aura pas le code correspondant.

Je me réexplique:
J'ai deux tableaux avec les mêmes intitulés de colonnes (Onglets "Bill" et "Gates Q2") que je souhaite associer dans un seul (onglet "consolide").
Le souci c'est que mon tableau "bill" lui il est sur un an alors que le tableau "Gates Q2" lui il est bien trimestriel à chaque fois (dans cet exemple il est sur le trimestre 2).

Je voudrais donc pouvoir automatiser le filtrage de "Bill" sur le trimestre correspondant (bien entendu celui qui correspondra à "Gates Q2") avant de fusionner les deux dans un seul tableaux dans "Consolide" (Confère fichier).

Je ne sais pas si c'est compris cette fois.

merci d'avance encore une fois
 

Pièces jointes

  • Prime test (2).xlsm
    778.6 KB · Affichages: 2
C

Compte Supprimé 979

Guest
Re,

Je suis navré, mais chez moi cela fonctionne 🤔 n'avez-vous pas un Excel version US !?

Pour finaliser le code par la copie des données, voici
VB:
Sub Test()
  Dim dLig As Long
  Dim MoisDeb As Integer, MoisFin As Integer, jFin As Integer
  Dim NomPro As String, Annee As Integer, sTrim As String
  NomPro = "Gates"
  ' Récupérer l'année indiquée par l'utilisateur
  Annee = Sheets("Boutons").Range("B16").Value
  ' Récupérer le trimestre indiqué par l'utilisateur
  sTrim = Sheets("Boutons").Range("B17").Value
  ' Selon le trimestre choisi, définir les variables
  Select Case sTrim
    Case "Q1": MoisDeb = 1: MoisFin = 3: jFin = 31
    Case "Q2": MoisDeb = 4: MoisFin = 6: jFin = 30
    Case "Q3": MoisDeb = 7: MoisFin = 9: jFin = 30
    Case "Q4": MoisDeb = 10: MoisFin = 12: jFin = 31
  End Select
  Worksheets.Add After:=ActiveSheet
  ActiveSheet.Name = "Regroupement_" & sTrim
  With Sheets("Bill")
    dLig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("$A$1:$L$" & dLig).AutoFilter Field:=3, Criteria1:= _
      ">=" & MoisDeb & "/01" & "/" & Annee, Operator:=xlAnd, Criteria2:="<=" & MoisFin & "/" & jFin & "/" & Annee
    .Range("A1").CurrentRegion.Copy
  End With
  Sheets("Regroupement_" & sTrim).Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
End Sub

Pensez à utiliser l'enregistreur de macros 😜

Voici le fichier avec le résultat via la macro, vous ne pourrez que constater que cela fonctionne (en tout cas chez moi)
 

Pièces jointes

  • Excellerateur_Prime test.xlsm
    810.2 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 183
Membres
112 677
dernier inscrit
Justine11