Microsoft 365 Probleme de changement de couleur d'un bouton

  • Initiateur de la discussion Initiateur de la discussion jarc_76
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jarc_76

XLDnaute Nouveau
Bonjour à tous,
j'ai un petit problème :
dans ma feuille de travail, j'ai 2 boutons. Lorsque qu'on appui sur un bouton, je mets sa couleur de fond en vert et le fond de l'autre bouton en gris.
Sauf que ca ne fonctionne quand la macro se déroule. (le bouton sur lequel j'appui passe bien en vert mais l'autre bouton reste en gris).
En revanche, si je mets un point d'arrêt sur l'instruction qui colore le 2e bouton en gris , que je lance la macro, alors le prompt s'arrête sur le point d'arrêt, j'appui sur F8 et là le 2e bouton passe bien en gris.

Donc, au niveau syntaxe, c'est correct.
J'ai essayé de mettre un "Application.ScreenUpdating = True" avant l'instruction, mais ca ne change rien:

Sub Pop_Up_Verif()
' Cette fonction permet de saisir le numéro d'ampoule et affiche son défaut et son temps d'inspection
Dim Num_Ampoule, i As Integer
Dim Défaut As String
Dim rep As Integer
Dim flag As Integer

Init_Variables
flag = 0
'Si bouton2 en vert
If ActiveSheet.CommandButton2.BackColor = RGB(128, 255, 128) Then flag = 1

'Si Bp 'Mode Vérification' n'est pas vert
If ActiveSheet.CommandButton2.BackColor <> RGB(128, 255, 128) Then
'Coloration en vert du BP
ActiveSheet.CommandButton2.BackColor = RGB(128, 255, 128) '(**** Ici, l'instruction s'exécute bien, le bouton2 passe en vert ****)
'Coloration du BP 'Mode Saisie' en gris
Application.ScreenUpdating = True
ActiveSheet.CommandButton3.BackColor = RGB(242, 242, 242) '(**** Ici, l'instruction ne s'exécute pas correctement : le bouton3 reste en vert - Si je mets ici un point d'arrêt, le bouton passe en gris dès que j'appui sur F8 ****)
...

j'ai mis le fichier en pj, la ligne concernée se trouve dans le module1,
pour faire apparaitre le probleme :
cliquer sur le BP : "Mode Verif", le bouton passe en vert, ==> entrer une valeur entre 1 et 200, puis OK

ensuite appuyer sur le BP "Mode verif".

Le BP mode verif passe en vert mais le BP "mode saisie" reste en vert, alors qu'il devrait passer en gris.

Si quelqu'un a déjà eu ce problème et connait la solution, je suis preneur.

merci et bonne journée
 

Pièces jointes

Bonjour Jarc, et bienvenu sur XLD,
J'ai l'impression que vous jouez avec les couleurs des boutons 2 et 3 à de multiples endroits.
Pourquoi ne pas le faire qu'une seule fois.
Je clique sur bouton2 il se met en vert, l'autre en gris, et vice versa. Ce serait plus simple à gérer.
Et gérer les deux gris peut être fait lorsque l'action est terminée.
VB:
Private Sub CommandButton2_Click()
' Bouton Mode Verif
    ActiveSheet.CommandButton2.BackColor = RGB(128, 255, 128)
    ActiveSheet.CommandButton3.BackColor = RGB(242, 242, 242)
Pop_Up_Verif
End Sub
Private Sub CommandButton3_Click()
' Bouton Mode Verif
    ActiveSheet.CommandButton3.BackColor = RGB(128, 255, 128)
    ActiveSheet.CommandButton2.BackColor = RGB(242, 242, 242)
Pop_Up_Verif
End Sub
Une autre méthode mieux structurée est de faire 3 petites macros de couleurs :
Code:
Private Sub VertGris()
    ActiveSheet.CommandButton3.BackColor = RGB(128, 255, 128)
    ActiveSheet.CommandButton2.BackColor = RGB(242, 242, 242)
