Simplification d'une macro

Bonjour,

Surtout n'ayez pas peur en découvrant la macro en question

C'est une macro qui indique sur mon calendrier la date du jour en changeant la couleur de fond de deux cellules et en mettant la police en gras et rouge, ensuite efface la sélection de la veille et le Lundi, efface la sélection du vendredi.

Comment ça, c'est compliqué ???

Maintenant vous pouvez aller voir dans la pièce jointe et si vous pouvez faire quelque chose pour moi, soyez en remercier.

Merci

10calendrier.xlsm (58.41 Ko)

Salut,

Ta macro semble fonctionner correctement. Dans quel but souhaites tu la "simplifier" ?

Autre remarque : Le Bouton mise à jour ne sert à rien pour le moment. Que devrait-il mettre à jour ?

Girodo

Bonjour,

Oui ça fonctionne mais il y a des petits problèmes quand même.

Un exemple: Nous sommes le 01 juin, j'ouvre mon fichier Excel et là il y a une erreur. Ma macro n'est pas capable de "remonter" pour aller effacer le 31 mai, elle efface le jour précédent uniquement dans le même mois, sur la même ligne.

Le bouton "mise à jour" sert uniquement dans le classeur complet, je pose mes jours de congés en faisant un copier/coller d'une cellule en couleur et la mise à jour décompte les jours ou demi/journée suivant la couleur.

Sub CA()
Dim C As Range
Dim n As Variant
n = 22.5       ' <----Nombre de jour(s) dispo
For Each C In [B9:AF84]
If C.Interior.ColorIndex = 37 Then n = n - 1
If C.Interior.ColorIndex = 13 Then n = n - 0.5
Next C
Range("D8") = n
Range("AH1") = n
If n > 1 Then Range("D8") = n & (" Jrs")
If n <= 1 Then Range("D8") = n & (" Jour")
If n = "" Then Range("D8") = 0 & (" Jour")
Range("AK3") = 22.5 - n
End Sub

Probablement plus long à éxécuter mais au moins tu n'auras plus aucun problème :

Private Sub Workbook_Open()

Dim NumMois As Integer, NumJour As Integer
    NumMois = Month(Now()): NumJour = Day(Now())

    Application.ScreenUpdating = False

    'Remet toutes les dates au format initial

    'i pour le numéro de colonne
    For i = 2 To 32
        'j pour le numéro de ligne
        For j = 10 To 76 Step 6
        Cells(j, i).Select
        Range(Cells(j, i), Cells(j + 1, i)).Interior.ColorIndex = 36
        Range(Cells(j, i), Cells(j + 1, i)).BorderAround Weight:=xlThin
        Range(Cells(j, i), Cells(j + 1, i)).Font.Bold = True
        Range(Cells(j, i), Cells(j + 1, i)).Font.ColorIndex = 1
        Range(Cells(j, i), Cells(j + 1, i)).BorderAround Weight:=xlThin
        Next
    Next

    'Formatage de la date du jour
    Range(Cells(4 + (NumMois * 6), 1 + NumJour), Cells(4 + (NumMois * 6 + 1), 1 + NumJour)).Interior.ColorIndex = 2
    Range(Cells(4 + (NumMois * 6), 1 + NumJour), Cells(4 + (NumMois * 6 + 1), 1 + NumJour)).Font.Bold = True
    Range(Cells(4 + (NumMois * 6), 1 + NumJour), Cells(4 + (NumMois * 6 + 1), 1 + NumJour)).Font.ColorIndex = 3
    Range(Cells(4 + (NumMois * 6), 1 + NumJour), Cells(4 + (NumMois * 6 + 1), 1 + NumJour)).BorderAround Weight:=xlMedium

    'Sélection de N4
    Range("N4").Select

    Application.ScreenUpdating = True

End Sub

Superbe, je n'avais pas penser à formater toutes les cellules, date et jour, avant d'afficher la date du jour.

Je ne pense pas encore assez "excel"

Je te remercie, bon travail

Aucun problème

Content d'avoir pu t'aider

girodo

Rechercher des sujets similaires à "simplification macro"