lomatic
Messages postés37Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention 9 octobre 2009
-
8 oct. 2009 à 17:40
lomatic
Messages postés37Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention 9 octobre 2009
-
9 oct. 2009 à 10:33
Bonsoir à tous,
Je vais expliquer tout d'abord ce que dois réaliser le script. Il va vérifier une plage allant de x à y à sa valeur égale à z ou <= à b (j'utilise des lettres pour l'explication), puis va vérifier que la cellule ne possède pas la couleur qui lui serait appliquée.
Mon problème doit venir du Select Case mais je ne comprends pas trop pourquoi il ne rentre pas dans mes conditions.
For Each cel In Range(debutTrait, finTrait)
cel.Select
If Not cel.Value = Empty Then
val = CInt(cel.Value)
Select Case val
Case val <= 3
If Not Selection.Interior.Color = RGB(200, 160, 35) Then
Range(debutTrait).Interior.Color = RGB(200, 160, 35)
End If
Case val >= 3
If cel.Value < 10 And Not Selection.Interior.Color = RGB(255, 102, 0) Then
Range(debutTrait).Interior.Color = RGB(255, 102, 0)
End If
Case val = 10
If Not Selection.Interior.Color = RGB(255, 204, 51) Then
Range(debutTrait).Interior.Color = RGB(255, 204, 51)
End If
Case Else
End Select
End If
i = i + 1
debutTrait = Left(debutTrait, 1) & i
Next
J'ai vérifié la valeur de "val" en débuggant mais il passe à chaque cas sans rentrer dedans.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 8 oct. 2009 à 18:04
Salut
"il passe à chaque cas sans rentrer dedans" : Que veux-tu dire ?
Si tu ne passes pas par le Val, c'est le If qui ne fonctionne pas, pas le Select-Case.
Val est un mot clé réservé du langage.
A transformer en Valeur, par exemple.
Pense à dimensionner tes variables + mettre "Option Explicit" en tête de page de code : ça évite les erreurs liées aux types.
Est-il normal que tu testes selection.interior.color alors que tu modifies range(debuttrait).interior.color, c'est à dire, toujours la même cellule
Select-Case ne s'utilise pas comme ça, tu aurais pu t'en rendre compte en lisant l'aide de la fonction + mieux vaut utiliser cette structure plus propre :
Select Case Valeur
Case Is <= 3
If Not Selection.Interior.Color = RGB(200, 160, 35) Then
Range(debuttrait).Interior.Color = RGB(200, 160, 35)
End If
Case 3 To 9
If Not Selection.Interior.Color = RGB(255, 102, 0) Then
Range(debuttrait).Interior.Color = RGB(255, 102, 0)
End If
Case Is >= 10
If Not Selection.Interior.Color = RGB(255, 204, 51) Then
Range(debuttrait).Interior.Color = RGB(255, 204, 51)
End If
End Select
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
lomatic
Messages postés37Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention 9 octobre 2009 9 oct. 2009 à 10:33
Merci, grâce à la correction sur "val" et par rapport au Select Case, tout marche pour le mieux.
Voici le code final (sauf si vous avez des idées à me suggérer ):
Option Explicit
Sub GestionCouleur()
Dim debutTrait As String, finTrait As String
Dim equal As Long
Dim i As Integer
Dim valeur As Integer
Dim cel As Range
debutTrait = UfrmGestion.txtDebutTraitement.Text
finTrait = UfrmGestion.txtFinTraitement.Text
i = Right(debutTrait, Len(debutTrait) - 1)
For Each cel In Range(debutTrait, finTrait)
cel.Select
If Not cel.Value = Empty Then
valeur = CInt(cel.Value)
Select Case valeur
Case Is <= 3
If Not Range(debutTrait).Interior.Color = RGB(204, 0, 0) Then
Range(debutTrait).Interior.Color = RGB(204, 0, 0)
End If
Case 4 To 9
If Not Range(debutTrait).Interior.Color = RGB(200, 160, 35) Then
Range(debutTrait).Interior.Color = RGB(200, 160, 35)
End If
Case 10
If Not Range(debutTrait).Interior.Color = RGB(255, 204, 51) Then
Range(debutTrait).Interior.Color = RGB(255, 204, 51)
End If
Case Is >= 11
If Not Range(debutTrait).Interior.Color = RGB(153, 255, 51) Then
Range(debutTrait).Interior.Color = RGB(153, 255, 51)
End If
Case Else
End Select
End If
i = i + 1
debutTrait = Left(debutTrait, 1) & i
Next
'On retourne au début de notre document
Range("C2").Select
End Sub
Le test pour vérifier que la couleur est déjà présente dans la cellule ne serait-il pas inutile ?
Je viens de tester pour un des cas en retirant la condition et cela ne génère pas de problème. Qu'en pensez-vous ?