End Sub
Private Sub GrisVert()
    ActiveSheet.CommandButton2.BackColor = RGB(128, 255, 128)
    ActiveSheet.CommandButton3.BackColor = RGB(242, 242, 242)
End Sub
Private Sub GrisGris()
    ActiveSheet.CommandButton2.BackColor = RGB(242, 242, 242)
    ActiveSheet.CommandButton3.BackColor = RGB(242, 242, 242)
End Sub
Qui sont appelées au besoin. Qui plus est, si l'envie vous chante de changer les couleurs, elles sont toutes gérées au même endroit.
 
Bonjour Sylvanu,

merci de ta réponse.

j'ai deja essayé de mettre le forcage des couleurs dans le code du bouton, mais le résultat reste identique.
je vais refaire qques essais toutefois.
Ceci dit , cette solution ne peut pas convenir car dans les differentes macros, je teste la couleur des boutons pour détecter si le mode ('verification' ou 'saisie') est sélectionné ou non . Si je change la couleur avant l'appel des macros, forcément mon teste derrière sera erroné..
bon je peux pallier a ca avec une variable intermédiaire...
je fais des essais...
 
Re,
Le mieux est de ne pas lire les couleurs des boutons, mais de créer une variable publique CouleurBouton.
Par ex 0 pour GrisGris, 1 pour VertGris et 2 pour GrisVert.
Elle n'est gérée que par les modules couleurs.
Il suffit alors de lire cette variable pour savoir dans quel état on est. Et surtout de ne gérer les couleurs qu'en un seul endroit.
En PJ un ex, tout est géré en un seul module, et le test se fait sur une variable, et non par lecture de la couleur d'un bouton.
 

Pièces jointes

Re,
Le mieux est de ne pas lire les couleurs des boutons, mais de créer une variable publique CouleurBouton.
Par ex 0 pour GrisGris, 1 pour VertGris et 2 pour GrisVert.
Elle n'est gérée que par les modules couleurs.
Il suffit alors de lire cette variable pour savoir dans quel état on est. Et surtout de ne gérer les couleurs qu'en un seul endroit.
En PJ un ex, tout est géré en un seul module, et le test se fait sur une variable, et non par lecture de la couleur d'un bouton.
Alors oui et non ^^, je m'explique :
si je mets en variable publique, une mémoire pour savoir dans quel etat est mon mode (actif ou inactif), cette variable sera perdue a la fin de l'exécution de la macro.
a la prochaine utilisation de la macro, ma variable sera fatalement vide donc non sauvegardée. Idem en cas de fermeture d'excel puis réouverture
l'avantage d'utiliser la couleur est justement que l'info actif ou inactif reste figée.
pour maintenir cette notion de maintien de l'info, il faudrait éventuellement que j'inscrive l'état du mode dans une cellule cachée ...

toutefois, j'insiste que si je mets le changement de couleur directement ds la programmation du bouton et que j'appelle ma macro, le problème persiste.

De ce que je vois, le probleme viendrait plutot du fait que derriere cette demande de changement de couleur, j'ouvre une pop up (inpubox). quand cette pop up se ferme, la couleur se modifie.
j'ai effectué un autre test, apres la ligne de demande de changement de couleur (et avant l'ouverture de la pop up), je teste la couleur du bouton en l'inscrivant ds une cellule : la couleur déclarée est bien le gris , sauf que visuellement, elle est resté verte !!Je conclue donc que la pop up "empeche" le rafraichissement visuel de la couleur.
J'ai tenté de mettre un DoEvent, ou un Application.ScreenUpdating = True, mais ca ne change rien

je vais qd meme tenter d'effectuer ta proposition de solution. Et je reviendrai donner le résultat.

Merci
 
