Problème Select Case [Résolu]

Signaler
Messages postés
37
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
9 octobre 2009
-
Messages postés
37
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
9 octobre 2009
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
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)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
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]
Messages postés
37
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
9 octobre 2009

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 ?