Je veux colorier une partie de mon calendrier en fonction de la valeur de la semaine. Aujourd'hui on est le 6 Juin donc en semaine 23.
Le souci est avec le If. Quand je l'enlève, ça marche. Or, j'en est besoin, car je voudrais colorier ma colonne seulement quand le numéro de semaine d'aujourd'hui correspond au numéro de semaine du calendrier.
Mon code est le suivant :
b = Format(Range("B2").Value, "ww")
If Cells(1, 26).Value = b Then
i = 23
Range(Cells(4, i + 3), Cells(20, i + 3)).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
Re : Macro pour colorier une zone qui ne fonctionne pas
Bonjour Wuted, Trance4life,
Ou tout simplement en déclarant tes variables "correctement"
Il te suffis d'ajouter:
Code:
Dim b As Double
Si non, déclarer tes variables sans en indiquer le type reviens à ne pas déclarer de variable du tout. Le programme va leur attribuer le type de base se qui peut engendré se genre de problème.
Lorsque tu déclare tes variables, spécifie le type
Dim toto as integer
Dim toti as String
Comme tu peux le remarquer, pour définir un type il suffit d'ajouter as + le type
Re : Macro pour colorier une zone qui ne fonctionne pas
Bonjour Trance4life,
Il suffit de définir les variables concernées en type numérique pour éviter les erreurs de comparaison.
Modifie donc ton code comme suit :
Code:
Sub Macro1()
Dim a As Integer
Dim b As Byte
Dim c
a = Format(Range("C2").Value, "yy")
If a > Format(Range("B2").Value, "yy") Then
Range("B6").Value = CDate("01/01/" & a)
Range("C6").Value = Format(Range("C2").Value, "mm/dd/yyyy")
ElseIf a = Format(Range("B2").Value, "yy") Then
Range("B6").Value = ""
End If
b = Format(Range("B2").Value, "ww")
If Cells(1, 26).Value = b Then
i = 23
With Range(Cells(4, i + 3), Cells(20, i + 3)).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
Tu remarqueras par ailleurs que j'ai supprimé toutes les lignes avec ".Select". Elles sont totalement inutiles car tu peux modifier les cellules sans les sélectionner au préalable : le code y gagne en clarté et en rapidité.
Cordialement.
Edit :Oups, bonjour WUTED, Vorens, vous êtes les plus rapides sur ce coup !
Il suffit de définir les variables concernées en type numérique pour éviter les erreurs de comparaison.
Modifie donc ton code comme suit :
Code:
Sub Macro1()
Dim a As Integer
Dim b As Byte
Dim c
a = Format(Range("C2").Value, "yy")
If a > Format(Range("B2").Value, "yy") Then
Range("B6").Value = CDate("01/01/" & a)
Range("C6").Value = Format(Range("C2").Value, "mm/dd/yyyy")
ElseIf a = Format(Range("B2").Value, "yy") Then
Range("B6").Value = ""
End If
b = Format(Range("B2").Value, "ww")
If Cells(1, 26).Value = b Then
i = 23
With Range(Cells(4, i + 3), Cells(20, i + 3)).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
Tu remarqueras par ailleurs que j'ai supprimé toutes les lignes avec ".Select". Elles sont totalement inutiles car tu peux modifier les cellules sans les sélectionner au préalable : le code y gagne en clarté et en rapidité.
Cordialement.
Edit :Oups, bonjour WUTED, Vorens, vous êtes les plus rapides sur ce coup !
Re : Macro pour colorier une zone qui ne fonctionne pas
Salut,
C'est VBA qui attribue automatiquement un type si il n'est pas spécifier et vu que ton format de cellule était lui aussi non spécifié il a choisi de prendre le type string pour ta variable.
Pour une valeur dans une cellule, le type de base sera un string.
De plus, tu peux voir le type d'une variable en effectuant un clic droit sur ta variable puis "information expresse"
Re : Macro pour colorier une zone qui ne fonctionne pas
Re,
Code:
VarType(b)
Aprés le pourquoi du comment, sans avoir approfondi, je suppose que Format(..) renvoie par défaut une chaine de caractère comportant le numéro de semaine dans ton cas..
C'est VBA qui attribue automatiquement un type si il n'est pas spécifier et vu que ton format de cellule était lui aussi non spécifié il a choisi de prendre le type string pour ta variable.
Pour une valeur dans une cellule, le type de base sera un string.
De plus, tu peux voir le type d'une variable en effectuant un clic droit sur ta variable puis "information expresse"