VBA Codes dans excel

Fermé
cbg573 Messages postés 5 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 31 mars 2016 - Modifié par NHenry le 14/11/2015 à 13:10
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 18 nov. 2015 à 08:37
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.
A voir également:

2 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
14 nov. 2015 à 11:18
Bonjour,

Mais ça ne marche pas ici Qu'est-ce qui ne marche pas ???????
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
15 nov. 2015 à 09:18
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
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
16 nov. 2015 à 10:42
Bonjour michel_m,

en effet, c'est le seul manque pour feuille "13" mais, c'est aussi valable pour la feuille "1"
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
16 nov. 2015 à 11:24
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
cbg573 Messages postés 5 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 31 mars 2016 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
18 nov. 2015 à 01:45
Bonjour, 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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310 > cbg573 Messages postés 5 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 31 mars 2016
Modifié par michel_m le 18/11/2015 à 08:38
Bonjour,

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