XL 2016 Résolu : Rapport - Filtre élaboré

  • Initiateur de la discussion Initiateur de la discussion kingfadhel
  • Date de début Date de début

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 !

kingfadhel

XLDnaute Impliqué
Bonsoir à tous,

Je vous en pris, j'ai un problème qui me gêne depuis le matin.
J'ai un classeur avec plusieurs feuilles (mais je charge que les deux concernées), dans une contient les données et l'autre contient un gabarit de rapport.
je voudrais être capable à partir de n'importe quelle feuille extraire les données relatives à la date J-1 moyennant un macro ou un filtre élaboré et imprimer le rapport.

Remarque: J'ai un filtre élaboré dans l'une des autres feuilles.
tout est dans le classeur joint.
 

Pièces jointes

Bonsoir kingfadhel,

Avec une feuille "Modele" (à masquer) ce n'est pas très compliqué, la macro du bouton :
VB:
Sub Rapport()
Dim BD As Worksheet, R As Worksheet, M As Worksheet, lig&, i&
Set BD = Sheets("BD")
Set R = Sheets("Rapport")
Set M = Sheets("Modele")
lig = 9 '1ère ligne de destination
Application.ScreenUpdating = False
R.Rows(lig).Resize(R.Rows.Count - lig + 1).Delete 'RAZ
BD.[I2] = "=A2=TODAY()-1" 'critère
With BD.[A1].CurrentRegion
    .AdvancedFilter xlFilterInPlace, BD.[I1:I2] 'filtre avancé
    For i = 2 To .Rows.Count
        If Not .Rows(i).Hidden Then
            M.Range("C3") = .Cells(i, 2)
            M.Range("E3") = .Cells(i, 4)
            M.Range("G3") = .Cells(i, 3)
            M.Range("I3") = .Cells(i, 7)
            M.Range("D5") = .Cells(i, 5)
            M.Rows("1:6").Copy R.Cells(lig, 1) 'copier-coller
            lig = lig + 7
        End If
    Next
End With
BD.[I2] = ""
If BD.FilterMode Then BD.ShowAllData
R.[C7] = "Situation journalière du " & Format(Date - 1, "dd/mm/yyyy")
With R.UsedRange: End With 'actualise la barre de défilement verticale
R.Activate 'facultatif
End Sub
A+
 

Pièces jointes

Dernière édition:
Bonsoir kingfadhel,

Avec une feuille "Modele" (à masquer) ce n'est pas très compliqué, la macro du bouton :
VB:
Sub Rapport()
Dim BD As Worksheet, R As Worksheet, M As Worksheet, lig&, i&
Set BD = Sheets("BD")
Set R = Sheets("Rapport")
Set M = Sheets("Modele")
lig = 9 '1ère ligne de destination
Application.ScreenUpdating = False
R.Rows(lig).Resize(R.Rows.Count - lig + 1).Delete 'RAZ
BD.[I2] = "=A2=TODAY()-1" 'critère
With BD.[A1].CurrentRegion
    .AdvancedFilter xlFilterInPlace, BD.[I1:I2] 'filtre avancé
    For i = 2 To .Rows.Count
        If Not .Rows(i).Hidden Then
            M.Range("C3") = .Cells(i, 2)
            M.Range("E3") = .Cells(i, 4)
            M.Range("G3") = .Cells(i, 3)
            M.Range("I3") = .Cells(i, 7)
            M.Range("D5") = .Cells(i, 5)
            M.Rows("1:6").Copy R.Cells(lig, 1) 'copier-coller
            lig = lig + 7
        End If
    Next
End With
BD.[I2] = ""
If BD.FilterMode Then BD.ShowAllData
R.[C7] = "Situation journalière du " & Format(Date - 1, "dd/mm/yyyy")
With R.UsedRange: End With 'actualise la barre de défilement verticale
R.Activate 'facultatif
End Sub
A+

Bonsoir à tous,
Bonsoir @job75 , c'est aussi simple que ça!!!, c'est génial.
combien de temps vous avez mis si ça ne vous dérange pas??
 
Bonjour kingfadhel, le forum,

On peut utiliser le filtre automatique, voyez ce fichier (2) :
VB:
Sub Rapport()
Dim BD As Worksheet, R As Worksheet, M As Worksheet, lig&, f$, i&
Set BD = Sheets("BD")
Set R = Sheets("Rapport")
Set M = Sheets("Modele")
lig = 9 '1ère ligne de destination
Application.ScreenUpdating = False
R.Rows(lig).Resize(R.Rows.Count - lig + 1).Delete 'RAZ
With BD.[A1].CurrentRegion
    f = .Cells(2, 1).NumberFormat 'mémorise
    .Columns(1).NumberFormat = "General" 'format Standard
    .AutoFilter 1, CDbl(Date - 1) 'filtre automatique
    For i = 2 To .Rows.Count
        If Not .Rows(i).Hidden Then
            M.Range("C3") = .Cells(i, 2)
            M.Range("E3") = .Cells(i, 4)
            M.Range("G3") = .Cells(i, 3)
            M.Range("I3") = .Cells(i, 7)
            M.Range("D5") = .Cells(i, 5)
            M.Rows("1:6").Copy R.Cells(lig, 1) 'copier-coller
            lig = lig + 7
        End If
    Next
    .AutoFilter
    .Columns(1).NumberFormat = f
End With
R.[C7] = "Situation journalière du " & Format(Date - 1, "dd/mm/yyyy")
With R.UsedRange: End With 'actualise la barre de défilement verticale
R.Activate 'facultatif
End Sub
Bonne journée.
 

Pièces jointes

- 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
533
Retour