Bonjour.
Au lieu de deux CommandButton, un seul ToggleButton serait peut être plus pratique …
Salut
non, pas possible : chaque bouton a une fonction propre et je dois avoir 3 etats : soit le BP1 est activé (Mode Saisie), soit le BP2 est activé (mode Verification), soit aucun des 2 boutons n'est activé (pas de mode verif, pas de mode saisie).
Avec un toggle, je ne peux avoir que 2 etats..
 
Re,
si je mets en variable publique, une mémoire pour savoir dans quel etat est mon mode (actif ou inactif), cette variable sera perdue a la fin de l'exécution de la macro.
Euh ... non. C'est même la spécificité d'une variable publique.
Sa valeur est conservée même après que la macro soit exécutée et est disponible pour les autres macros.
Sa valeur n'est perdue que lorsqu'on ferme le fichier.
Les variables publiques peuvent être utilisées dans toutes les procédures du projet. Si une variable publique est déclarée dans un module standard ou un module de classe, elle peut également être utilisée dans tous les projets qui font référence au projet dans lequel elle est déclarée.
 
Re,

Euh ... non. C'est même la spécificité d'une variable publique.
Sa valeur est conservée même après que la macro soit exécutée et est disponible pour les autres macros.
Sa valeur n'est perdue que lorsqu'on ferme le fichier.
Autant pour moi alors^^
effectivement, je viens de faire le test, les valeurs des variables publiques sont maintenues.
La perte de données en cas de fermeture du fichier n'est pas trop grave au final...
Je vais faire comme ca, c'est plus carré que d'utiliser la couleur du bouton, c sur ...
toutefois, ca ne résout pas mon probleme initial... Bon, je vais faire la modif, et je te redis.


j'ai en parallèle testé une autre "solution" :

J'ai remplacé l'ouverture de la pop up apres les instructions de changement de couleur par une userform, et là, ça fonctionne correctement.
Ca ne m'explique pas pourquoi le rafraichissement de couleur du bouton ne se fait pas dans le cas d'une ouverture de pop up juste derrière mais ca me donne une solution au moins ...
 
effectivement, je viens de faire le test,
C'était le but de ma PJ de démonstration. 🙂
Ensuite il existe toujours plusieurs solutions. pour résoudre un problème.
Ca ne m'explique pas pourquoi le rafraichissement de couleur du bouton ne se fait pas dans le cas d'une ouverture de pop up juste derrière
Difficile à dire, il y a trop d'endroits où vous jouez avec les boutons, surement une config à laquelle vous n'avez pas pensé.
C'est pour cela qu'une structure plus claire serait plus efficace.
 
Bonjour à tous,
j'ai un petit problème :
dans ma feuille de travail, j'ai 2 boutons. Lorsque qu'on appui sur un bouton, je mets sa couleur de fond en vert et le fond de l'autre bouton en gris.
Sauf que ca ne fonctionne quand la macro se déroule. (le bouton sur lequel j'appui passe bien en vert mais l'autre bouton reste en gris).
En revanche, si je mets un point d'arrêt sur l'instruction qui colore le 2e bouton en gris , que je lance la macro, alors le prompt s'arrête sur le point d'arrêt, j'appui sur F8 et là le 2e bouton passe bien en gris.

Donc, au niveau syntaxe, c'est correct.
J'ai essayé de mettre un "Application.ScreenUpdating = True" avant l'instruction, mais ca ne change rien:

Sub Pop_Up_Verif()
' Cette fonction permet de saisir le numéro d'ampoule et affiche son défaut et son temps d'inspection
Dim Num_Ampoule, i As Integer
Dim Défaut As String
Dim rep As Integer
Dim flag As Integer

Init_Variables
flag = 0
'Si bouton2 en vert
If ActiveSheet.CommandButton2.BackColor = RGB(128, 255, 128) Then flag = 1

