1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
Sub couleur()
'la variable "alphabet" est une variable de type String (texte) comprenant les 26 lettres de l'alphabet
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
'La feuille est protégée (sans mot de passe). L'instruction ci-dessous supprime la protection pour pouvoir
'enregistrer des modifications dans les cellules
ActiveSheet.Unprotect
'la variable "i" est de type "Integer" (nombre entier compris entre -32768 et + 32767)
Dim i As Integer
'démarrage d'une boucle pour la valeur de "i" = 0 jusque 30 (la variable "i" s'incrémente de 1 à chaque passage)
For i = 0 To 30
'si "i" +12 est inférieur ou égal à 26 (on démarre donc à la colonne "L")
If i + 12 <= 26 Then
'on affecte à la variable "lettre" la lettre dont la position est égale à la valeur de "i" + 12
'exemple si "i" = 3 on affecte à la variable "lettre" le 15ème caractère de l'alphabet soit "O"
'Mid pour Middle (mileu) de la variable "alphabet", i+12 : position du caractère à affecter;
'1 : nombre de caractères à affecter
lettre = Mid(alphabet, i + 12, 1)
Else
'sinon (si "i+12" est > 26 donc si "i" est > 14) on affecte à la variable "lettre" le caractère "A" concaténé avec
'la valeur du caractère défini par "Mid(alphabet, i - 14, 1)" (même explication que ci-dessus).
'donc si i = 15 la variable "lettre" contient "AA", si = 16 contient "AB" (n° de colonne)
lettre = "A" & Mid(alphabet, i - 14, 1)
End If
'On sélectionne la cellule correspondant ) la valeur de la colonne définie ci-dessus et dans la ligne N° 4
Range(lettre & "4").Select
'la ligne ci-dessous renvoie le nombre de caractères (Len) de la cellule sélectionnée ci-dessus (ActiveCell)
'après avoir supprimé les éventuels "espaces" avant le contenu (Ltrim) et après le contenu (Rtrim)
'si la valeur revoyée est 0 l'instruction suivante qui sera exécutée sera "Next" (prochaine valeur de "i")
If Len(RTrim(LTrim(ActiveCell))) > 0 Then
'sinon le N° du jour contenu dans la date elle-même contenue dans la cellule active est 6 ou 7 (samedi ou dimanche)
'on applique la couleur N° 19 (jaune pâle) pour la plage "cellule sélectionnée, ligne 4 jusqu'à la ligne 60) et le motif
'défini par xlSolid (si vous voulez changer la couleur et le motif, cliquez sur "ColorIndex" puis touche "F1" vous
'obtiendrez les codes de couleur. Recommencez sur "xlSolid" et vous trouverez les différents motifs.
'remarque : ce N° de jour peut être défini différement (dimanche = 1 et samedi = 7) donc attention aux paramètres
'définis dans l'application
If Weekday(DateValue(ActiveCell), vbMonday) = 7 Or Weekday(DateValue(ActiveCell), vbMonday) = 6 Or Len(Trim(Range(lettre & "5"))) > 0 Then
Range(lettre & "4", lettre & "60").Interior.ColorIndex = 19
Range(lettre & "4", lettre & "60").Interior.Pattern = xlSolid
Else
'si le N° de jour n'est pas = 7 ou = 6 (voir ci-dessus "ColorIndex" "xlPattern"
Range(lettre & "4", lettre & "60").Interior.ColorIndex = 2
Range(lettre & "4", lettre & "60").Interior.Pattern = xlSolid
End If
End If
'retour à la boucle "For i" jusqu'à ce que la valeur "30" soit atteinte.
'une fois cette valeur atteinte la précédure se termine.
'remarque : les lignes "For i = 0 To 30" et "If i + 12 <= 26 Then" vous permettent de traiter les colonnes "L" jusque
' "AP" si vous voulez aller jusque "AZ" il faudra modifier la valeur "to 30" en "to 40"
'si vous vouliez aller plus loin que "AZ" il faudrait ajouter une variable et un test pour que la concaténation de "A"
'avec la 2ème lettre devienne "B" & (2ème lettre).
Next
'on re-protège la feuille sans mot de passe
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub |
Partager