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

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

  • Rapport.xlsx
    15.6 KB · Affichages: 17

job75

XLDnaute Barbatruc
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

  • Rapport(1).xlsm
    26.4 KB · Affichages: 12
Dernière édition:

kingfadhel

XLDnaute Impliqué
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??
 

job75

XLDnaute Barbatruc
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

  • Rapport(2).xlsm
    26.8 KB · Affichages: 10

Discussions similaires

Statistiques des forums

Discussions
312 092
Messages
2 085 222
Membres
102 826
dernier inscrit
ag amestan