Microsoft 365 Probleme de changement de couleur d'un bouton

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

  • Bilan Kits Mirage Manuel - Version Beta8 - Copie.xlsm
    725.9 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

jarc_76

XLDnaute Nouveau
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...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • TestBoutons.xlsm
    25.9 KB · Affichages: 5

jarc_76

XLDnaute Nouveau
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
 

jarc_76

XLDnaute Nouveau
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..
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

jarc_76

XLDnaute Nouveau
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 ...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Modeste geedee

XLDnaute Barbatruc
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
????
 

jarc_76

XLDnaute Nouveau
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 ...
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 677
dernier inscrit
Justine11