'Si Bp 'Mode Vérification' n'est pas vert
If ActiveSheet.CommandButton2.BackColor <> RGB(128, 255, 128) Then
'Coloration en vert du BP
ActiveSheet.CommandButton2.BackColor = RGB(128, 255, 128) '(**** Ici, l'instruction s'exécute bien, le bouton2 passe en vert ****)
'Coloration du BP 'Mode Saisie' en gris
Application.ScreenUpdating = True
ActiveSheet.CommandButton3.BackColor = RGB(242, 242, 242) '(**** Ici, l'instruction ne s'exécute pas correctement : le bouton3 reste en vert - Si je mets ici un point d'arrêt, le bouton passe en gris dès que j'appui sur F8 ****)
...

j'ai mis le fichier en pj, la ligne concernée se trouve dans le module1,
pour faire apparaitre le probleme :
cliquer sur le BP : "Mode Verif", le bouton passe en vert, ==> entrer une valeur entre 1 et 200, puis OK

ensuite appuyer sur le BP "Mode verif".

Le BP mode verif passe en vert mais le BP "mode saisie" reste en vert, alors qu'il devrait passer en gris.

Si quelqu'un a déjà eu ce problème et connait la solution, je suis preneur.

merci et bonne journée
Bonjour à tous,
j'ai un petit problème :
dans ma feuille de travail, j'ai 2 boutons. Lorsque qu'on appui sur un bouton, je mets sa couleur de fond en vert et le fond de l'autre bouton en gris.
Sauf que ca ne fonctionne quand la macro se déroule. (le bouton sur lequel j'appui passe bien en vert mais l'autre bouton reste en gris).
En revanche, si je mets un point d'arrêt sur l'instruction qui colore le 2e bouton en gris , que je lance la macro, alors le prompt s'arrête sur le point d'arrêt, j'appui sur F8 et là le 2e bouton passe bien en gris.

Donc, au niveau syntaxe, c'est correct.
J'ai essayé de mettre un "Application.ScreenUpdating = True" avant l'instruction, mais ca ne change rien:

Sub Pop_Up_Verif()
' Cette fonction permet de saisir le numéro d'ampoule et affiche son défaut et son temps d'inspection
Dim Num_Ampoule, i As Integer
Dim Défaut As String
Dim rep As Integer
Dim flag As Integer

Init_Variables
flag = 0
'Si bouton2 en vert
If ActiveSheet.CommandButton2.BackColor = RGB(128, 255, 128) Then flag = 1

'Si Bp 'Mode Vérification' n'est pas vert
If ActiveSheet.CommandButton2.BackColor <> RGB(128, 255, 128) Then
'Coloration en vert du BP
ActiveSheet.CommandButton2.BackColor = RGB(128, 255, 128) '(**** Ici, l'instruction s'exécute bien, le bouton2 passe en vert ****)
'Coloration du BP 'Mode Saisie' en gris
Application.ScreenUpdating = True
ActiveSheet.CommandButton3.BackColor = RGB(242, 242, 242) '(**** Ici, l'instruction ne s'exécute pas correctement : le bouton3 reste en vert - Si je mets ici un point d'arrêt, le bouton passe en gris dès que j'appui sur F8 ****)
...

j'ai mis le fichier en pj, la ligne concernée se trouve dans le module1,
pour faire apparaitre le probleme :
cliquer sur le BP : "Mode Verif", le bouton passe en vert, ==> entrer une valeur entre 1 et 200, puis OK

ensuite appuyer sur le BP "Mode verif".

Le BP mode verif passe en vert mais le BP "mode saisie" reste en vert, alors qu'il devrait passer en gris.

Si quelqu'un a déjà eu ce problème et connait la solution, je suis preneur.

merci et bonne journée
Do events
????
 
bien, j'ai effectué les modifs, en declarant 2 variables publiques, en centralisant les demandes de colorations de boutons dans des fonctions dédiées (GrisVert, VertGris, GrisGris).

Et à mon grand desespoir, les résultats obtenus sont identiques ...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
772
Réponses
48
Affichages
5 K
Réponses
1
Affichages
1 K
Retour