VBA Codes dans excel

Bonjour, je travaille depuis plus de 48 heures sur un projet pour faire un "reset" de mon fichier pour la prochaine année.

À chaque fois que j'avais, il m'arrive autre chose et je plante.

Merci de bien vouloir m'aider

Mon fichier à 14 feuilles.

La première s'appelle "Dates". Dans cette feuille, 3 cellules sont importantes:
- C1 où la saisie se fait par l'usager. Cette saisie affecte toutes les autres cellules de cette feuille.
- La valeur de la cellule D1 est reportée dans la feuille "1" cellule B5 avec la formule en B5 =Dates!D1.
- La valeur de la cellule D13 est reportée dans la feuille "13" cellule B5 avec la formule en B5 =Dates!D13.

Les autres feuilles sont numérotées de 1 à 13.

dans la feuille 1, les lignes 6 à 45 sont numérotées dans la colonne A (colonne cachée) de 1 à 40. je dois être capable de masquer les lignes 6 à 45 quand leur numéro de la colonne A est plus grand que la valeur de la cellule B5 et les démasquer lorsque leur numéro n'est pas plus grand que la cellule B5 (donc < ou = à B5). JE crois avoir réussi à le faire ici

Les feuilles 2 à 12 ne sont pas affectées par le masquage de rangée.

Pour la feuille 13, c'est la même chose que la feuille 1, sauf que la valeur de la cellule B5 n'est pas la même. Mais ça ne marche pas ici

Voici les codes que j'ai écris et qui ne fonctionnent pas totalement:

Sub NewYear_4eO()

Dim var         As Variant
Dim varArr()    As Variant
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
With Sheets("1")
    .Range("c6:at45").ClearContents
    .Range("b51:at76").ClearContents
End With

varArr = Array("2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")

    For Each var In varArr
        
        With Sheets(CStr(var))
        .Range("b6:As33").ClearContents
        .Range("a39:AS64").ClearContents
        End With
        
    Next var
    
Erase varArr
   
With Sheets("13")
    .Range("c6:at45").ClearContents
    .Range("b51:at76").ClearContents
End With
  
Call HideRows1

Call HideRows13
   
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
   
End Sub

Sub HideRows1()

With Sheets("1")

Dim NumWeeks As Integer
NumWeeks = Worksheets("1").Range("b5").Value

        .Unprotect ("levesque")
    
    BeginRow = 26
    EndRow = 45
    ChkCol = 1

    For RowCnt = BeginRow To EndRow
        If Cells(RowCnt, ChkCol).Value > NumWeeks Then
            Cells(RowCnt, ChkCol).EntireRow.Hidden = True
        Else
            Cells(RowCnt, ChkCol).EntireRow.Hidden = False
        End If
    Next RowCnt

        .Protect ("levesque")

End With

End Sub

Sub HideRows13()

With Sheets("13")

Dim NumWeeks2 As Integer
NumWeeks2 = Worksheets("13").Range("b5").Value

        .Unprotect ("levesque")


    BeginRow = 26
    EndRow = 45
    ChkCol = 1

    For RowCnt = BeginRow To EndRow
        If Cells(RowCnt, ChkCol).Value > NumWeeks2 Then
            Cells(RowCnt, ChkCol).EntireRow.Hidden = True
        Else
            Cells(RowCnt, ChkCol).EntireRow.Hidden = False
        End If
    Next RowCnt

        .Protect ("levesque")

End With

End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. Bonjour,

    Mais ça ne marche pas ici Qu'est-ce qui ne marche pas ???????
    0
    1. Contributeur
      Bonjour
      si la feuille 13 n'est pas active, il faut des points devant "cells"
      ( apparemment tu semblerait déclencher la macro sur la feuille "dates" ?)
      0
      1. Bonjour michel_m,

        en effet, c'est le seul manque pour feuille "13" mais, c'est aussi valable pour la feuille "1"
        0
      2. Contributeur
        Bonjour,F89,cbg

        pour cbg

        si ca n'a pas planté avec feuil1 ---> la feuil1 est active et non la 13
        pour cbg
        comme le dit F89, il faut toujours mettre les points entre des blocs with...; end with
        0
      3. @michel_mBonjour, je vous remercie de m'aider, mais je ne comprends pas où les points devraient apparaître dans les codes Hiderows1 et hiderows13. Pouvezvous me donner un exemple?
        0
      4. Contributeur
        @cbg573Bonjour,

        With Sheets("13")

        '.......
        For RowCnt = BeginRow To EndRow
        If .Cells(RowCnt, ChkCol).Value > NumWeeks2 Then
        .Cells(RowCnt, ChkCol).EntireRow.Hidden = True
        Else
        .Cells(RowCnt, ChkCol).EntireRow.Hidden = False
        End If
        Next RowCnt

        .Protect ("levesque")

        End With
        0