VBA effacer les cellules d'une plage correspondantes aux week-en [Fermé]

Signaler
Messages postés
213
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
8 octobre 2019
-
Mouftie
Messages postés
213
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
8 octobre 2019
-
Bonjour,
Je travaille sur un planning, avec une feuille Modèle qui sert à créer les feuilles mensuelles. par défaut, tous les jours de la semaine ont des formules, mais quand je crée ma feuille mensuelle, je voudrais effacer les formules sur les Week-end et les jours fériés.
pour les week-end j'ai écrit
    Set Plg = [C5:AG120]
For Each c In Plg
If Weekday(Cells(3, c.Column), vbMonday) > 5 Then
c.ClearContents
End If
Next c
mais comment faire la même chose pour les jours fériés
j'ai essayé
Set Plg = [C5:AG120]
For Each c In Plg
If Weekday(Cells(5, c.Column), vbMonday) > 5 Or Application.CountIf([FERIES], Cells(5, c.Column)) > 0 Then
c.ClearContents
End If
Next c
mais ça ne fonctionne pas
Est-ce que qq'1 peut m'aider svp ?
Merci

5 réponses

Messages postés
3341
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
455
Bonjour,

D'après ce que je crois comprendre, les dates sont sur la ligne 3.
Ton instruction devrait être :

If Weekday(Cells(3, c.Column), vbMonday) > 5 Or Application.CountIf([FERIES], Cells(3, c.Column)) > 0 Then ...

A+
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 84180 internautes nous ont dit merci ce mois-ci

Messages postés
347
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2015
93
Salam Mouftie.

J'ai travaillé avec un cas similaire (Planning de Permanence) où je ne devais écrire que dans les cellules qui correspondent à un weekend ou à un jour férié.

Mon idée à été de mettre en rouge (par macro) tous les weekend et jours fériés dans le planning (pour une meilleure visibilité) puis à chaque sélection de cellule, tester si la police est en rouge auquel cas c'est un weekend ou un jour férié et agir en conséquence.

Ci-joint un exemple : http://cjoint.com/?DJgpY2UVyZ4

J'espère que j'ai été utile :)
Messages postés
1863
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
23 janvier 2020
543
Bonjour,

si FERIES est bien une plage nommée qui contient les dates des jours fériés alors cela doit fonctionner.
Messages postés
213
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
8 octobre 2019
8
Bonjour Pilas31
Je te remercie de m'avoir répondu.
Je te confirme que FERIES est bien une plage nommée.

quand je crée ma feuille du mois, j'ai un message d'erreur : '13' Incompatibilité de type.

J'ai également mis le code suivant, dans la feuille modèle, pour empêcher l'écriture dans les zones WE et Fériés.
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim c As Range
On Error Resume Next
Static noEvents As Boolean
If noEvents Then Exit Sub
Set Plg = Intersect(Intersect(Target, [A:AG]), [5:120])
For Each c In Plg
If Weekday(Cells(5, c.Column), vbMonday) > 5 Or Application.CountIf([FERIES], Cells(5, c.Column)) > 0 Then
noEvents = True
c.Value = Empty
noEvents = False
End If
Next c
On Error Resume Next
End Sub
Là, je n'ai pas d'erreur, mais je ne peux rien saisir dans la feuille jour férié ou pas.

Je viens de faire un nouvel essai ; là ma feuille mois a bien été créée, mais d'une part je ne peux rien saisir dans mon planning (ça s'efface au fure et à mesure) et d'autre part, les formules dans les colonnes fériés n'ont pas été effacées

Merci de bien vouloir m'aider.
Messages postés
213
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
8 octobre 2019
8
Bonsoir redaiwa et Gyrus.
Merci à vous 2
Gyrus, tu as parfaitement raison, j'ai confondu les dates et les données... ; maintenant mes 2 procédures fonctionnent, mais celle qui efface les formules déclenche la procédure évènement ce qui entraine un temps de réponse énorme, il faudrait que je passe par un tableau virtuel (array), mais là je tatonne pas mal, pour ne pas dire plus.
Je vais chercher encore.
redaiwa
Messages postés
347
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2015
93
Tu pourrais peut-être éviter d'utiliser l'événement Worksheet_Change ? Quitte à repenser un peu ton code.
Mouftie
Messages postés
213
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
8 octobre 2019
8
comment peut-on éviter l'événement Worksheet_Change ?
les utilisateurs font des copiés / collés sur plusieurs semaines, mais il faut à chque fois supprimer les saisies, les jours non travaillés.