OVH Cloud OVH Cloud

BackColor

15 réponses
Avatar
Willi2004
Bonjour à tous!
Permettez-moi de vous soumettre une question qui relève uniquement d'une
petite curiosité.
Dans un formulaire, le code ci-dessous permet au contrôle "Horloge" de
changer alternativement de couleur (Jaune, puis Vert clair):

Private Sub Form_Timer()
If Me!Horloge.BackColor=8454143 Then
Me!Horloge.BackColor=65280
Else
Me!Horloge.BackColor=8454143
End If
End Sub

La question: Peut-on faire en sorte que se contrôle passe alternativement
par trois couleurs au lieu de deux (Jaune, puis Vert clair, puis Bleu par
exemple)?

10 réponses

1 2
Avatar
Willi2004
Mille excuses braves gens, veuillez oublier ma question car j'ai trouvé la
réponse:

Private Sub Form_Timer()

If Me.Horloge.BackColor = 8454143 Then
Me.Horloge.BackColor = 65280
Else
If Me.Horloge.BackColor = 16711680 Then
Me.Horloge.BackColor = 8454143
Else
Me.Horloge.BackColor = 16711680
End If
End If

End Sub
Avatar
3stone
Salut,

"Willi2004"
| Mille excuses braves gens, veuillez oublier ma question car j'ai trouvé la
| réponse:


Oui, mais plus zoli ;-)

'Déclaration
Dim iCol As Integer
Const Col1 As Long = 65280
Const Col2 As Long = 8454143
Const Col3 As Long = 16711680

Private Sub Form_Timer()
iCol = iCol + 1
Select Case iCol
Case 1: Me.Horloge.BackColor = Col1
Case 2: Me.Horloge.BackColor = Col2
Case 3: Me.Horloge.BackColor = Col3: iCol = 0
End Select

End Sub

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Willi2004
Eh bien, en fin de compte je n'ai pas eu tort de poser la question car elle
m'a donné l'occasion d'apprendre quelque chose de notre si cher 3stone.
Merci Professeur.
Avatar
Willi2004
Rebonjour Professeur stone!

Ton code est de loin préférable, et je l'ai tout de suite adopté à la place
du mien.
Pour que l'action de passer successivement par les trois couleurs s'exécute
en boucle, j'ai rajouté quelques lignes de code, comme ceci:

Private Sub Form_Timer()
Lbl1: iCol = iCol + 1
Select Case iCol
Case 1: Me.Horloge.BackColor = Col1
Case 2: Me.Horloge.BackColor = Col2
Case 3: Me.Horloge.BackColor = Col3
iCol = iCol - 4
GoTo Lbl1
End Select
End Sub

Vraiment intéressant!!
Ca permet de passer par autant de couleurs qu'on veut sans s'embrouiller
avec d'interminables If ..... Then.
Merci de m'avoir enrichi.
Avatar
3stone
Salut Willi,

"Willi2004"
[...]
| j'ai rajouté quelques lignes de code, comme ceci:
|
| Private Sub Form_Timer()
| Lbl1: iCol = iCol + 1
| Select Case iCol
| Case 1: Me.Horloge.BackColor = Col1
| Case 2: Me.Horloge.BackColor = Col2
| Case 3: Me.Horloge.BackColor = Col3
| iCol = iCol - 4
| GoTo Lbl1
| End Select
| End Sub

Oui ;-)
Mais du coup, il est à nouveau... vilain...
Un goto dans une sub c'est... *interdit*
et très certainement un saut sans condition ;-(

Si tu souhaite exécuter plusieurs fois, regarde les Do... Loop Until
ou les While... Whend.

| Ca permet de passer par autant de couleurs qu'on veut sans s'embrouiller
| avec d'interminables If ..... Then.

c'est en partie ca l'idée...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Willi2004
Mais, Professeur...
Je ne sais pas si l'instruction Do...Loop peut réellement s'appliquer au cas
présent.
Elle exécute un bloc d'instructions un certain nombre de fois.
Or ici, il faut que l'exécution du bloc d'instruction se fasse sans
discontinuer, tant que le formulaire reste ouvert.
J'ai cherché pendant deux heures sans trouver comment faire!!
Avatar
Eric
Bonsoir,

Tu mets le code initialement donné par Pierre(3stone) sur le timer du
formulaire et un itervelle de 1000 ms par exemple. Ca ne s'arretera
jamais tant que tu ne mets pas l'intervalle à 0 ou que tu fermes pas le
formulaire.
Mais j'ai peut-être mal compris ce que tu veux faire.

Mais, Professeur...
Je ne sais pas si l'instruction Do...Loop peut réellement s'appliquer au cas
présent.
Elle exécute un bloc d'instructions un certain nombre de fois.
Or ici, il faut que l'exécution du bloc d'instruction se fasse sans
discontinuer, tant que le formulaire reste ouvert.
J'ai cherché pendant deux heures sans trouver comment faire!!




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
3stone
Willi !!!

"Willi2004"
| Je ne sais pas si l'instruction Do...Loop peut réellement s'appliquer au cas
| présent.
| Elle exécute un bloc d'instructions un certain nombre de fois.
| Or ici, il faut que l'exécution du bloc d'instruction se fasse sans
| discontinuer, tant que le formulaire reste ouvert.
| J'ai cherché pendant deux heures sans trouver comment faire!!


Le "TimerInterval" (Intervalle minuterie) indique le temps... entre 2 passages
dans la sub "Form_Timer" (Sur minuterie)
Donc, à chaque passage, le code est exécuté !

Si tu veux que la couleur change tous les demis secondes, tu mets
500 (500 milisecondes) dans TimerInterval !
A chaque passage, la valeur iCol sera incrémentée et la couleur correspondante
sera attibuée à ta zone de texte.

PS:
Faire boucler dans cet événement est ma pire des solutions ;-(

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
3stone
| ... touTEs les demis secondes, tu mets


| ... est LA pire des solutions ;-(


;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Willi2004
Le code donné par 3stone ne s'exécute qu'une fois.
En effet:
Pour iCol = 1, Case 1 s'exécute: couleur verte;
ensuite
Pour iCol = 2, Case 2 s'exécute: couleur jaune;
ensuite
Pour iCol = 3, Case 3 s'exécute: couleur bleue;

Puis iCol continue de s'incrémenter: 4, 5, 6, 7, etc...
Mais alors il n' y a plus de "Case" correspondant, donc plus d'exécution!!
L'exécution n'a donc lieu qu'une fois.
Vous pouvez bien essayer et vérifier par vous-même que les choses se passent
bien ainsi.

Alors Professeur?
1 2