Boucles

Fermé
mcno Messages postés 2 Date d'inscription mardi 25 août 2015 Statut Membre Dernière intervention 25 août 2015 - 25 août 2015 à 13:45
 Tessel75 - 25 août 2015 à 22:38
Bonjour,

Est-ce que quelqu'un pourrait m'expliquer comment simplifier les instructions ci-dessous:

' Format conditionnel des champs tâches"
Select Case Me.Lundi.Column(1)

Case "désin": Me![Lundi].ForeColor = vbRed
Case "Désin*": Me![Lundi].ForeColor = vbRed
Case "Balay": Me![Lundi].ForeColor = vbBlack
Case "Lava": Me![Lundi].ForeColor = vbBlue
Case "Aspi": Me![Lundi].ForeColor = vbGreen
End Select

Select Case Me.Mardi.Column(1)

Case "désin": Me![Mardi].ForeColor = vbRed
Case "Désin*": Me![Mardi].ForeColor = vbRed
Case "Balay": Me![Mardi].ForeColor = vbBlack
Case "Lava": Me![Mardi].ForeColor = vbBlue
Case "Aspi": Me![Mardi].ForeColor = vbGreen
End Select

Select Case Me.Mercredi.Column(1)

Case "désin": Me![Mercredi].ForeColor = vbRed
Case "Désin*": Me![Mercredi].ForeColor = vbRed
Case "Balay": Me![Mercredi].ForeColor = vbBlack
Case "Lava": Me![Mercredi].ForeColor = vbBlue
Case "Aspi": Me![Mercredi].ForeColor = vbGreen
End Select

Select Case Me.Jeudi.Column(1)

Case "désin": Me![Jeudi].ForeColor = vbRed
Case "Désin*": Me![Jeudi].ForeColor = vbRed
Case "Balay": Me![Jeudi].ForeColor = vbBlack
Case "Lava": Me![Jeudi].ForeColor = vbBlue
Case "Aspi": Me![Jeudi].ForeColor = vbGreen
End Select

Select Case Me.Vendredi.Column(1)

Case "désin": Me![Vendredi].ForeColor = vbRed
Case "Désin*": Me![Vendredi].ForeColor = vbRed
Case "Balay": Me![Vendredi].ForeColor = vbBlack
Case "Lava": Me![Vendredi].ForeColor = vbBlue
Case "Aspi": Me![Vendredi].ForeColor = vbGreen
End Select


Merci d'avance.

1 réponse

Bonjour,
Il n'y a pas beaucoup de simplification à apporter à ton code.
Attention : En principe, sauf s'il y a eu des changements dans les nouvelles versions du VBA, tu ne peux pas utiliser l'expression "like "ABC*"" avec Select Case. A moins que ton "*" soit à prendre comme un caractère propre.
Par contre, tu peux regrouper plusieurs conditions sous un même "Case":
Case "ABC", "DEF", "GHJ", etc ... : XYZ
Et puis, tu peux utiliser l'écriture With ... End With pour alléger l'écriture.
A l'arrivée, tu auras une écriture du genre:
With Me![Lundi]
Select case .Column(1)
Case "désin","Désin*": .ForeColor = vbRed
Case "Balay": .ForeColor = vbBlack
etc
End select
End with

Et ainsi de suite
0
mcno Messages postés 2 Date d'inscription mardi 25 août 2015 Statut Membre Dernière intervention 25 août 2015
25 août 2015 à 16:15
Merci Tessel75,

Merci pour ta réponse rapide.

En effet l'* est un caractère que nous utilisons dans la désignation du travail effectué et est donc un caractère propre. Ce que je pensais était plutôt d'utiliser une fonction du genre "for each" pour ne pas répéter les actions pour chaque jour de la semaine, un peu comme une sous-routine.
0
Je connais très très mal la fonction "For each ...", que je n'ai jamais utilisé dans ce cas de figure; A la réflexion, il va falloir que tu répertories tous tes contrôles, que tu organises leur ordre et que tu exclues ceux dont le nom n'est pas un nom de jour de la semaine. Il n'est pas sûr que ce soit plus simple et plus rapide en tant que code.
Bonne suite.
0