Réinitialisation automatique d'une feuille

Bonjour,

Étant encore novice dans VBA, je me permets de demander de l'aide pour l'établissement du tableau pour facilité la vie de mon concierge.

Dans le fichier joint, dans l'onglet "BD1" que le concierge rempli chaque jour, s'il clique sur le bouton "Semaine", il inscrit le N° de sa semaine et les infos de la semaine sont reportées dans l'onglet "Hebdo".

Le problème c'est que je n'arrive pas avec la macro "fitre 2" à initialiser toute la feuille "Hebdo" et que je suis à chaque fois d'effacer les données des semaines passée.

J'aimerais que n'apparaisse que les données de la nouvelle semaine.

Merci d'avance à ceux qui pourront m'aider

Cordialement

Serge

Bonjour,

À voir si ça convient...

Dans la macro "Filtre2"

Inverse les 2 lignes :

Le code avant la modif ...

    With Sheets("hebdo").ListObjects("Table10")
        .Resize .Range.Resize(4)    ' ligne1
        .DataBodyRange.Clear        ' ligne2
    End With

Le code après la modif ...

    With Sheets("hebdo").ListObjects("Table10")
        .DataBodyRange.Clear        ' ligne2
        .Resize .Range.Resize(4)    ' ligne1
    End With

ric

Bonjour à tous

Plusieurs remarques :

  • Un tableau structuré ne doit pas comporter de lignes vides : sur l'onglet BD1 il devrait donc s'arrêter à la ligne 53.
    Les nouvelles lignes seront automatiquement intégrées et hériteront du format, MFC comprise, et des formules des lignes existantes.
  • il est bien de nommer les tableaux structurés de même qu'on ne garde pas Classeur1 ni Feuil1...
  • pourquoi ne pas figer les volets plutôt que de fractionner ?
  • la fonction SEMAINE me parait inutile, sur 2010 on a NO.SEMAINE([@Jour];21) qui est conforme à notre norme, ce que ne semble pas être le cas de ta fonction si tu es en France. En plus elle ralentit le calcul.
  • il y a pléthore de MFC sur le tableau... a nettoyer

Code à simplifier

Sub Filtre2()

Dim sel_semaine As Byte
On Error GoTo fin
sel_semaine = InputBox("Semaine")
On Error GoTo 0
If Not Sheets("hebdo").ListObjects(1).DataBodyRange Is Nothing Then Sheets("hebdo").ListObjects(1).DataBodyRange.Delete

With Worksheets("BD1").ListObjects("Tableau1")
    If .AutoFilter.FilterMode = True Then
        .HeaderRowRange.Cells(1, 1).Select
        Worksheets("BD1").ShowAllData
    End If
    .Range.AutoFilter Field:=5, Criteria1:=sel_semaine
    Application.Calculation = xlCalculationManual
    Range("Tableau1").Copy
    Sheets("hebdo").ListObjects(1).Range.Cells(2, 1).PasteSpecial Paste:=xlPasteValues
    .HeaderRowRange.Cells(1, 1).Select
    Worksheets("BD1").ShowAllData
End With
Application.Calculation = xlCalculationAutomatic

fin:
End Sub

J'ai géré le cas d'erreur où on ne saisit rien ou une valeur non numérique dans l'inputbox mais il serait bien de gérer plus finement pour ne pas autoriser de numéro de semaine >53

Le filtre du tableau de BD1 doit être actif sur le tableau pas sur quelques colonnes...

On pourrait rajouter l'activation du filtre... ocazou

Merci à Ric et Chis d'avoir pris du temps pour me donner un coup de main.

ric

Rechercher des sujets similaires à "reinitialisation automatique feuille"