Macro pour colorier une zone qui ne fonctionne pas

Trance4life

XLDnaute Nouveau
Bonjour,

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

Merci
 

Pièces jointes

  • Calendrier.xls
    47 KB · Affichages: 54
  • Calendrier.xls
    47 KB · Affichages: 57
  • Calendrier.xls
    47 KB · Affichages: 73

WUTED

XLDnaute Occasionnel
Re : Macro pour colorier une zone qui ne fonctionne pas

Bonjour Trance4life,

Y'a un soucis avec le type de tes variables : b est un String et Cells(1,26).Value est un Double. Tu peux mettre :
Code:
If CInt(Cells(1, 26).Value) = CInt(b) Then
Pour pallier à ce problème.
Bonne journée.
 

Vorens

XLDnaute Occasionnel
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

Meilleures salutations
 

Papou-net

XLDnaute Barbatruc
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 !
 

Trance4life

XLDnaute Nouveau
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 !

Merci je ne pensais pas qu'on pouvais utiliser directement le Range.Value sans sélectionner une cellule.
 

Trance4life

XLDnaute Nouveau
Re : Macro pour colorier une zone qui ne fonctionne pas

Sinon comment vous savez que b est un string si je déclare pas mes variables ?

Et j'ai pas très bien compris en quoi c'était un string vu que c'est un numéro de semaine et un string est une chaine de caractère.
 

Vorens

XLDnaute Occasionnel
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"
 

WUTED

XLDnaute Occasionnel
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..

Bonne journée.
 

Trance4life

XLDnaute Nouveau
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"

Ah merci je ne connaissais pas !
 

Statistiques des forums

Discussions
312 153
Messages
2 085 804
Membres
102 981
dernier inscrit
fred02v