VBA effacer les cellules d'une plage correspondantes aux week-en

Fermé
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 - 3 oct. 2014 à 13:53
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 - 7 oct. 2014 à 19:05
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

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
6 oct. 2014 à 16:03
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
redaiwa Messages postés 351 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 25 janvier 2024 119
6 oct. 2014 à 15:48
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 : https://www.cjoint.com/?DJgpY2UVyZ4

J'espère que j'ai été utile :)
1
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
3 oct. 2014 à 16:29
Bonjour,

si FERIES est bien une plage nommée qui contient les dates des jours fériés alors cela doit fonctionner.
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
6 oct. 2014 à 11:34
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
Modifié par Mouftie le 6/10/2014 à 19:22
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.
0
redaiwa Messages postés 351 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 25 janvier 2024 119
7 oct. 2014 à 15:08
Tu pourrais peut-être éviter d'utiliser l'événement Worksheet_Change ? Quitte à repenser un peu ton code.
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
7 oct. 2014 à 19:05
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.
0