Problème Select Case

Résolu
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 9 octobre 2009 - 8 oct. 2009 à 17:40
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Derniè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.

Auriez-vous une idée de mon problème ?

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 oct. 2009 à 18:06
salut,

de la manière dont tu as "prévu" le CASE, VAL à 3 ou à 10 ne sera jamais traité

mais de toute façon avant de revoir ce point : VAL est un mot réservé
utilise "value" par exemple, sans oublier au préalable de le déclarer

pense aussi à typer tes variables (paramètres inclus), sans quoi tout sera VARIANT

++
[hr]
0
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Derniè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 ?
0
Rejoignez-nous