XL 2019 VBA - Afficher/Masquer des jours de la semaine

sami1814

XLDnaute Nouveau
Bonjour à toutes et tous,

Je suis ultra novice en VBA et j'ai besoin d'aide.

Je suis en train de créer un planning des jours et des semaines en fonction du 1er jour d'un mois (en A1).

Maintenant, ce que je veux faire c'est Afficher ou Masquer une colonne en fonction des valeurs de D4:AH4 ("" ou 1)

Dans la cellule D4, j'ai créé cette formule pour y afficher "" ou 1 :
=SI(OU(D3="Samedi";D3="Dimanche");"";1)

Le code ci-dessous fonctionne uniquement si les cellules D4:AH4 contiennent des valeurs 1 ou rien (pas ""). Etant donné que la formule renvoie "", le code bug vu que "" <> rien.

VB:
Sub Afficher()

Dim cel As Range
For Each cel In Range("D4:AH4").SpecialCells(xlCellTypeBlanks)
cel.EntireColumn.Hidden = False
Next

End Sub

Sub Masquer()

Dim cel As Range
For Each cel In Range("D4:AH4").SpecialCells(xlCellTypeBlanks)
cel.EntireColumn.Hidden = True
Next

End Sub

Auriez-vous une solution pour remplacer .SpecialCells(xlCellTypeBlanks) par un autre paramètre ?

Merci d'avance 😁
 

Pièces jointes

  • Planning.xlsm
    20.2 KB · Affichages: 28
Solution
Bonjour Sami,
Une possibilité :
VB:
Sub Afficher()
Dim cel As Range
    For Each cel In Range("D4:AH4")
        If cel <> 1 Then cel.EntireColumn.Hidden = False
    Next
End Sub
Sub Masquer()
    Dim cel As Range
    For Each cel In Range("D4:AH4")
        If cel <> 1 Then cel.EntireColumn.Hidden = True
    Next
End Sub
Une autre en supprimant la ligne 4 inutile :
Code:
Sub Afficher2()
    Application.ScreenUpdating = False
    Range("D:AH").EntireColumn.Hidden = False
End Sub
Sub Masquer2()
    Application.ScreenUpdating = False
    Dim cel As Range
    For Each cel In Range("D3:AH3")
        If cel = "Samedi" Or cel = "Dimanche" Then cel.EntireColumn.Hidden = True
    Next
End Sub

ChTi160

XLDnaute Barbatruc
Re
Non effectivement y'avait un problème de cellule !
j'ai testé dans un fichier Vierge
en B1 j'ai mis 01/01/2021
la formule aurait du être
VB:
=NOMPROPRE(SI($B$1="";"";TEXTE(JOURSEM(B1;1);"jjjj")))
au lieu de
VB:
=NOMPROPRE(SI($B$1="";"";TEXTE(JOURSEM(D6;1);"jjjj")))
est la cellule D6 était vide donc mauvais retour (date du jour je pense) !
désolé Lol
j'ai bien une version française Lol
Bonne fin de journée
jean marie
 
Dernière édition:

sami1814

XLDnaute Nouveau
Bonjour à tous



La formule n'est pas bonne. Il faut utiliser :
=NOMPROPRE(SI($B$1="";"";TEXTE(D6;"jjjj")))

Si tu utilises en $D$3 =TEXTE(JOUR(D6);"jjjj") tu demande à avoir le format texte de la date 1 puis de la date 2.
Tes jours ne changeant jamais (toujours 1 puis 2 etc.) ton texte ne changera jamais. Il faut utiliser la date entière.

Cordialement
Rebonjour à tous !

Efgé, merci pour la correction simple ! Cela marche bien mieux maintenant, il y a plus l'erreur de jour x)
 

patricktoulon

XLDnaute Barbatruc
@Efgé texte(cellule;"jjjj") fonctionne aussi
maintenant faut voir si ca suit le mode et langage dans le quel office et W sont installé
tandis que joursem c'est toi qui le paramètre avec le 2d argument ;)
en tout cas vous serez tous d'accords avec moi qu'avant de faire des hidden sur des colonnes il fallait mettre ce tableau en ordre ;)
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonsoir le fil, le forum

J'ai ajouté les jours fériés auto en fonction personnalisée, sur la base du fichier de Sylvanu avec la correction de Efgé pour la formule..

Bien cordialement, @+
 

Pièces jointes

  • Planning - Copie.xlsm
    28 KB · Affichages: 5

Discussions similaires

Réponses
12
Affichages
461
Réponses
3
Affichages
166

Statistiques des forums

Discussions
314 651
Messages
2 111 555
Membres
111 201
dernier inscrit
netcam