Masquer les w.e

chrisjo56 Messages postés 585 Statut Membre -  
chrisjo56 Messages postés 585 Statut Membre -
Bonjour,

Voici ce qui m'amène. Je suis en train de créer un fichier Excel qui comptabilise des données sur une année. J'ai fait un onglet par mois et un dernier de synthèse qui additionne les totaux de chaque mois. Jusque là tout va bien ;-)

J'aimerais améliorer ce fichier en enlevant les week-end. J'ai commencé par masquer les colonnes correspondantes à des week-end mais il me semblerait plus judicieux de créer une macro qui le fasse pour moi et c'est là que ça coince car les macros et moi... je nai pratiquement aucune notion de VBA et j'ai fouiné sur le net pour trouver une macro. Problème, celle-ci ne fonctionne pas et me génère une erreur de compilation "next sans for". Retour sur la Toile où je trouve qu'en rajoutant un "End If" cela pourrait marcher. Je réessaye donc en insérant un "End If" juste avant "Next i" et là j'ai une erreur d'exécution 13 "Incompatibilité de type". Du coup, je suis complètement planté.

Sub masque()
Application.ScreenUpdating = False
For i = 1 To [A65000].End(xlUp).Row
If Weekday(Cells(i, 1)) = 1 Or Weekday(Cells(i, 1)) = 7 Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i
End Sub

Sub demasque()
ActiveSheet.Cells.EntireRow.Hidden = False
End Sub

Si l'un d'entre vous peut me venir en aide, je lui en serais très reconnaissant.

D'avance merci.
PS : petite précision : je suis sous Excel 2003.

2 réponses

gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour

Tes 2 macros fonctionnent tout à fait correctement : la seule chose à rajouter serait de mettre au début de la première la ligne suivante afin de réserver ta variable "i" qui évolue avec la ligne traitée :
Dim i as Long

Par contre, si cela ne fonctionne pas, c'est sans doute que tu as des cellules qui ne sont pas au format date et donc je te propose de modifier ainsi :
Sub masque()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To [A65000].End(xlUp).Row
    If Not IsDate(Cells(i, 1)) Then
        MsgBox "date invalide " & Cells(i, 1)
    Else
        If Weekday(Cells(i, 1), 2) > 5 Then
            Cells(i, 1).EntireRow.Hidden = True
        End If
    End If
Next i
End Sub

En mettant le paramètre 2 la fonction Weekday commence au lundi et donc le test est simplifié.
0
chrisjo56 Messages postés 585 Statut Membre 220
 
Bonsoir,

Merci pour cette réponse. Effectivement ces 2 macros fonctionnent mais seulement si les dates sont disposées sur des lignes. Dans mon cas, elles sont en colonnes et j'ai essaye de changer Row en Column mais rien n'y fait. Ma dernière question est donc : comment faire la recherche sur les colonnes de A à IV ?

Bonne soirée et... à bientôt ?
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour

comment faire la recherche sur les colonnes de A à IV ?

Tu veux masquer les colonnes qui sur n'importe quelle ligne ont une date week-end ?
Effectivement avec tes macros basées sur les lignes je n'avais pas noté le mot colonne dans ta question.

Essaies alors avec ces 2 macros modifiées
Sub masque()
Dim col As Integer
Dim lig As Long
Application.ScreenUpdating = False
For col = 1 To Cells.SpecialCells(xlCellTypeLastCell).Column
    For lig = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
        If IsDate(Cells(lig, col)) Then
            If Weekday(Cells(lig, col), 2) > 5 Then
                Cells(lig, col).EntireColumn.Hidden = True
                Exit For
            End If
        End If
    Next lig
Next col
End Sub

Sub demasque()
ActiveSheet.Cells.EntireColumn.Hidden = False
End Sub
0
chrisjo56 Messages postés 585 Statut Membre 220
 
Bonjour

Ca marche nickel ! Un grand merci à toi et un excellent dimanche.

@mitiés
0