Macro Week-end

Bonjour,

Je cherche une macro toute simple qui puisse, à chaque fois que je change de mois ou d'année dans mes listes déroulantes, analyser ma plage B5:H9 afin de colorier les week-ends en gris (RGB(127,127,127)) avec une écriture blanche. Ce serait pour supprimer ma MFC car elle prend le dessus sur une autre macro que je voudrais tester.

Merci de votre aide.

33azkaet.xlsm (31.24 Ko)

Bonjour,

Il n'y aucune date dans les feuilles pour la plage B26:H30 ...

ric

Oops, j'ai tout mélangé, c'est B5:H9

Bonjour azkaet, le forum,

Je te retourne ton fichier modifié :

96azkaet.xlsm (32.29 Ko)

1) j'ai supprimé tes 2 règles de MFC

2) regarde d'abord la formule en C2 ; puis celle en G2 ; c'est plus simple, hein ?

3) regarde toutes les formules de B5:H8 et B9:D9 : simplifiées aussi ! note bien qu'en E9:H9

y'a aucune formule : c'est inutile, sauf si t'inventes un jour 32, 33, ou 34. note aussi que

seuls les 3 jours de B9:D9 peuvent varier, car pour les autres, y'a forcément 28 jours.

4) si tu as bien tout suivi, tu as pu te rendre compte que la formule de G2 n'a pas été utilisée :

je l'ai laissée juste pour que tu vois la simplification, et tu peux l'effacer ! as-tu noté que

seule la formule de B5 utilise F2 ? (mais oui, aucune autre)

5) j'ai simplifié le code VBA de ton module Buttons ; essaye tes 4 boutons :

tu verras qu'ils marchent tout aussi bien qu'avant... et même mieux car

cette fois, ça marche aussi sur les weekends !

6) modifie à ton gré tes 2 listes déroulantes ; vu ?

Alt F11 pour voir le code VBA, puis revenir sur Excel

Si besoin, tu peux demander une adaptation.

Merci de me dire si ça te convient.


j'suis entièrement d'accord avec toi : les issues d'secours sont en relation directement inversement proportionnelle avec la navigabilité de l'appareil : plus la bonne tenue de l'avion est faible et il risque de décrocher, plus c'est important d'pouvoir s'échapper par les issues d'secours afin d'sauter en parachute !

dhany

Bonjour dhany !

Le fichier est super, bien épuré, merci beaucoup.

Est-il possible de m'expliquer la macro WeekEnds que j'ai du mal à comprendre ? (Beaucoup de fonctions non connues de ma part...)

Encore merci.

Rebonjour azkaet,

  With [B5:H9]
    .Interior.Color = -4142: .Font.ColorIndex = -4105
  End With

[B5:H9] est la notation abrégée de Range("B5:H9") ; c'est exactement pareil, mais en plus court.

B5:H9 : c'est tout le rectangle de ton petit calendrier (même si on écrit jamais en E9:H9) ; With ➯ avec cette plage : couleur de remplissage : -4142 = xlNone ; et couleur du texte : -4105 = xlAutomatic (donc noir).

ça permet donc de réinitialiser la mise en forme de B5:H9 pour enlever les couleurs de remplissage et de texte d'avant.


For col = 2 To 8 : colonnes 2 à 8 = colonnes B à H

le but de cette macro est de mettre en texte blanc sur fond gris tous les weekends ; comme la ligne 5 est de 7 jours, les 2 colonnes du samedi et du dimanche pour cette ligne 5 font que c'est la même colonne (2×) pour les lignes 6 à 9 en dessous ; donc quand on aura trouvé les 2 bonnes colonnes pour cette ligne 5, il suffira d'étendre la plage (qui est d'une seule cellule) vers le bas pour faire pareil juste en dessous.

attention : les 2 colonnes sont pas forcément l'une à droite de l'autre ! le samedi peut être en dernière colonne H et le dimanche en première colonne B ! c'est pourquoi on ne peut pas faire cela : détecter seulement le samedi puis mettre en gris la colonne trouvée et celle de droite ; on est obligé de détecter les 2 jours du weekend !


With Cells(5, col) : avec une cellule de la ligne 5, colonne col ; ce col est celui de la bouble For, donc de 2 à 8 : colonne B à H ; ça sera donc successivement B5 à H5.

If WorksheetFunction.Weekday(.Value, 2) > 5 Then : voici ton test JOURSEM(), en anglais : Weekday() ; c'est une fonction d'Excel qui est appelée par VBA via WorksheetFunction ; car VBA lui-même ne sait pas faire l'équivalent de la fonction JOURSEM() : il n'a pas de fonction déjà intégrée pour ça ; le .value est la cellule du With, donc au début B5.

le 2ème argument 2 est pour : 1er jour de la semaine = lundi ; si le test > 5 est vrai, on a trouvé un samedi (6) ou un dimanche (7) et donc on exécute les 2 lignes qui vont suivre ; pour June 2018, en ligne 5, le samedi est détecté en colonne 3 ; donc With Cells(5, col) est pour C5 ; ci-dessous, le .Resize(5) étend cette plage d'une seule cellule à 5 lignes au total, donc ça devient : C5:C9.

.Resize(5).Interior.Color = RGB(127, 127, 127) : pour la colonne du samedi ou dimanche : fond gris

.Resize(5).Font.ColorIndex = 2 : pour la même colonne : texte blanc


j'ai tout détaillé, mais si t'as une question, n'hésite pas !

dhany

Quelle explication détaillée !

Tout ce dont j'avais besoin..

Merci beaucoup !

Bonne continuation.

merci beaucoup pour ton retour ! et bonne continuation à toi aussi !

dhany

Rechercher des sujets similaires à "macro week end"